about summary refs log tree commit diff stats
path: root/src/xmpp/message.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-03-14 16:37:33 +0000
committerJames Booth <boothj5@gmail.com>2015-03-14 16:37:33 +0000
commit2fc7937dcd6949bb322bbfdd33c903792324719b (patch)
treee5a905760a65c90a4b90314489a9b969cd21e21b /src/xmpp/message.c
parente5bb12a0d6223e6c6297c1700914332942a4ca00 (diff)
downloadprofani-tty-2fc7937dcd6949bb322bbfdd33c903792324719b.tar.gz
Fixed error with /otr start with carbons enabled
Diffstat (limited to 'src/xmpp/message.c')
-rw-r--r--src/xmpp/message.c69
1 files changed, 36 insertions, 33 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index ab7f52cd..c0c37f4d 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -452,46 +452,49 @@ _chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     }
 
     // check if carbon message
-    xmpp_stanza_t *received = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
-    if(received != NULL){
-        xmpp_stanza_t *forwarded = xmpp_stanza_get_child_by_ns(received, STANZA_NS_FORWARD);
-        xmpp_stanza_t *message = xmpp_stanza_get_child_by_name(forwarded, STANZA_NAME_MESSAGE);
+    xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS);
+    if(carbons) {
+        char *name = xmpp_stanza_get_name(carbons);
+        if (g_strcmp0(name, "received") == 0) {
+            xmpp_stanza_t *forwarded = xmpp_stanza_get_child_by_ns(carbons, STANZA_NS_FORWARD);
+            xmpp_stanza_t *message = xmpp_stanza_get_child_by_name(forwarded, STANZA_NAME_MESSAGE);
 
-        xmpp_ctx_t *ctx = connection_get_ctx();
+            xmpp_ctx_t *ctx = connection_get_ctx();
 
-        gchar *to = xmpp_stanza_get_attribute(message, STANZA_ATTR_TO);
-        gchar *from = xmpp_stanza_get_attribute(message, STANZA_ATTR_FROM);
+            gchar *to = xmpp_stanza_get_attribute(message, STANZA_ATTR_TO);
+            gchar *from = xmpp_stanza_get_attribute(message, STANZA_ATTR_FROM);
 
-        // happens when receive a carbon of a self sent message
-        if(to == NULL) {
-            to = from;
-        }
-
-        Jid *jid_from = jid_create(from);
-        Jid *jid_to = jid_create(to);
-        Jid *my_jid = jid_create(jabber_get_fulljid());
+            // happens when receive a carbon of a self sent message
+            if(to == NULL) {
+                to = from;
+            }
 
-        // check for and deal with message
-        xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(message, STANZA_NAME_BODY);
-        if (body != NULL) {
-            char *message = xmpp_stanza_get_text(body);
-            if (message != NULL) {
-                // if we are the recipient, treat as standard incoming message
-                if(g_strcmp0(my_jid->barejid, jid_to->barejid) == 0){
-                    handle_incoming_message(jid_from->barejid, jid_from->resourcepart, message);
+            Jid *jid_from = jid_create(from);
+            Jid *jid_to = jid_create(to);
+            Jid *my_jid = jid_create(jabber_get_fulljid());
+
+            // check for and deal with message
+            xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(message, STANZA_NAME_BODY);
+            if (body != NULL) {
+                char *message = xmpp_stanza_get_text(body);
+                if (message != NULL) {
+                    // if we are the recipient, treat as standard incoming message
+                    if(g_strcmp0(my_jid->barejid, jid_to->barejid) == 0){
+                        handle_incoming_message(jid_from->barejid, jid_from->resourcepart, message);
+                    }
+                    // else treat as a sent message
+                    else{
+                        handle_carbon(jid_to->barejid, message);
+                    }
+                    xmpp_free(ctx, message);
                 }
-                // else treat as a sent message
-                else{
-                    handle_carbon(jid_to->barejid, message);
-                }
-                xmpp_free(ctx, message);
             }
-        }
 
-        jid_destroy(jid_from);
-        jid_destroy(jid_to);
-        jid_destroy(my_jid);
-        return 1;
+            jid_destroy(jid_from);
+            jid_destroy(jid_to);
+            jid_destroy(my_jid);
+            return 1;
+        }
     }
 
     // ignore handled namespaces