diff options
author | James Booth <boothj5@gmail.com> | 2015-05-03 00:06:12 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-05-03 00:06:12 +0100 |
commit | 03ef791401f4bc467c23822a28513a0336bb7654 (patch) | |
tree | 3e4ba3fd3d09baf5f29ad4d03d73eff7a0b37d95 /src/xmpp | |
parent | 0bc4377ad75b0d4b7100b6f213314ee600987157 (diff) | |
parent | 5a90e2862e3d11ec86a34b990be7b87a03c7f01f (diff) | |
download | profani-tty-03ef791401f4bc467c23822a28513a0336bb7654.tar.gz |
Merge branch 'master' into pgp
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/message.c | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 73d5a07a..f5cada10 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -60,6 +60,7 @@ static int _muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const sta static int _conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); static int _captcha_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); static int _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); +static int _receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); void message_add_handlers(void) @@ -73,6 +74,7 @@ message_add_handlers(void) HANDLE(STANZA_NS_MUC_USER, NULL, _muc_user_handler); HANDLE(STANZA_NS_CONFERENCE, NULL, _conference_handler); HANDLE(STANZA_NS_CAPTCHA, NULL, _captcha_handler); + HANDLE(STANZA_NS_RECEIPTS, NULL, _receipt_received_handler); } char * @@ -290,8 +292,7 @@ message_send_gone(const char * const jid) } static int -_message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, - void * const userdata) +_message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { char *id = xmpp_stanza_get_id(stanza); char *jid = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); @@ -341,8 +342,7 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, } static int -_muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, - void * const userdata) +_muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { xmpp_ctx_t *ctx = connection_get_ctx(); xmpp_stanza_t *xns_muc_user = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER); @@ -396,8 +396,7 @@ _muc_user_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, } static int -_conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, - void * const userdata) +_conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { xmpp_stanza_t *xns_conference = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE); char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); @@ -434,8 +433,7 @@ _conference_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, } static int -_captcha_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, - void * const userdata) +_captcha_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { xmpp_ctx_t *ctx = connection_get_ctx(); char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); @@ -459,8 +457,7 @@ _captcha_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, } static int -_groupchat_handler(xmpp_conn_t * const conn, - xmpp_stanza_t * const stanza, void * const userdata) +_groupchat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { xmpp_ctx_t *ctx = connection_get_ctx(); char *message = NULL; @@ -553,8 +550,33 @@ _message_send_receipt(const char * const fulljid, const char * const message_id) } static int -_chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, - void * const userdata) +_receipt_received_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) +{ + xmpp_stanza_t *receipt = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS); + char *name = xmpp_stanza_get_name(receipt); + if (g_strcmp0(name, "received") != 0) { + return 1; + } + + char *id = xmpp_stanza_get_attribute(receipt, STANZA_ATTR_ID); + if (!id) { + return 1; + } + + char *fulljid = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); + if (!fulljid) { + return 1; + } + + Jid *jidp = jid_create(fulljid); + sv_ev_message_receipt(jidp->barejid, id); + jid_destroy(jidp); + + return 1; +} + +static int +_chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) { // ignore if type not chat or absent char *type = xmpp_stanza_get_type(stanza); @@ -562,24 +584,6 @@ _chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, return 1; } - // check if message receipt - xmpp_stanza_t *receipt = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS); - if (receipt) { - char *name = xmpp_stanza_get_name(receipt); - if (g_strcmp0(name, "received") == 0) { - char *id = xmpp_stanza_get_attribute(receipt, STANZA_ATTR_ID); - if (id) { - char *fulljid = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM); - if (fulljid) { - Jid *jidp = jid_create(fulljid); - sv_ev_message_receipt(jidp->barejid, id); - jid_destroy(jidp); - return 1; - } - } - } - } - // check if carbon message xmpp_stanza_t *carbons = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CARBONS); if (carbons) { |