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);