Handle <message> stanzas with no body by clearing out
authorArt Cancro <ajc@citadel.org>
Mon, 3 Dec 2007 06:11:54 +0000 (06:11 +0000)
committerArt Cancro <ajc@citadel.org>
Mon, 3 Dec 2007 06:11:54 +0000 (06:11 +0000)
the buffer, avoiding spurious messages.

citadel/modules/jabber/serv_xmpp.c
citadel/modules/jabber/serv_xmpp.h
citadel/modules/jabber/xmpp_messages.c

index a70481696f6fb77b8bf012f1d582a35a7f9dda81..8ebe3a5bde3fd7c78b473076b79606e9695fe07f 100644 (file)
@@ -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;
index b9140bd5c2df4f1627485dbcfcc32d7c5dfb2434..b3d55d09fe9babd4460a24a216e25df563ae1ad1 100644 (file)
@@ -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;             /* <html> tag nesting level */
 };
 
 #define XMPP ((struct citxmpp *)CC->session_specific_data)
index 00f6781b0a3a09180061035c89a3b80e9915fa07..e9d3bf32604065e64729bb6253ee71ff10dc141f 100644 (file)
@@ -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;
 }