Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/xmpp_iqrequest.c @ 1703:65ba89949252
Improve error checks in received IQ responses
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Mon, 08 Feb 2010 19:15:55 +0100 |
parents | 527c965b45c5 |
children | ac881b5f9248 |
comparison
equal
deleted
inserted
replaced
1702:02039190532d | 1703:65ba89949252 |
---|---|
123 static LmHandlerResult cb_version(LmMessageHandler *h, LmConnection *c, | 123 static LmHandlerResult cb_version(LmMessageHandler *h, LmConnection *c, |
124 LmMessage *m, gpointer user_data) | 124 LmMessage *m, gpointer user_data) |
125 { | 125 { |
126 LmMessageNode *ansqry; | 126 LmMessageNode *ansqry; |
127 const char *p, *bjid; | 127 const char *p, *bjid; |
128 char *tmp; | 128 char *buf, *tmp; |
129 char *buf; | 129 |
130 | 130 // Check IQ result sender |
131 ansqry = lm_message_node_get_child(m->node, "query"); | |
132 if (!ansqry) { | |
133 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result!"); | |
134 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
135 } | |
136 | |
137 // Display IQ result sender... | |
138 bjid = lm_message_get_from(m); | 131 bjid = lm_message_get_from(m); |
139 if (!bjid) | 132 if (!bjid) |
140 bjid = lm_connection_get_jid(lconnection); // No from means our JID... | 133 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
141 if (!bjid) { | 134 if (!bjid) { |
142 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); | 135 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); |
143 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | 136 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
144 } | 137 } |
145 | 138 |
139 // Check for error message | |
140 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { | |
141 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); | |
142 display_server_error(lm_message_node_get_child(m->node, "error")); | |
143 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
144 } | |
145 | |
146 // Check message contents | |
147 ansqry = lm_message_node_get_child(m->node, "query"); | |
148 if (!ansqry) { | |
149 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); | |
150 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
151 } | |
152 | |
146 buf = g_strdup_printf("Received IQ:version result from <%s>", bjid); | 153 buf = g_strdup_printf("Received IQ:version result from <%s>", bjid); |
147 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | 154 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
148 | 155 |
149 // bjid should now really be the "bare JID", let's strip the resource | 156 // bjid should now really be the "bare JID", let's strip the resource |
150 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); | 157 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
181 static LmHandlerResult cb_time(LmMessageHandler *h, LmConnection *c, | 188 static LmHandlerResult cb_time(LmMessageHandler *h, LmConnection *c, |
182 LmMessage *m, gpointer user_data) | 189 LmMessage *m, gpointer user_data) |
183 { | 190 { |
184 LmMessageNode *ansqry; | 191 LmMessageNode *ansqry; |
185 const char *p, *bjid; | 192 const char *p, *bjid; |
186 char *tmp; | 193 char *buf, *tmp; |
187 char *buf; | 194 |
188 | 195 // Check IQ result sender |
189 ansqry = lm_message_node_get_child(m->node, "query"); | |
190 if (!ansqry) { | |
191 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result!"); | |
192 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
193 } | |
194 // Display IQ result sender... | |
195 bjid = lm_message_get_from(m); | 196 bjid = lm_message_get_from(m); |
196 if (!bjid) | 197 if (!bjid) |
197 bjid = lm_connection_get_jid(lconnection); // No from means our JID... | 198 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
198 if (!bjid) { | 199 if (!bjid) { |
199 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); | 200 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result (no sender name)."); |
201 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
202 } | |
203 | |
204 // Check for error message | |
205 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { | |
206 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); | |
207 display_server_error(lm_message_node_get_child(m->node, "error")); | |
208 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
209 } | |
210 | |
211 // Check message contents | |
212 ansqry = lm_message_node_get_child(m->node, "query"); | |
213 if (!ansqry) { | |
214 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result from <%s>!", bjid); | |
200 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | 215 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
201 } | 216 } |
202 | 217 |
203 buf = g_strdup_printf("Received IQ:time result from <%s>", bjid); | 218 buf = g_strdup_printf("Received IQ:time result from <%s>", bjid); |
204 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | 219 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
240 { | 255 { |
241 LmMessageNode *ansqry; | 256 LmMessageNode *ansqry; |
242 const char *p, *bjid; | 257 const char *p, *bjid; |
243 char *buf, *tmp; | 258 char *buf, *tmp; |
244 | 259 |
245 ansqry = lm_message_node_get_child(m->node, "query"); | 260 // Check IQ result sender |
246 if (!ansqry) { | |
247 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result!"); | |
248 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
249 } | |
250 // Display IQ result sender... | |
251 bjid = lm_message_get_from(m); | 261 bjid = lm_message_get_from(m); |
252 if (!bjid) | 262 if (!bjid) |
253 bjid = lm_connection_get_jid(lconnection); // No from means our JID... | 263 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
254 if (!bjid) { | 264 if (!bjid) { |
255 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); | 265 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result (no sender name)."); |
266 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
267 } | |
268 | |
269 // Check for error message | |
270 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { | |
271 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); | |
272 display_server_error(lm_message_node_get_child(m->node, "error")); | |
273 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
274 } | |
275 | |
276 // Check message contents | |
277 ansqry = lm_message_node_get_child(m->node, "query"); | |
278 if (!ansqry) { | |
279 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); | |
256 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | 280 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
257 } | 281 } |
258 | 282 |
259 buf = g_strdup_printf("Received IQ:last result from <%s>", bjid); | 283 buf = g_strdup_printf("Received IQ:last result from <%s>", bjid); |
260 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | 284 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
413 { | 437 { |
414 LmMessageNode *ansqry; | 438 LmMessageNode *ansqry; |
415 const char *bjid; | 439 const char *bjid; |
416 char *buf, *tmp; | 440 char *buf, *tmp; |
417 | 441 |
418 // Display IQ result sender... | 442 // Check IQ result sender |
419 bjid = lm_message_get_from(m); | 443 bjid = lm_message_get_from(m); |
420 if (!bjid) | 444 if (!bjid) |
421 bjid = lm_connection_get_jid(lconnection); // No from means our JID... | 445 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
422 if (!bjid) { | 446 if (!bjid) { |
423 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); | 447 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:vCard result (no sender name)."); |
448 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
449 } | |
450 | |
451 // Check for error message | |
452 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { | |
453 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); | |
454 display_server_error(lm_message_node_get_child(m->node, "error")); | |
424 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | 455 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
425 } | 456 } |
426 | 457 |
427 buf = g_strdup_printf("Received IQ:vCard result from <%s>", bjid); | 458 buf = g_strdup_printf("Received IQ:vCard result from <%s>", bjid); |
428 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | 459 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |