Mercurial > pidgin
comparison libpurple/protocols/jabber/data.c @ 29786:b6dda7d483a2
Added an "ephemeral" argument when creating local data objects (given a CID).
This will cause them to be destroyed automatically when receiving a get request
To be use for short-lived "one time" data, such as file transfer thumbnails
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Mon, 29 Jun 2009 20:44:45 +0000 |
parents | 51bc0be83108 |
children | 259a331e4de7 |
comparison
equal
deleted
inserted
replaced
29785:51bc0be83108 | 29786:b6dda7d483a2 |
---|---|
29 static GHashTable *local_data_by_cid = NULL; | 29 static GHashTable *local_data_by_cid = NULL; |
30 static GHashTable *remote_data_by_cid = NULL; | 30 static GHashTable *remote_data_by_cid = NULL; |
31 | 31 |
32 JabberData * | 32 JabberData * |
33 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type, | 33 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type, |
34 JabberStream *js) | 34 gboolean ephemeral, JabberStream *js) |
35 { | 35 { |
36 JabberData *data = g_new0(JabberData, 1); | 36 JabberData *data = g_new0(JabberData, 1); |
37 gchar *checksum = purple_util_get_image_checksum(rawdata, size); | 37 gchar *checksum = purple_util_get_image_checksum(rawdata, size); |
38 gchar cid[256]; | 38 gchar cid[256]; |
39 | 39 |
41 g_free(checksum); | 41 g_free(checksum); |
42 | 42 |
43 data->cid = g_strdup(cid); | 43 data->cid = g_strdup(cid); |
44 data->type = g_strdup(type); | 44 data->type = g_strdup(type); |
45 data->size = size; | 45 data->size = size; |
46 data->ephemeral = ephemeral; | |
46 | 47 |
47 data->data = g_memdup(rawdata, size); | 48 data->data = g_memdup(rawdata, size); |
48 | 49 |
49 return data; | 50 return data; |
50 } | 51 } |
227 if (who) | 228 if (who) |
228 xmlnode_set_attrib(result->node, "to", who); | 229 xmlnode_set_attrib(result->node, "to", who); |
229 xmlnode_set_attrib(result->node, "id", id); | 230 xmlnode_set_attrib(result->node, "id", id); |
230 xmlnode_insert_child(result->node, | 231 xmlnode_insert_child(result->node, |
231 jabber_data_get_xml_definition(data)); | 232 jabber_data_get_xml_definition(data)); |
233 /* if the data object is temporary, destroy it and remove the references | |
234 to it */ | |
235 if (data->ephemeral) { | |
236 g_hash_table_remove(local_data_by_cid, cid); | |
237 jabber_data_destroy(data); | |
238 } | |
232 } | 239 } |
233 jabber_iq_send(result); | 240 jabber_iq_send(result); |
234 } | 241 } |
235 | 242 |
236 void | 243 void |