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 | |
| parent | 70f6aab8f4b6a1bbd9991e800dde91a02cc363f0 (diff) | |
Now parsing roster properly. (Hopefully...)
| -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; +} | 
