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