Mercurial > ~mikael > mcabber > hg
comparison mcabber/mcabber/xmpp.c @ 1910:3695266e16c7
Fix error presence packet handling.
This should also fix the segfault reported by pbd in issue #56.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Thu, 13 May 2010 12:26:48 +0200 |
parents | 9c14153e2580 |
children | baa52ea32b47 |
comparison
equal
deleted
inserted
replaced
1909:9c14153e2580 | 1910:3695266e16c7 |
---|---|
1339 const char *from, *rname, *p=NULL, *ustmsg=NULL; | 1339 const char *from, *rname, *p=NULL, *ustmsg=NULL; |
1340 enum imstatus ust; | 1340 enum imstatus ust; |
1341 char bpprio; | 1341 char bpprio; |
1342 time_t timestamp = 0L; | 1342 time_t timestamp = 0L; |
1343 LmMessageNode *muc_packet, *caps; | 1343 LmMessageNode *muc_packet, *caps; |
1344 LmMessageSubType mstype; | 1344 LmMessageSubType mstype = lm_message_get_sub_type(m); |
1345 | 1345 |
1346 // Check for MUC presence packet | 1346 // Check for MUC presence packet |
1347 muc_packet = lm_message_node_find_xmlns(m->node, NS_MUC_USER); | 1347 muc_packet = lm_message_node_find_xmlns(m->node, NS_MUC_USER); |
1348 | 1348 |
1349 from = lm_message_get_from(m); | 1349 from = lm_message_get_from(m); |
1350 if (!from) { | |
1351 scr_LogPrint(LPRINT_LOGNORM, "Unexpected presence packet!"); | |
1352 | |
1353 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) { | |
1354 display_server_error(lm_message_node_get_child(m->node, "error"), | |
1355 lm_message_get_from(m)); | |
1356 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1357 } | |
1358 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
1359 } | |
1350 | 1360 |
1351 rname = strchr(from, JID_RESOURCE_SEPARATOR); | 1361 rname = strchr(from, JID_RESOURCE_SEPARATOR); |
1352 if (rname) rname++; | 1362 if (rname) rname++; |
1353 | 1363 |
1354 if (settings_opt_get_int("ignore_self_presence")) { | 1364 if (settings_opt_get_int("ignore_self_presence")) { |
1357 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; // Ignoring self presence | 1367 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; // Ignoring self presence |
1358 } | 1368 } |
1359 } | 1369 } |
1360 | 1370 |
1361 bjid = jidtodisp(from); | 1371 bjid = jidtodisp(from); |
1362 mstype = lm_message_get_sub_type(m); | |
1363 | 1372 |
1364 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) { | 1373 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) { |
1365 LmMessageNode *x; | 1374 LmMessageNode *x; |
1366 scr_LogPrint(LPRINT_LOGNORM, "Error presence packet from <%s>", bjid); | 1375 scr_LogPrint(LPRINT_LOGNORM, "Error presence packet from <%s>", bjid); |
1367 x = lm_message_node_find_child(m->node, "error"); | 1376 x = lm_message_node_find_child(m->node, "error"); |
1514 LmMessage *m, gpointer user_data) | 1523 LmMessage *m, gpointer user_data) |
1515 { | 1524 { |
1516 char *r; | 1525 char *r; |
1517 char *buf; | 1526 char *buf; |
1518 int newbuddy; | 1527 int newbuddy; |
1519 LmMessageSubType mstype; | |
1520 guint hook_result; | 1528 guint hook_result; |
1529 LmMessageSubType mstype = lm_message_get_sub_type(m); | |
1521 const char *from = lm_message_get_from(m); | 1530 const char *from = lm_message_get_from(m); |
1522 const char *msg = lm_message_node_get_child_value(m->node, "status"); | 1531 const char *msg = lm_message_node_get_child_value(m->node, "status"); |
1523 | 1532 |
1533 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) { | |
1534 display_server_error(lm_message_node_get_child(m->node, "error"), | |
1535 lm_message_get_from(m)); | |
1536 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1537 } | |
1538 | |
1539 if (!from) { | |
1540 scr_LogPrint(LPRINT_DEBUG, "handle_s10n: Unexpected presence packet!"); | |
1541 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
1542 } | |
1524 r = jidtodisp(from); | 1543 r = jidtodisp(from); |
1525 | 1544 |
1526 newbuddy = !roster_find(r, jidsearch, 0); | 1545 newbuddy = !roster_find(r, jidsearch, 0); |
1527 mstype = lm_message_get_sub_type(m); | |
1528 | 1546 |
1529 hook_result = hk_subscription(mstype, r, msg); | 1547 hook_result = hk_subscription(mstype, r, msg); |
1530 | 1548 |
1531 if (mstype == LM_MESSAGE_SUB_TYPE_SUBSCRIBE) { | 1549 if (mstype == LM_MESSAGE_SUB_TYPE_SUBSCRIBE) { |
1532 /* The sender wishes to subscribe to our presence */ | 1550 /* The sender wishes to subscribe to our presence */ |