Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}