diff options
| author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-08-14 14:44:35 +0100 | 
|---|---|---|
| committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-08-14 14:44:35 +0100 | 
| commit | 07874bef9e9c4e6ace44e4d0605ce1aec89cad74 (patch) | |
| tree | c2a0a0bc30f2fcec7af83b2fb3fe59bbec393116 /protocols/jabber/jabber.c | |
| parent | 584867592546f43f857645e02169d135f0df25e8 (diff) | |
| parent | 136c2bb632715ab83710c93c7b339c5cca7d2679 (diff) | |
Merge mainline stuff.
Diffstat (limited to 'protocols/jabber/jabber.c')
| -rw-r--r-- | protocols/jabber/jabber.c | 18 | 
1 files changed, 14 insertions, 4 deletions
| diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 229e35bf..f7e1e664 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -95,7 +95,7 @@ static void jabber_login( account_t *acc )  {  	struct im_connection *ic = imcb_new( acc );  	struct jabber_data *jd = g_new0( struct jabber_data, 1 ); -	struct ns_srv_reply *srv = NULL; +	struct ns_srv_reply **srvl = NULL, *srv = NULL;  	char *connect_to, *s;  	int i; @@ -195,9 +195,19 @@ static void jabber_login( account_t *acc )  	/* Figure out the hostname to connect to. */  	if( acc->server && *acc->server )  		connect_to = acc->server; -	else if( ( srv = srv_lookup( "xmpp-client", "tcp", jd->server ) ) || -		 ( srv = srv_lookup( "jabber-client", "tcp", jd->server ) ) ) +	else if( ( srvl = srv_lookup( "xmpp-client", "tcp", jd->server ) ) || +	         ( srvl = srv_lookup( "jabber-client", "tcp", jd->server ) ) ) +	{ +		/* Find the lowest-priority one. These usually come +		   back in random/shuffled order. Not looking at +		   weights etc for now. */ +		srv = *srvl; +		for( i = 1; srvl[i]; i ++ ) +			if( srvl[i]->prio < srv->prio ) +				srv = srvl[i]; +		  		connect_to = srv->name; +	}  	else  		connect_to = jd->server; @@ -226,7 +236,7 @@ static void jabber_login( account_t *acc )  	{  		jd->fd = proxy_connect( connect_to, srv ? srv->port : set_getint( &acc->set, "port" ), jabber_connected_plain, ic );  	} -	g_free( srv ); +	srv_free( srvl );  	if( jd->fd == -1 )  	{ | 
