about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-05-03 01:48:12 +0100
committerJames Booth <boothj5@gmail.com>2015-05-03 01:48:12 +0100
commitf25f90b38bfa72960f0290231696073966f58c69 (patch)
treed3b8495b74ed631103f89d057ee578f87b39a008
parent530c060d2aa578bfbb9969ba6e56340830138dfc (diff)
downloadprofani-tty-f25f90b38bfa72960f0290231696073966f58c69.tar.gz
Extracted receipt request processing in message.c
-rw-r--r--src/xmpp/message.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c
index 0ceec4cf..85106132 100644
--- a/src/xmpp/message.c
+++ b/src/xmpp/message.c
@@ -555,7 +555,36 @@ _receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza
     return 1;
 }
 
-void _private_chat_handler(xmpp_stanza_t * const stanza, const char * const fulljid)
+void
+_receipt_request_handler(xmpp_stanza_t * const stanza)
+{
+    if (!prefs_get_boolean(PREF_RECEIPTS_SEND)) {
+        return;
+    }
+
+    char *id = xmpp_stanza_get_id(stanza);
+    if (!id) {
+        return;
+    }
+
+    xmpp_stanza_t *receipts = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS);
+    if (!receipts) {
+        return;
+    }
+
+    char *receipts_name = xmpp_stanza_get_name(receipts);
+    if (g_strcmp0(receipts_name, "request") != 0) {
+        return;
+    }
+
+    gchar *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
+    Jid *jid = jid_create(from);
+    _message_send_receipt(jid->fulljid, id);
+    jid_destroy(jid);
+}
+
+void
+_private_chat_handler(xmpp_stanza_t * const stanza, const char * const fulljid)
 {
     xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_BODY);
     if (!body) {
@@ -663,17 +692,7 @@ _chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * con
                 sv_ev_incoming_message(jid->barejid, jid->resourcepart, message);
             }
 
-            // send receipt if configured
-            char *id = xmpp_stanza_get_id(stanza);
-            if (id && prefs_get_boolean(PREF_RECEIPTS_SEND)) {
-                xmpp_stanza_t *receipts = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS);
-                if (receipts) {
-                    char *receipts_name = xmpp_stanza_get_name(receipts);
-                    if (g_strcmp0(receipts_name, "request") == 0) {
-                        _message_send_receipt(jid->fulljid, id);
-                    }
-                }
-            }
+            _receipt_request_handler(stanza);
 
             xmpp_ctx_t *ctx = connection_get_ctx();
             xmpp_free(ctx, message);