diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2012-10-28 23:54:21 +0000 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2012-10-28 23:54:21 +0000 |
commit | 91ae87dbaf907a767b9bf881c6f7de39d03be45e (patch) | |
tree | fa6ed2e8f3f91cf99f71b30dff2786cec31843eb | |
parent | 4d82e50a6bdc15ed39723c1dac23027b83330be1 (diff) | |
parent | 1444be5c948f8b4509cfe3cb30992da74f12b5b8 (diff) |
Merging XEP-0184 support patch from Michael Stapelberg, #999.
-rw-r--r-- | protocols/jabber/iq.c | 1 | ||||
-rw-r--r-- | protocols/jabber/jabber.h | 1 | ||||
-rw-r--r-- | protocols/jabber/message.c | 22 |
3 files changed, 24 insertions, 0 deletions
diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index b5a37a30..fa5104b1 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -127,6 +127,7 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) XMLNS_CHATSTATES, XMLNS_MUC, XMLNS_PING, + XMLNS_RECEIPTS, XMLNS_SI, XMLNS_BYTESTREAMS, XMLNS_FILETRANSFER, diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index d11d2fe8..fa0ca015 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -226,6 +226,7 @@ struct jabber_transfer #define XMLNS_TIME_OLD "jabber:iq:time" /* XEP-0090 */ #define XMLNS_TIME "urn:xmpp:time" /* XEP-0202 */ #define XMLNS_PING "urn:xmpp:ping" /* XEP-0199 */ +#define XMLNS_RECEIPTS "urn:xmpp:receipts" /* XEP-0184 */ #define XMLNS_VCARD "vcard-temp" /* XEP-0054 */ #define XMLNS_DELAY "jabber:x:delay" /* XEP-0091 */ #define XMLNS_XDATA "jabber:x:data" /* XEP-0004 */ diff --git a/protocols/jabber/message.c b/protocols/jabber/message.c index 85c71c9d..58c1c815 100644 --- a/protocols/jabber/message.c +++ b/protocols/jabber/message.c @@ -28,12 +28,34 @@ xt_status jabber_pkt_message( struct xt_node *node, gpointer data ) struct im_connection *ic = data; char *from = xt_find_attr( node, "from" ); char *type = xt_find_attr( node, "type" ); + char *id = xt_find_attr( node, "id" ); struct xt_node *body = xt_find_node( node->children, "body" ), *c; + struct xt_node *request = xt_find_node( node->children, "request" ); struct jabber_buddy *bud = NULL; char *s, *room = NULL, *reason = NULL; if( !from ) return XT_HANDLED; /* Consider this packet corrupted. */ + + if( request && id ) + { + /* Send a message receipt (XEP-0184), looking like this: + * <message + * from='kingrichard@royalty.england.lit/throne' + * id='bi29sg183b4v' + * to='northumberland@shakespeare.lit/westminster'> + * <received xmlns='urn:xmpp:receipts' id='richard2-4.1.247'/> + * </message> */ + struct xt_node *received, *receipt; + + received = xt_new_node( "received", NULL, NULL ); + xt_add_attr( received, "xmlns", XMLNS_RECEIPTS ); + xt_add_attr( received, "id", id ); + receipt = jabber_make_packet( "message", NULL, from, received ); + + jabber_write_packet( ic, receipt ); + xt_free_node( receipt ); + } bud = jabber_buddy_by_jid( ic, from, GET_BUDDY_EXACT ); |