Mercurial > pidgin
comparison libpurple/protocols/jabber/data.c @ 30197: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
30196:d78a3f06b7a0 | 30197: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)); |