comparison libpurple/protocols/jabber/data.c @ 30623:8cd8c26ea2f9

jabber: Add a bunch of g_return_if_fail checks to the BoB code (Entirely untested, but I asked Marcus to double-check them)
author Paul Aurich <paul@darkrain42.org>
date Thu, 17 Jun 2010 01:26:02 +0000
parents 7fbb7612e3dd
children 0c41b5c08cdc
comparison
equal deleted inserted replaced
30622:d78a3f06b7a0 30623:8cd8c26ea2f9
39 39
40 JabberData * 40 JabberData *
41 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type, 41 jabber_data_create_from_data(gconstpointer rawdata, gsize size, const char *type,
42 gboolean ephemeral, JabberStream *js) 42 gboolean ephemeral, JabberStream *js)
43 { 43 {
44 JabberData *data = g_new0(JabberData, 1); 44 JabberData *data;
45 gchar *checksum = jabber_calculate_data_hash(rawdata, size, "sha1"); 45 gchar *checksum;
46 gchar cid[256]; 46 gchar cid[256];
47
48 g_return_val_if_fail(rawdata != NULL, NULL);
49 g_return_val_if_fail(size > 0, NULL);
50 g_return_val_if_fail(type != NULL, NULL);
51
52 data = g_new0(JabberData, 1);
53 checksum = jabber_calculate_data_hash(rawdata, size, "sha1");
47 54
48 g_snprintf(cid, sizeof(cid), "sha1+%s@bob.xmpp.org", checksum); 55 g_snprintf(cid, sizeof(cid), "sha1+%s@bob.xmpp.org", checksum);
49 g_free(checksum); 56 g_free(checksum);
50 57
51 data->cid = g_strdup(cid); 58 data->cid = g_strdup(cid);
60 67
61 static void 68 static void
62 jabber_data_delete(gpointer cbdata) 69 jabber_data_delete(gpointer cbdata)
63 { 70 {
64 JabberData *data = cbdata; 71 JabberData *data = cbdata;
72
65 g_free(data->cid); 73 g_free(data->cid);
66 g_free(data->type); 74 g_free(data->type);
67 g_free(data->data); 75 g_free(data->data);
68 g_free(data); 76 g_free(data);
69 } 77 }
74 { 82 {
75 JabberData *data; 83 JabberData *data;
76 gchar *raw_data = NULL; 84 gchar *raw_data = NULL;
77 const gchar *cid, *type; 85 const gchar *cid, *type;
78 86
87 g_return_val_if_fail(tag != NULL, NULL);
88
79 /* check if this is a "data" tag */ 89 /* check if this is a "data" tag */
80 if (strcmp(tag->name, "data") != 0) { 90 if (strcmp(tag->name, "data") != 0) {
81 purple_debug_error("jabber", "Invalid data element\n"); 91 purple_debug_error("jabber", "Invalid data element\n");
82 return NULL; 92 return NULL;
83 } 93 }
115 } 125 }
116 126
117 void 127 void
118 jabber_data_destroy(JabberData *data) 128 jabber_data_destroy(JabberData *data)
119 { 129 {
130 g_return_if_fail(data != NULL);
131
120 jabber_data_delete(data); 132 jabber_data_delete(data);
121 } 133 }
122 134
123 const char * 135 const char *
124 jabber_data_get_cid(const JabberData *data) 136 jabber_data_get_cid(const JabberData *data)
125 { 137 {
138 g_return_val_if_fail(data != NULL, NULL);
139
126 return data->cid; 140 return data->cid;
127 } 141 }
128 142
129 143
130 const char * 144 const char *
131 jabber_data_get_type(const JabberData *data) 145 jabber_data_get_type(const JabberData *data)
132 { 146 {
147 g_return_val_if_fail(data != NULL, NULL);
148
133 return data->type; 149 return data->type;
134 } 150 }
135 151
136 gsize 152 gsize
137 jabber_data_get_size(const JabberData *data) 153 jabber_data_get_size(const JabberData *data)
138 { 154 {
155 g_return_val_if_fail(data != NULL, 0);
156
139 return data->size; 157 return data->size;
140 } 158 }
141 159
142 gpointer 160 gpointer
143 jabber_data_get_data(const JabberData *data) 161 jabber_data_get_data(const JabberData *data)
144 { 162 {
163 g_return_val_if_fail(data != NULL, NULL);
164
145 return data->data; 165 return data->data;
146 } 166 }
147 167
148 xmlnode * 168 xmlnode *
149 jabber_data_get_xml_definition(const JabberData *data) 169 jabber_data_get_xml_definition(const JabberData *data)
150 { 170 {
151 xmlnode *tag = xmlnode_new("data"); 171 xmlnode *tag;
152 char *base64data = purple_base64_encode(data->data, data->size); 172 char *base64data;
173
174 g_return_val_if_fail(data != NULL, NULL);
175
176 tag = xmlnode_new("data");
177 base64data = purple_base64_encode(data->data, data->size);
153 178
154 xmlnode_set_namespace(tag, NS_BOB); 179 xmlnode_set_namespace(tag, NS_BOB);
155 xmlnode_set_attrib(tag, "cid", data->cid); 180 xmlnode_set_attrib(tag, "cid", data->cid);
156 xmlnode_set_attrib(tag, "type", data->type); 181 xmlnode_set_attrib(tag, "type", data->type);
157 182
163 } 188 }
164 189
165 xmlnode * 190 xmlnode *
166 jabber_data_get_xhtml_im(const JabberData *data, const gchar *alt) 191 jabber_data_get_xhtml_im(const JabberData *data, const gchar *alt)
167 { 192 {
168 xmlnode *img = xmlnode_new("img"); 193 xmlnode *img;
169 char src[128]; 194 char src[128];
170 195
196 g_return_val_if_fail(data != NULL, NULL);
197 g_return_val_if_fail(alt != NULL, NULL);
198
199 img = xmlnode_new("img");
171 xmlnode_set_attrib(img, "alt", alt); 200 xmlnode_set_attrib(img, "alt", alt);
172 g_snprintf(src, sizeof(src), "cid:%s", data->cid); 201 g_snprintf(src, sizeof(src), "cid:%s", data->cid);
173 xmlnode_set_attrib(img, "src", src); 202 xmlnode_set_attrib(img, "src", src);
174 203
175 return img; 204 return img;
267 } else if (item_not_found) { 296 } else if (item_not_found) {
268 purple_debug_info("jabber", 297 purple_debug_info("jabber",
269 "Responder didn't recognize requested data\n"); 298 "Responder didn't recognize requested data\n");
270 cb(NULL, alt, userdata); 299 cb(NULL, alt, userdata);
271 } else { 300 } else {
272 purple_debug_error("jabber", "Unknown response to data request\n"); 301 purple_debug_warning("jabber", "Unknown response to data request\n");
273 cb(NULL, alt, userdata); 302 cb(NULL, alt, userdata);
274 } 303 }
275 304
276 g_free(request_data); 305 g_free(request_data);
277 } 306 }
279 void 308 void
280 jabber_data_request(JabberStream *js, const gchar *cid, const gchar *who, 309 jabber_data_request(JabberStream *js, const gchar *cid, const gchar *who,
281 gchar *alt, gboolean ephemeral, JabberDataRequestCallback cb, 310 gchar *alt, gboolean ephemeral, JabberDataRequestCallback cb,
282 gpointer userdata) 311 gpointer userdata)
283 { 312 {
284 JabberIq *request = jabber_iq_new(js, JABBER_IQ_GET); 313 JabberIq *request;
285 xmlnode *data_request = jabber_data_get_xml_request(cid); 314 xmlnode *data_request;
286 JabberDataRequestData *data = g_new0(JabberDataRequestData, 1); 315 JabberDataRequestData *data;
316
317 g_return_if_fail(cid != NULL);
318 g_return_if_fail(who != NULL);
319 g_return_if_fail(alt != NULL);
320
321 request = jabber_iq_new(js, JABBER_IQ_GET);
322 data_request = jabber_data_get_xml_request(cid);
323 data = g_new0(JabberDataRequestData, 1);
287 324
288 data->userdata = userdata; 325 data->userdata = userdata;
289 data->alt = alt; 326 data->alt = alt;
290 data->ephemeral = ephemeral; 327 data->ephemeral = ephemeral;
291 data->cb = cb; 328 data->cb = cb;
331 } 368 }
332 369
333 void 370 void
334 jabber_data_associate_local(JabberData *data, const gchar *alt) 371 jabber_data_associate_local(JabberData *data, const gchar *alt)
335 { 372 {
373 g_return_if_fail(data != NULL);
374 g_return_if_fail(alt != NULL);
375
336 purple_debug_info("jabber", "associating local data object\n alt = %s, cid = %s\n", 376 purple_debug_info("jabber", "associating local data object\n alt = %s, cid = %s\n",
337 alt , jabber_data_get_cid(data)); 377 alt , jabber_data_get_cid(data));
338 if (alt) 378 if (alt)
339 g_hash_table_insert(local_data_by_alt, g_strdup(alt), data); 379 g_hash_table_insert(local_data_by_alt, g_strdup(alt), data);
340 g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)), 380 g_hash_table_insert(local_data_by_cid, g_strdup(jabber_data_get_cid(data)),
343 383
344 void 384 void
345 jabber_data_associate_remote(JabberStream *js, const gchar *who, JabberData *data) 385 jabber_data_associate_remote(JabberStream *js, const gchar *who, JabberData *data)
346 { 386 {
347 gchar *cid; 387 gchar *cid;
348 388
389 g_return_if_fail(data != NULL);
390
349 if (jabber_data_has_valid_hash(data)) { 391 if (jabber_data_has_valid_hash(data)) {
350 cid = g_strdup(jabber_data_get_cid(data)); 392 cid = g_strdup(jabber_data_get_cid(data));
351 } else { 393 } else {
352 cid = g_strdup_printf("%s@%s/%s%s%s", js->user->node, js->user->domain, 394 cid = g_strdup_printf("%s@%s/%s%s%s", js->user->node, js->user->domain,
353 js->user->resource, who, jabber_data_get_cid(data)); 395 js->user->resource, who, jabber_data_get_cid(data));