From a0c4dc941a09a70a5db5316c8e602cb775740e43 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 3 Dec 2007 06:11:54 +0000 Subject: [PATCH] Handle stanzas with no body by clearing out the buffer, avoiding spurious messages. --- citadel/modules/jabber/serv_xmpp.c | 11 ++++++++++- citadel/modules/jabber/serv_xmpp.h | 1 + citadel/modules/jabber/xmpp_messages.c | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/citadel/modules/jabber/serv_xmpp.c b/citadel/modules/jabber/serv_xmpp.c index a70481696..8ebe3a5bd 100644 --- a/citadel/modules/jabber/serv_xmpp.c +++ b/citadel/modules/jabber/serv_xmpp.c @@ -154,6 +154,10 @@ void xmpp_xml_start(void *data, const char *supplied_el, const char **attr) { } } } + + else if (!strcasecmp(el, "html")) { + ++XMPP->html_tag_level; + } } @@ -268,7 +272,7 @@ void xmpp_xml_end(void *data, const char *supplied_el) { jabber_wholist_presence_dump(); } - else if (!strcasecmp(el, "body")) { + else if ( (!strcasecmp(el, "body")) && (XMPP->html_tag_level == 0) ) { if (XMPP->message_body != NULL) { free(XMPP->message_body); XMPP->message_body = NULL; @@ -280,6 +284,11 @@ void xmpp_xml_end(void *data, const char *supplied_el) { else if (!strcasecmp(el, "message")) { jabber_send_message(XMPP->message_to, XMPP->message_body); + XMPP->html_tag_level = 0; + } + + else if (!strcasecmp(el, "html")) { + --XMPP->html_tag_level; } XMPP->chardata_len = 0; diff --git a/citadel/modules/jabber/serv_xmpp.h b/citadel/modules/jabber/serv_xmpp.h index b9140bd5c..b3d55d09f 100644 --- a/citadel/modules/jabber/serv_xmpp.h +++ b/citadel/modules/jabber/serv_xmpp.h @@ -24,6 +24,7 @@ struct citxmpp { /* Information about the current session */ char message_to[256]; char *message_body; /* Message body in transit */ + int html_tag_level; /* tag nesting level */ }; #define XMPP ((struct citxmpp *)CC->session_specific_data) diff --git a/citadel/modules/jabber/xmpp_messages.c b/citadel/modules/jabber/xmpp_messages.c index 00f6781b0..e9d3bf326 100644 --- a/citadel/modules/jabber/xmpp_messages.c +++ b/citadel/modules/jabber/xmpp_messages.c @@ -98,6 +98,10 @@ void jabber_send_message(char *message_to, char *message_body) { if (recp) { message_sent = PerformXmsgHooks(CC->user.fullname, CC->cs_inet_email, recp, message_body); } + + free(XMPP->message_body); + XMPP->message_body = NULL; + XMPP->message_to[0] = 0; } -- 2.39.2