void GaduChatImageService::prepareImageToSend(const QString &imageFileName, uint32_t &size, uint32_t &crc32) { kdebugmf(KDEBUG_INFO, "Using file \"%s\"\n", qPrintable(imageFileName)); ImageToSend imageToSend; imageToSend.fileName = imageFileName; loadImageContent(imageToSend); if (imageToSend.content.isNull()) return; imageToSend.crc32 = gg_crc32(0, (const unsigned char*)imageToSend.content.data(), imageToSend.content.length()); size = imageToSend.content.length(); crc32 = imageToSend.crc32; ImagesToSend[qMakePair(size, crc32)] = imageToSend; }
ggp_image_prepare_result ggp_image_prepare(PurpleConversation *conv, const int stored_id, uint64_t *id) { PurpleConnection *gc = purple_conversation_get_connection(conv); ggp_image_session_data *sdata = ggp_image_get_sdata(gc); PurpleStoredImage *image = purple_imgstore_find_by_id(stored_id); size_t image_size; gconstpointer image_data; uint32_t image_crc; ggp_image_sent *sent_image; if (!image) { purple_debug_error("gg", "ggp_image_prepare: image %d " "not found in image store\n", stored_id); return GGP_IMAGE_PREPARE_FAILURE; } image_size = purple_imgstore_get_size(image); if (image_size > GGP_IMAGE_SIZE_MAX) { purple_debug_warning("gg", "ggp_image_prepare: image " "is too big (max bytes: %d)\n", GGP_IMAGE_SIZE_MAX); return GGP_IMAGE_PREPARE_TOO_BIG; } purple_imgstore_ref(image); image_data = purple_imgstore_get_data(image); image_crc = gg_crc32(0, image_data, image_size); purple_debug_info("gg", "ggp_image_prepare: image prepared " "[id=%d, crc=%u, size=%" G_GSIZE_FORMAT "]\n", stored_id, image_crc, image_size); *id = ggp_image_params_to_id(image_crc, image_size); sent_image = g_new(ggp_image_sent, 1); sent_image->id = stored_id; sent_image->conv_name = g_strdup(purple_conversation_get_name(conv)); g_hash_table_insert(sdata->sent_images, ggp_uint64dup(*id), sent_image); return GGP_IMAGE_PREPARE_OK; }