diff options
Diffstat (limited to 'protocols/jabber/jabber.c')
| -rw-r--r-- | protocols/jabber/jabber.c | 36 | 
1 files changed, 29 insertions, 7 deletions
| diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 86320ada..229e35bf 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -64,6 +64,8 @@ static void jabber_init( account_t *acc )  	s->flags |= ACC_SET_OFFLINE_ONLY;  	s = set_add( &acc->set, "priority", "0", set_eval_priority, acc ); + +	s = set_add( &acc->set, "proxy", "<local>;<auto>", NULL, acc );  	s = set_add( &acc->set, "resource", "BitlBee", NULL, acc );  	s->flags |= ACC_SET_OFFLINE_ONLY; @@ -79,6 +81,8 @@ static void jabber_init( account_t *acc )  	s = set_add( &acc->set, "tls", "try", set_eval_tls, acc );  	s->flags |= ACC_SET_OFFLINE_ONLY; +	s = set_add( &acc->set, "user_agent", "BitlBee", NULL, acc ); +	  	s = set_add( &acc->set, "xmlconsole", "false", set_eval_bool, acc );  	s->flags |= ACC_SET_OFFLINE_ONLY; @@ -263,11 +267,23 @@ static void jabber_logout( struct im_connection *ic )  {  	struct jabber_data *jd = ic->proto_data; +	while( jd->filetransfers ) +		imcb_file_canceled( ic, ( ( struct jabber_transfer *) jd->filetransfers->data )->ft, "Logging out" ); + +	while( jd->streamhosts ) +	{ +		jabber_streamhost_t *sh = jd->streamhosts->data; +		jd->streamhosts = g_slist_remove( jd->streamhosts, sh ); +		g_free( sh->jid ); +		g_free( sh->host ); +		g_free( sh ); +	} +  	if( jd->fd >= 0 )  		jabber_end_stream( ic );  	while( ic->groupchats ) -		jabber_chat_free( ic->groupchats ); +		jabber_chat_free( ic->groupchats->data );  	if( jd->r_inpa >= 0 )  		b_event_remove( jd->r_inpa ); @@ -285,6 +301,8 @@ static void jabber_logout( struct im_connection *ic )  	if( jd->node_cache )  		g_hash_table_destroy( jd->node_cache ); +	jabber_buddy_remove_all( ic ); +	  	xt_free( jd->xt );  	g_free( jd->away_message ); @@ -362,7 +380,7 @@ static void jabber_get_info( struct im_connection *ic, char *who )  		imcb_log( ic, "Buddy %s (%d) information:", bud->full_jid, bud->priority );  		if( bud->away_state )  			imcb_log( ic, "Away state: %s", bud->away_state->full_name ); -		imcb_log( ic, "Status message: %s", bud->away_message ? : "(none)" ); +		imcb_log( ic, "Status message: %s", bud->away_message ? bud->away_message : "(none)" );  		bud = bud->next;  	} @@ -376,8 +394,10 @@ static void jabber_set_away( struct im_connection *ic, char *state_txt, char *me  	/* state_txt == NULL -> Not away.  	   Unknown state -> fall back to the first defined away state. */ -	jd->away_state = state_txt ? jabber_away_state_by_name( state_txt ) -	                 ? : jabber_away_state_list : NULL; +	if( state_txt == NULL ) +		jd->away_state = NULL; +	else if( ( jd->away_state = jabber_away_state_by_name( state_txt ) ) == NULL ) +		jd->away_state = jabber_away_state_list;  	g_free( jd->away_message );  	jd->away_message = ( message && *message ) ? g_strdup( message ) : NULL; @@ -396,7 +416,7 @@ static void jabber_add_buddy( struct im_connection *ic, char *who, char *group )  		return;  	} -	if( jabber_add_to_roster( ic, who, NULL ) ) +	if( jabber_add_to_roster( ic, who, NULL, group ) )  		presence_send_request( ic, who, "subscribe" );  } @@ -422,7 +442,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, const char *room, const char *nick, const char *password ) +static struct groupchat *jabber_chat_join_( struct im_connection *ic, const char *room, const char *nick, const char *password, set_t **sets )  {  	if( strchr( room, '@' ) == NULL )  		imcb_error( ic, "Invalid room name: %s", room ); @@ -469,7 +489,8 @@ static void jabber_chat_invite_( struct groupchat *c, char *who, char *msg )  static void jabber_keepalive( struct im_connection *ic )  {  	/* Just any whitespace character is enough as a keepalive for XMPP sessions. */ -	jabber_write( ic, "\n", 1 ); +	if( !jabber_write( ic, "\n", 1 ) ) +		return;  	/* This runs the garbage collection every minute, which means every packet  	   is in the cache for about a minute (which should be enough AFAIK). */ @@ -543,6 +564,7 @@ void jabber_initmodule()  	ret->keepalive = jabber_keepalive;  	ret->send_typing = jabber_send_typing;  	ret->handle_cmp = g_strcasecmp; +	ret->transfer_request = jabber_si_transfer_request;  	register_protocol( ret );  } | 
