diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2006-09-20 22:26:47 +0200 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2006-09-20 22:26:47 +0200 |
commit | 0b4a0db448d033b8f35f32060bf261374fd81bd8 (patch) | |
tree | c2bf290d6e69573f08d47485b9e2b8061d24a52d /protocols | |
parent | 70f6aab8f4b6a1bbd9991e800dde91a02cc363f0 (diff) |
Now parsing roster properly. (Hopefully...)
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/jabber/iq.c | 19 | ||||
-rw-r--r-- | protocols/jabber/jabber.h | 3 | ||||
-rw-r--r-- | protocols/jabber/presence.c | 15 |
3 files changed, 37 insertions, 0 deletions
diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index 0f1b1036..119176f9 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -86,6 +86,25 @@ xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ) return st ? XT_HANDLED : XT_ABORT; } + if( strcmp( type, "result" ) == 0 && xmlns && strcmp( xmlns, "jabber:iq:roster" ) == 0 ) + { + struct xt_node *node; + + node = query->children; + while( ( node = xt_find_node( node, "item" ) ) ) + { + char *jid = xt_find_attr( node, "jid" ); + char *name = xt_find_attr( node, "name" ); + char *sub = xt_find_attr( node, "subscription" ); + + if( jid && sub && ( strcmp( sub, "both" ) == 0 || strcmp( sub, "to" ) == 0 ) ) + add_buddy( gc, NULL, jid, name ); + + node = node->next; + } + + presence_announce( gc ); + } else if( strcmp( type, "result" ) == 0 ) { /* If we weren't authenticated yet, let's assume we are now. diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index fcf8bbd3..85765628 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -41,7 +41,10 @@ int jabber_start_auth( struct gaim_connection *gc ); int jabber_get_roster( struct gaim_connection *gc ); xt_status jabber_pkt_message( struct xt_node *node, gpointer data ); + +/* presence.c */ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ); +int presence_announce( struct gaim_connection *gc ); /* jabber_util.c */ char *set_eval_resprio( set_t *set, char *value ); diff --git a/protocols/jabber/presence.c b/protocols/jabber/presence.c index 83b69013..46e2b3b2 100644 --- a/protocols/jabber/presence.c +++ b/protocols/jabber/presence.c @@ -33,3 +33,18 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ) return XT_HANDLED; } +int presence_announce( struct gaim_connection *gc ) +{ + struct xt_node *node; + int st; + + node = jabber_make_packet( "presence", NULL, NULL, NULL ); + + st = jabber_write_packet( gc, node ); + + if( st ) + account_online( gc ); + + xt_free_node( node ); + return st; +} |