From f25f90b38bfa72960f0290231696073966f58c69 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 3 May 2015 01:48:12 +0100 Subject: [PATCH] Extracted receipt request processing in message.c --- src/xmpp/message.c | 43 +++++++++++++++++++++++++++++++------------ 1 file 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);