diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-12-06 00:18:27 +0000 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-12-06 00:18:27 +0000 |
commit | d76e12f6762d0a13cbafd50ebad29baf60b7df8a (patch) | |
tree | 9006bef36b5ee820852ec9b3483b653e7647f5ab | |
parent | d88c92a40438e0ac8e897beb3ead44c4404050b3 (diff) |
Add support for XEP 202 (replacement for jabber:iq:time).
-rw-r--r-- | protocols/jabber/iq.c | 31 | ||||
-rw-r--r-- | protocols/jabber/jabber.h | 3 |
2 files changed, 31 insertions, 3 deletions
diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index a9b69788..0c5671d0 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -50,7 +50,8 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) else if( strcmp( type, "get" ) == 0 ) { if( !( ( c = xt_find_node( node->children, "query" ) ) || - ( c = xt_find_node( node->children, "ping" ) ) ) || + ( c = xt_find_node( node->children, "ping" ) ) || + ( c = xt_find_node( node->children, "time" ) ) ) || !( s = xt_find_attr( c, "xmlns" ) ) ) { /* Sigh. Who decided to suddenly invent new elements @@ -68,7 +69,7 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) xt_add_child( reply, xt_new_node( "version", BITLBEE_VERSION, NULL ) ); xt_add_child( reply, xt_new_node( "os", ARCH, NULL ) ); } - else if( strcmp( s, XMLNS_TIME ) == 0 ) + else if( strcmp( s, XMLNS_TIME_OLD ) == 0 ) { time_t time_ep; char buf[1024]; @@ -82,6 +83,31 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) strftime( buf, sizeof( buf ) - 1, "%Z", localtime( &time_ep ) ); xt_add_child( reply, xt_new_node( "tz", buf, NULL ) ); } + else if( strcmp( s, XMLNS_TIME ) == 0 ) + { + time_t time_ep; + char buf[1024]; + + buf[sizeof(buf)-1] = 0; + time_ep = time( NULL ); + + xt_free_node( reply ); + reply = xt_new_node( "time", NULL, NULL ); + xt_add_attr( reply, "xmlns", XMLNS_TIME ); + + strftime( buf, sizeof( buf ) - 1, "%Y%m%dT%H:%M:%SZ", gmtime( &time_ep ) ); + xt_add_child( reply, xt_new_node( "utc", buf, NULL ) ); + + strftime( buf, sizeof( buf ) - 1, "%z", localtime( &time_ep ) ); + if( strlen( buf ) >= 5 ) + { + buf[6] = '\0'; + buf[5] = buf[4]; + buf[4] = buf[3]; + buf[3] = ':'; + } + xt_add_child( reply, xt_new_node( "tzo", buf, NULL ) ); + } else if( strcmp( s, XMLNS_PING ) == 0 ) { xt_free_node( reply ); @@ -94,6 +120,7 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) { const char *features[] = { XMLNS_DISCO_INFO, XMLNS_VERSION, + XMLNS_TIME_OLD, XMLNS_TIME, XMLNS_CHATSTATES, XMLNS_MUC, diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index ff46e12f..adf9a291 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -213,7 +213,8 @@ struct jabber_transfer /* Some supported extensions/legacy stuff */ #define XMLNS_AUTH "jabber:iq:auth" /* XEP-0078 */ #define XMLNS_VERSION "jabber:iq:version" /* XEP-0092 */ -#define XMLNS_TIME "jabber:iq:time" /* XEP-0090 */ +#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_VCARD "vcard-temp" /* XEP-0054 */ #define XMLNS_DELAY "jabber:x:delay" /* XEP-0091 */ |