bool GaduChatImageService::sendImageRequest(Contact contact, int size, uint32_t crc32) { kdebugf(); if (!contact.accountData(Protocol->account()) || (CurrentMinuteSendImageRequests > config_file.readUnsignedNumEntry("Chat", "MaxImageRequests"))) return false; CurrentMinuteSendImageRequests++; return 0 == gg_image_request(Protocol->gaduSession(), Protocol->uin(contact), size, crc32); }
void ggp_image_request(PurpleConnection *gc, uin_t uin, uint64_t id, ggp_image_request_cb cb, gpointer user_data) { GGPInfo *accdata = purple_connection_get_protocol_data(gc); ggp_image_session_data *sdata = ggp_image_get_sdata(gc); ggp_image_requested *req; ggp_image_requested_listener *listener; uint32_t crc = id >> 32; uint32_t size = id; if (size > GGP_IMAGE_SIZE_MAX && crc <= GGP_IMAGE_SIZE_MAX) { uint32_t tmp; purple_debug_warning("gg", "ggp_image_request: " "crc and size are swapped!\n"); tmp = crc; crc = size; size = tmp; } req = g_hash_table_lookup(sdata->incoming_images, &id); if (!req) { req = g_new0(ggp_image_requested, 1); g_hash_table_insert(sdata->incoming_images, ggp_uint64dup(id), req); purple_debug_info("gg", "ggp_image_request: " "requesting image " GGP_IMAGE_ID_FORMAT "\n", id); if (gg_image_request(accdata->session, uin, size, crc) != 0) purple_debug_error("gg", "ggp_image_request: failed\n"); } else { purple_debug_info("gg", "ggp_image_request: " "image " GGP_IMAGE_ID_FORMAT " already requested\n", id); } listener = g_new0(ggp_image_requested_listener, 1); listener->cb = cb; listener->user_data = user_data; req->listeners = g_list_append(req->listeners, listener); }