diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2009-12-07 21:54:19 +0000 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2009-12-07 21:54:19 +0000 | 
| commit | 2288705af462b4aca2d56f228bff269eab8d8b5f (patch) | |
| tree | cbdf792579f11297773583cc822548867fdfc19c /protocols/jabber | |
| parent | aac40178a6669e20855b7f5d3cc6a82cba10042e (diff) | |
| parent | 36cf9fda6a5cc4bcbfe98319b48af636fa142590 (diff) | |
Merging head.
Diffstat (limited to 'protocols/jabber')
| -rw-r--r-- | protocols/jabber/conference.c | 25 | ||||
| -rw-r--r-- | protocols/jabber/iq.c | 5 | ||||
| -rw-r--r-- | protocols/jabber/jabber.c | 4 | ||||
| -rw-r--r-- | protocols/jabber/jabber.h | 5 | ||||
| -rw-r--r-- | protocols/jabber/jabber_util.c | 4 | ||||
| -rw-r--r-- | protocols/jabber/presence.c | 10 | 
6 files changed, 31 insertions, 22 deletions
diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index 79fdd053..f434c58a 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -25,7 +25,7 @@  static xt_status jabber_chat_join_failed( struct im_connection *ic, struct xt_node *node, struct xt_node *orig ); -struct groupchat *jabber_chat_join( struct im_connection *ic, char *room, char *nick, char *password ) +struct groupchat *jabber_chat_join( struct im_connection *ic, const char *room, const char *nick, const char *password )  {  	struct jabber_chat *jc;  	struct xt_node *node; @@ -35,9 +35,9 @@ struct groupchat *jabber_chat_join( struct im_connection *ic, char *room, char *  	roomjid = g_strdup_printf( "%s/%s", room, nick );  	node = xt_new_node( "x", NULL, NULL );  	xt_add_attr( node, "xmlns", XMLNS_MUC ); -	node = jabber_make_packet( "presence", NULL, roomjid, node );  	if( password )  		xt_add_child( node, xt_new_node( "password", password, NULL ) ); +	node = jabber_make_packet( "presence", NULL, roomjid, node );  	jabber_cache_add( ic, node, jabber_chat_join_failed );  	if( !jabber_write_packet( ic, node ) ) @@ -233,8 +233,10 @@ void jabber_chat_pkt_presence( struct im_connection *ic, struct jabber_buddy *bu  			if( ( s = xt_find_attr( c, "xmlns" ) ) &&  			    ( strcmp( s, XMLNS_MUC_USER ) == 0 ) )  			{ -				c = xt_find_node( c->children, "item" ); -				if( ( s = xt_find_attr( c, "jid" ) ) ) +				struct xt_node *item; +				 +				item = xt_find_node( c->children, "item" ); +				if( ( s = xt_find_attr( item, "jid" ) ) )  				{  					/* Yay, found what we need. :-) */  					bud->ext_jid = jabber_normalize( s ); @@ -282,12 +284,15 @@ void jabber_chat_pkt_presence( struct im_connection *ic, struct jabber_buddy *bu  	}  	else if( type ) /* type can only be NULL or "unavailable" in this function */  	{ -		s = strchr( bud->ext_jid, '/' ); -		if( s ) *s = 0; -		imcb_chat_remove_buddy( chat, bud->ext_jid, NULL ); -		if( bud != jc->me && bud->flags & JBFLAG_IS_ANONYMOUS ) -			imcb_remove_buddy( ic, bud->ext_jid, NULL ); -		if( s ) *s = '/'; +		if( ( bud->flags & JBFLAG_IS_CHATROOM ) && bud->ext_jid ) +		{ +			s = strchr( bud->ext_jid, '/' ); +			if( s ) *s = 0; +			imcb_chat_remove_buddy( chat, bud->ext_jid, NULL ); +			if( bud != jc->me && bud->flags & JBFLAG_IS_ANONYMOUS ) +				imcb_remove_buddy( ic, bud->ext_jid, NULL ); +			if( s ) *s = '/'; +		}  		if( bud == jc->me )  			jabber_chat_free( chat ); diff --git a/protocols/jabber/iq.c b/protocols/jabber/iq.c index eacc85af..f17a7bb5 100644 --- a/protocols/jabber/iq.c +++ b/protocols/jabber/iq.c @@ -50,10 +50,11 @@ 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" ) ) ) || /* O_o WHAT is wrong with just <query/> ????? */ +		       ( c = xt_find_node( node->children, "ping" ) ) ) ||  		    !( s = xt_find_attr( c, "xmlns" ) ) )  		{ -			imcb_log( ic, "Warning: Received incomplete IQ-%s packet", type ); +			/* Sigh. Who decided to suddenly invent new elements +			   instead of just sticking with <query/>? */  			return XT_HANDLED;  		} diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 48f71ff1..15341c9b 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -69,7 +69,7 @@ static void jabber_init( account_t *acc )  	s = set_add( &acc->set, "resource_select", "priority", NULL, acc );  	s = set_add( &acc->set, "server", NULL, set_eval_account, acc ); -	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY; +	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY | SET_NULL_OK;  	s = set_add( &acc->set, "ssl", "false", set_eval_bool, acc );  	s->flags |= ACC_SET_OFFLINE_ONLY; @@ -438,7 +438,7 @@ static void jabber_remove_buddy( struct im_connection *ic, char *who, char *grou  		presence_send_request( ic, who, "unsubscribe" );  } -static struct groupchat *jabber_chat_join_( struct im_connection *ic, char *room, char *nick, char *password ) +static struct groupchat *jabber_chat_join_( struct im_connection *ic, const char *room, const char *nick, const char *password )  {  	if( strchr( room, '@' ) == NULL )  		imcb_error( ic, "Invalid room name: %s", room ); diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index cc12bdbb..9f101f83 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -26,8 +26,9 @@  #include <glib.h> -#include "xmltree.h"  #include "bitlbee.h" +#include "md5.h" +#include "xmltree.h"  extern GSList *jabber_connections; @@ -301,7 +302,7 @@ xt_status sasl_pkt_result( struct xt_node *node, gpointer data );  gboolean sasl_supported( struct im_connection *ic );  /* conference.c */ -struct groupchat *jabber_chat_join( struct im_connection *ic, char *room, char *nick, char *password ); +struct groupchat *jabber_chat_join( struct im_connection *ic, const char *room, const char *nick, const char *password );  struct groupchat *jabber_chat_by_jid( struct im_connection *ic, const char *name );  void jabber_chat_free( struct groupchat *c );  int jabber_chat_msg( struct groupchat *ic, char *message, int flags ); diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c index 9579a848..c7f88032 100644 --- a/protocols/jabber/jabber_util.c +++ b/protocols/jabber/jabber_util.c @@ -36,10 +36,10 @@ char *set_eval_priority( set_t *set, char *value )  	{  		/* Priority is a signed 8-bit integer, according to RFC 3921. */  		if( i < -128 || i > 127 ) -			return NULL; +			return SET_INVALID;  	}  	else -		return NULL; +		return SET_INVALID;  	/* Only run this stuff if the account is online ATM,  	   and if the setting seems to be acceptable. */ diff --git a/protocols/jabber/presence.c b/protocols/jabber/presence.c index 6fc360b7..939bc888 100644 --- a/protocols/jabber/presence.c +++ b/protocols/jabber/presence.c @@ -48,8 +48,9 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data )  	{  		if( !( bud = jabber_buddy_by_jid( ic, from, GET_BUDDY_EXACT | GET_BUDDY_CREAT ) ) )  		{ -			if( set_getbool( &ic->irc->set, "debug" ) ) -				imcb_log( ic, "Warning: Could not handle presence information from JID: %s", from ); +			/* +			imcb_log( ic, "Warning: Could not handle presence information from JID: %s", from ); +			*/  			return XT_HANDLED;  		} @@ -105,8 +106,9 @@ xt_status jabber_pkt_presence( struct xt_node *node, gpointer data )  	{  		if( ( bud = jabber_buddy_by_jid( ic, from, 0 ) ) == NULL )  		{ -			if( set_getbool( &ic->irc->set, "debug" ) ) -				imcb_log( ic, "Warning: Received presence information from unknown JID: %s", from ); +			/* +			imcb_log( ic, "Warning: Received presence information from unknown JID: %s", from ); +			*/  			return XT_HANDLED;  		}  | 
