diff options
| author | Indent <please@skip.me> | 2015-02-19 02:47:20 -0300 | 
|---|---|---|
| committer | dequis <dx@dxzone.com.ar> | 2015-02-20 19:50:54 -0300 | 
| commit | 5ebff60479fc7a9f7f50ac03b124c91d4e6ebe11 (patch) | |
| tree | 9fc0d50cb1f4bc9768d9f00de94eafd876bb55b0 /protocols/msn/ns.c | |
| parent | af359b4316f9d392c6b752495a1b2ed631576ed8 (diff) | |
Reindent everything to K&R style with tabs
Used uncrustify, with the configuration file in ./doc/uncrustify.cfg
Commit author set to "Indent <please@skip.me>" so that it's easier to
skip while doing git blame.
Diffstat (limited to 'protocols/msn/ns.c')
| -rw-r--r-- | protocols/msn/ns.c | 1303 | 
1 files changed, 607 insertions, 696 deletions
| diff --git a/protocols/msn/ns.c b/protocols/msn/ns.c index 7646e237..f6c553a8 100644 --- a/protocols/msn/ns.c +++ b/protocols/msn/ns.c @@ -1,4 +1,4 @@ -  /********************************************************************\ +/********************************************************************\    * BitlBee -- An IRC to other IM-networks gateway                     *    *                                                                    *    * Copyright 2002-2012 Wilmer van der Gaast and others                * @@ -32,849 +32,753 @@  #include "soap.h"  #include "xmltree.h" -static gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond ); -static gboolean msn_ns_callback( gpointer data, gint source, b_input_condition cond ); -static int msn_ns_command( struct msn_handler_data *handler, char **cmd, int num_parts ); -static int msn_ns_message( struct msn_handler_data *handler, char *msg, int msglen, char **cmd, int num_parts ); +static gboolean msn_ns_connected(gpointer data, gint source, b_input_condition cond); +static gboolean msn_ns_callback(gpointer data, gint source, b_input_condition cond); +static int msn_ns_command(struct msn_handler_data *handler, char **cmd, int num_parts); +static int msn_ns_message(struct msn_handler_data *handler, char *msg, int msglen, char **cmd, int num_parts); -static void msn_ns_send_adl_start( struct im_connection *ic ); -static void msn_ns_send_adl( struct im_connection *ic ); +static void msn_ns_send_adl_start(struct im_connection *ic); +static void msn_ns_send_adl(struct im_connection *ic); -int msn_ns_write( struct im_connection *ic, int fd, const char *fmt, ... ) +int msn_ns_write(struct im_connection *ic, int fd, const char *fmt, ...)  {  	struct msn_data *md = ic->proto_data;  	va_list params;  	char *out;  	size_t len;  	int st; -	 -	va_start( params, fmt ); -	out = g_strdup_vprintf( fmt, params ); -	va_end( params ); -	 -	if( fd < 0 ) + +	va_start(params, fmt); +	out = g_strdup_vprintf(fmt, params); +	va_end(params); + +	if (fd < 0) {  		fd = md->ns->fd; -	 -	if( getenv( "BITLBEE_DEBUG" ) ) -		fprintf( stderr, "->NS%d:%s\n", fd, out ); -	 -	len = strlen( out ); -	st = write( fd, out, len ); -	g_free( out ); -	if( st != len ) -	{ -		imcb_error( ic, "Short write() to main server" ); -		imc_logout( ic, TRUE ); +	} + +	if (getenv("BITLBEE_DEBUG")) { +		fprintf(stderr, "->NS%d:%s\n", fd, out); +	} + +	len = strlen(out); +	st = write(fd, out, len); +	g_free(out); +	if (st != len) { +		imcb_error(ic, "Short write() to main server"); +		imc_logout(ic, TRUE);  		return 0;  	} -	 +  	return 1;  } -gboolean msn_ns_connect( struct im_connection *ic, struct msn_handler_data *handler, const char *host, int port ) +gboolean msn_ns_connect(struct im_connection *ic, struct msn_handler_data *handler, const char *host, int port)  { -	if( handler->fd >= 0 ) -		closesocket( handler->fd ); -	 +	if (handler->fd >= 0) { +		closesocket(handler->fd); +	} +  	handler->exec_command = msn_ns_command;  	handler->exec_message = msn_ns_message;  	handler->data = ic; -	handler->fd = proxy_connect( host, port, msn_ns_connected, handler ); -	if( handler->fd < 0 ) -	{ -		imcb_error( ic, "Could not connect to server" ); -		imc_logout( ic, TRUE ); +	handler->fd = proxy_connect(host, port, msn_ns_connected, handler); +	if (handler->fd < 0) { +		imcb_error(ic, "Could not connect to server"); +		imc_logout(ic, TRUE);  		return FALSE;  	} -	 +  	return TRUE;  } -static gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond ) +static gboolean msn_ns_connected(gpointer data, gint source, b_input_condition cond)  {  	struct msn_handler_data *handler = data;  	struct im_connection *ic = handler->data;  	struct msn_data *md; -	 -	if( !g_slist_find( msn_connections, ic ) ) + +	if (!g_slist_find(msn_connections, ic)) {  		return FALSE; -	 +	} +  	md = ic->proto_data; -	 -	if( source == -1 ) -	{ -		imcb_error( ic, "Could not connect to server" ); -		imc_logout( ic, TRUE ); + +	if (source == -1) { +		imcb_error(ic, "Could not connect to server"); +		imc_logout(ic, TRUE);  		return FALSE;  	} -	 -	g_free( handler->rxq ); + +	g_free(handler->rxq);  	handler->rxlen = 0; -	handler->rxq = g_new0( char, 1 ); -	 -	if( md->uuid == NULL ) -	{ +	handler->rxq = g_new0(char, 1); + +	if (md->uuid == NULL) {  		struct utsname name;  		sha1_state_t sha[1]; -		 +  		/* UUID == SHA1("BitlBee" + my hostname + MSN username) */ -		sha1_init( sha ); -		sha1_append( sha, (void*) "BitlBee", 7 ); -		if( uname( &name ) == 0 ) -		{ -			sha1_append( sha, (void*) name.nodename, strlen( name.nodename ) ); +		sha1_init(sha); +		sha1_append(sha, (void *) "BitlBee", 7); +		if (uname(&name) == 0) { +			sha1_append(sha, (void *) name.nodename, strlen(name.nodename));  		} -		sha1_append( sha, (void*) ic->acc->user, strlen( ic->acc->user ) ); -		md->uuid = sha1_random_uuid( sha ); -		memcpy( md->uuid, "b171be3e", 8 ); /* :-P */ +		sha1_append(sha, (void *) ic->acc->user, strlen(ic->acc->user)); +		md->uuid = sha1_random_uuid(sha); +		memcpy(md->uuid, "b171be3e", 8);   /* :-P */  	} -	 -	if( msn_ns_write( ic, source, "VER %d %s CVR0\r\n", ++md->trId, MSNP_VER ) ) -	{ -		handler->inpa = b_input_add( handler->fd, B_EV_IO_READ, msn_ns_callback, handler ); -		imcb_log( ic, "Connected to server, waiting for reply" ); + +	if (msn_ns_write(ic, source, "VER %d %s CVR0\r\n", ++md->trId, MSNP_VER)) { +		handler->inpa = b_input_add(handler->fd, B_EV_IO_READ, msn_ns_callback, handler); +		imcb_log(ic, "Connected to server, waiting for reply");  	} -	 +  	return FALSE;  } -void msn_ns_close( struct msn_handler_data *handler ) +void msn_ns_close(struct msn_handler_data *handler)  { -	if( handler->fd >= 0 ) -	{ -		closesocket( handler->fd ); -		b_event_remove( handler->inpa ); +	if (handler->fd >= 0) { +		closesocket(handler->fd); +		b_event_remove(handler->inpa);  	} -	 +  	handler->fd = handler->inpa = -1; -	g_free( handler->rxq ); -	g_free( handler->cmd_text ); -	 +	g_free(handler->rxq); +	g_free(handler->cmd_text); +  	handler->rxlen = 0;  	handler->rxq = NULL;  	handler->cmd_text = NULL;  } -static gboolean msn_ns_callback( gpointer data, gint source, b_input_condition cond ) +static gboolean msn_ns_callback(gpointer data, gint source, b_input_condition cond)  {  	struct msn_handler_data *handler = data;  	struct im_connection *ic = handler->data; -	 -	if( msn_handler( handler ) == -1 ) /* Don't do this on ret == 0, it's already done then. */ -	{ -		imcb_error( ic, "Error while reading from server" ); -		imc_logout( ic, TRUE ); -		 + +	if (msn_handler(handler) == -1) {  /* Don't do this on ret == 0, it's already done then. */ +		imcb_error(ic, "Error while reading from server"); +		imc_logout(ic, TRUE); +  		return FALSE; -	} -	else +	} else {  		return TRUE; +	}  } -static int msn_ns_command( struct msn_handler_data *handler, char **cmd, int num_parts ) +static int msn_ns_command(struct msn_handler_data *handler, char **cmd, int num_parts)  {  	struct im_connection *ic = handler->data;  	struct msn_data *md = ic->proto_data; -	 -	if( num_parts == 0 ) -	{ + +	if (num_parts == 0) {  		/* Hrrm... Empty command...? Ignore? */ -		return( 1 ); +		return(1);  	} -	 -	if( strcmp( cmd[0], "VER" ) == 0 ) -	{ -		if( cmd[2] && strncmp( cmd[2], MSNP_VER, 5 ) != 0 ) -		{ -			imcb_error( ic, "Unsupported protocol" ); -			imc_logout( ic, FALSE ); -			return( 0 ); + +	if (strcmp(cmd[0], "VER") == 0) { +		if (cmd[2] && strncmp(cmd[2], MSNP_VER, 5) != 0) { +			imcb_error(ic, "Unsupported protocol"); +			imc_logout(ic, FALSE); +			return(0);  		} -		 -		return( msn_ns_write( ic, handler->fd, "CVR %d 0x0409 mac 10.2.0 ppc macmsgs 3.5.1 macmsgs %s\r\n", -		                      ++md->trId, ic->acc->user ) ); -	} -	else if( strcmp( cmd[0], "CVR" ) == 0 ) -	{ + +		return(msn_ns_write(ic, handler->fd, "CVR %d 0x0409 mac 10.2.0 ppc macmsgs 3.5.1 macmsgs %s\r\n", +		                    ++md->trId, ic->acc->user)); +	} else if (strcmp(cmd[0], "CVR") == 0) {  		/* We don't give a damn about the information we just received */ -		return msn_ns_write( ic, handler->fd, "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user ); -	} -	else if( strcmp( cmd[0], "XFR" ) == 0 ) -	{ +		return msn_ns_write(ic, handler->fd, "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user); +	} else if (strcmp(cmd[0], "XFR") == 0) {  		char *server;  		int port; -		 -		if( num_parts >= 6 && strcmp( cmd[2], "NS" ) == 0 ) -		{ -			b_event_remove( handler->inpa ); + +		if (num_parts >= 6 && strcmp(cmd[2], "NS") == 0) { +			b_event_remove(handler->inpa);  			handler->inpa = -1; -			 -			server = strchr( cmd[3], ':' ); -			if( !server ) -			{ -				imcb_error( ic, "Syntax error" ); -				imc_logout( ic, TRUE ); -				return( 0 ); + +			server = strchr(cmd[3], ':'); +			if (!server) { +				imcb_error(ic, "Syntax error"); +				imc_logout(ic, TRUE); +				return(0);  			}  			*server = 0; -			port = atoi( server + 1 ); +			port = atoi(server + 1);  			server = cmd[3]; -			 -			imcb_log( ic, "Transferring to other server" ); -			return msn_ns_connect( ic, handler, server, port ); -		} -		else if( num_parts >= 6 && strcmp( cmd[2], "SB" ) == 0 ) -		{ + +			imcb_log(ic, "Transferring to other server"); +			return msn_ns_connect(ic, handler, server, port); +		} else if (num_parts >= 6 && strcmp(cmd[2], "SB") == 0) {  			struct msn_switchboard *sb; -			 -			server = strchr( cmd[3], ':' ); -			if( !server ) -			{ -				imcb_error( ic, "Syntax error" ); -				imc_logout( ic, TRUE ); -				return( 0 ); + +			server = strchr(cmd[3], ':'); +			if (!server) { +				imcb_error(ic, "Syntax error"); +				imc_logout(ic, TRUE); +				return(0);  			}  			*server = 0; -			port = atoi( server + 1 ); +			port = atoi(server + 1);  			server = cmd[3]; -			 -			if( strcmp( cmd[4], "CKI" ) != 0 ) -			{ -				imcb_error( ic, "Unknown authentication method for switchboard" ); -				imc_logout( ic, TRUE ); -				return( 0 ); + +			if (strcmp(cmd[4], "CKI") != 0) { +				imcb_error(ic, "Unknown authentication method for switchboard"); +				imc_logout(ic, TRUE); +				return(0);  			} -			 -			debug( "Connecting to a new switchboard with key %s", cmd[5] ); -			if( ( sb = msn_sb_create( ic, server, port, cmd[5], MSN_SB_NEW ) ) == NULL ) -			{ +			debug("Connecting to a new switchboard with key %s", cmd[5]); + +			if ((sb = msn_sb_create(ic, server, port, cmd[5], MSN_SB_NEW)) == NULL) {  				/* Although this isn't strictly fatal for the NS connection, it's  				   definitely something serious (we ran out of file descriptors?). */ -				imcb_error( ic, "Could not create new switchboard" ); -				imc_logout( ic, TRUE ); -				return( 0 ); +				imcb_error(ic, "Could not create new switchboard"); +				imc_logout(ic, TRUE); +				return(0);  			} -			 -			if( md->msgq ) -			{ + +			if (md->msgq) {  				struct msn_message *m = md->msgq->data;  				GSList *l; -				 -				sb->who = g_strdup( m->who ); -				 + +				sb->who = g_strdup(m->who); +  				/* Move all the messages to the first user in the message  				   queue to the switchboard message queue. */  				l = md->msgq; -				while( l ) -				{ +				while (l) {  					m = l->data;  					l = l->next; -					if( strcmp( m->who, sb->who ) == 0 ) -					{ -						sb->msgq = g_slist_append( sb->msgq, m ); -						md->msgq = g_slist_remove( md->msgq, m ); +					if (strcmp(m->who, sb->who) == 0) { +						sb->msgq = g_slist_append(sb->msgq, m); +						md->msgq = g_slist_remove(md->msgq, m);  					}  				}  			} -		} -		else -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); -		} -	} -	else if( strcmp( cmd[0], "USR" ) == 0 ) -	{ -		if( num_parts >= 6 && strcmp( cmd[2], "SSO" ) == 0 && -		    strcmp( cmd[3], "S" ) == 0 ) -		{ -			g_free( md->pp_policy ); -			md->pp_policy = g_strdup( cmd[4] ); -			msn_soap_passport_sso_request( ic, cmd[5] ); -		} -		else if( strcmp( cmd[2], "OK" ) == 0 ) -		{ +		} else { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0); +		} +	} else if (strcmp(cmd[0], "USR") == 0) { +		if (num_parts >= 6 && strcmp(cmd[2], "SSO") == 0 && +		    strcmp(cmd[3], "S") == 0) { +			g_free(md->pp_policy); +			md->pp_policy = g_strdup(cmd[4]); +			msn_soap_passport_sso_request(ic, cmd[5]); +		} else if (strcmp(cmd[2], "OK") == 0) {  			/* If the number after the handle is 0, the e-mail  			   address is unverified, which means we can't change  			   the display name. */ -			if( cmd[4][0] == '0' ) +			if (cmd[4][0] == '0') {  				md->flags |= MSN_EMAIL_UNVERIFIED; -			 -			imcb_log( ic, "Authenticated, getting buddy list" ); -			msn_soap_memlist_request( ic ); -		} -		else -		{ -			imcb_error( ic, "Unknown authentication type" ); -			imc_logout( ic, FALSE ); -			return( 0 ); -		} -	} -	else if( strcmp( cmd[0], "MSG" ) == 0 ) -	{ -		if( num_parts < 4 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); -		} -		 -		handler->msglen = atoi( cmd[3] ); -		 -		if( handler->msglen <= 0 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); -		} -	} -	else if( strcmp( cmd[0], "BLP" ) == 0 ) -	{ -		msn_ns_send_adl_start( ic ); -		return msn_ns_finish_login( ic ); -	} -	else if( strcmp( cmd[0], "ADL" ) == 0 ) -	{ -		if( num_parts >= 3 && strcmp( cmd[2], "OK" ) == 0 ) -		{ -			msn_ns_send_adl( ic ); -			return msn_ns_finish_login( ic ); -		} -		else if( num_parts >= 3 ) -		{ -			handler->msglen = atoi( cmd[2] ); +			} + +			imcb_log(ic, "Authenticated, getting buddy list"); +			msn_soap_memlist_request(ic); +		} else { +			imcb_error(ic, "Unknown authentication type"); +			imc_logout(ic, FALSE); +			return(0); +		} +	} else if (strcmp(cmd[0], "MSG") == 0) { +		if (num_parts < 4) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		} -	} -	else if( strcmp( cmd[0], "PRP" ) == 0 ) -	{ -		imcb_connected( ic ); -	} -	else if( strcmp( cmd[0], "CHL" ) == 0 ) -	{ + +		handler->msglen = atoi(cmd[3]); + +		if (handler->msglen <= 0) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0); +		} +	} else if (strcmp(cmd[0], "BLP") == 0) { +		msn_ns_send_adl_start(ic); +		return msn_ns_finish_login(ic); +	} else if (strcmp(cmd[0], "ADL") == 0) { +		if (num_parts >= 3 && strcmp(cmd[2], "OK") == 0) { +			msn_ns_send_adl(ic); +			return msn_ns_finish_login(ic); +		} else if (num_parts >= 3) { +			handler->msglen = atoi(cmd[2]); +		} +	} else if (strcmp(cmd[0], "PRP") == 0) { +		imcb_connected(ic); +	} else if (strcmp(cmd[0], "CHL") == 0) {  		char *resp;  		int st; -		 -		if( num_parts < 3 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		if (num_parts < 3) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		} -		 -		resp = msn_p11_challenge( cmd[2] ); -		 -		st =  msn_ns_write( ic, -1, "QRY %d %s %zd\r\n%s", -		                    ++md->trId, MSNP11_PROD_ID, -		                    strlen( resp ), resp ); -		g_free( resp ); + +		resp = msn_p11_challenge(cmd[2]); + +		st =  msn_ns_write(ic, -1, "QRY %d %s %zd\r\n%s", +		                   ++md->trId, MSNP11_PROD_ID, +		                   strlen(resp), resp); +		g_free(resp);  		return st; -	} -	else if( strcmp( cmd[0], "ILN" ) == 0 || strcmp( cmd[0], "NLN" ) == 0 ) -	{ +	} else if (strcmp(cmd[0], "ILN") == 0 || strcmp(cmd[0], "NLN") == 0) {  		const struct msn_away_state *st;  		const char *handle;  		int cap = 0; -		 -		if( num_parts < 6 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		if (num_parts < 6) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		}  		/* ILN and NLN are more or less the same, except ILN has a trId -		   at the start, and NLN has a capability field at the end.  +		   at the start, and NLN has a capability field at the end.  		   Does ILN still exist BTW? */ -		if( cmd[0][1] == 'I' ) -			cmd ++; -		else -			cap = atoi( cmd[4] ); +		if (cmd[0][1] == 'I') { +			cmd++; +		} else { +			cap = atoi(cmd[4]); +		} -		handle = msn_normalize_handle( cmd[2] ); -		if( strcmp( handle, ic->acc->user ) == 0 ) +		handle = msn_normalize_handle(cmd[2]); +		if (strcmp(handle, ic->acc->user) == 0) {  			return 1; /* That's me! */ -		 -		http_decode( cmd[3] ); -		imcb_rename_buddy( ic, handle, cmd[3] ); -		 -		st = msn_away_state_by_code( cmd[1] ); -		if( !st ) -		{ + +		} +		http_decode(cmd[3]); +		imcb_rename_buddy(ic, handle, cmd[3]); + +		st = msn_away_state_by_code(cmd[1]); +		if (!st) {  			/* FIXME: Warn/Bomb about unknown away state? */  			st = msn_away_state_list + 1;  		} -		 -		imcb_buddy_status( ic, handle, OPT_LOGGED_IN |  -		                   ( st != msn_away_state_list ? OPT_AWAY : 0 ) | -		                   ( cap & 1 ? OPT_MOBILE : 0 ), -		                   st->name, NULL ); -		 -		msn_sb_stop_keepalives( msn_sb_by_handle( ic, handle ) ); -	} -	else if( strcmp( cmd[0], "FLN" ) == 0 ) -	{ + +		imcb_buddy_status(ic, handle, OPT_LOGGED_IN | +		                  (st != msn_away_state_list ? OPT_AWAY : 0) | +		                  (cap & 1 ? OPT_MOBILE : 0), +		                  st->name, NULL); + +		msn_sb_stop_keepalives(msn_sb_by_handle(ic, handle)); +	} else if (strcmp(cmd[0], "FLN") == 0) {  		const char *handle; -		 -		if( cmd[1] == NULL ) + +		if (cmd[1] == NULL) {  			return 1; -		 -		handle = msn_normalize_handle( cmd[1] ); -		imcb_buddy_status( ic, handle, 0, NULL, NULL ); -		msn_sb_start_keepalives( msn_sb_by_handle( ic, handle ), TRUE ); -	} -	else if( strcmp( cmd[0], "RNG" ) == 0 ) -	{ +		} + +		handle = msn_normalize_handle(cmd[1]); +		imcb_buddy_status(ic, handle, 0, NULL, NULL); +		msn_sb_start_keepalives(msn_sb_by_handle(ic, handle), TRUE); +	} else if (strcmp(cmd[0], "RNG") == 0) {  		struct msn_switchboard *sb;  		char *server;  		int session, port; -		 -		if( num_parts < 7 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		if (num_parts < 7) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		} -		 -		session = atoi( cmd[1] ); -		 -		server = strchr( cmd[2], ':' ); -		if( !server ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		session = atoi(cmd[1]); + +		server = strchr(cmd[2], ':'); +		if (!server) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		}  		*server = 0; -		port = atoi( server + 1 ); +		port = atoi(server + 1);  		server = cmd[2]; -		 -		if( strcmp( cmd[3], "CKI" ) != 0 ) -		{ -			imcb_error( ic, "Unknown authentication method for switchboard" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		if (strcmp(cmd[3], "CKI") != 0) { +			imcb_error(ic, "Unknown authentication method for switchboard"); +			imc_logout(ic, TRUE); +			return(0);  		} -		 -		debug( "Got a call from %s (session %d). Key = %s", cmd[5], session, cmd[4] ); -		 -		if( ( sb = msn_sb_create( ic, server, port, cmd[4], session ) ) == NULL ) -		{ + +		debug("Got a call from %s (session %d). Key = %s", cmd[5], session, cmd[4]); + +		if ((sb = msn_sb_create(ic, server, port, cmd[4], session)) == NULL) {  			/* Although this isn't strictly fatal for the NS connection, it's  			   definitely something serious (we ran out of file descriptors?). */ -			imcb_error( ic, "Could not create new switchboard" ); -			imc_logout( ic, TRUE ); -			return( 0 ); -		} -		else -		{ -			sb->who = g_strdup( msn_normalize_handle( cmd[5] ) ); +			imcb_error(ic, "Could not create new switchboard"); +			imc_logout(ic, TRUE); +			return(0); +		} else { +			sb->who = g_strdup(msn_normalize_handle(cmd[5]));  		} -	} -	else if( strcmp( cmd[0], "OUT" ) == 0 ) -	{ +	} else if (strcmp(cmd[0], "OUT") == 0) {  		int allow_reconnect = TRUE; -		 -		if( cmd[1] && strcmp( cmd[1], "OTH" ) == 0 ) -		{ -			imcb_error( ic, "Someone else logged in with your account" ); + +		if (cmd[1] && strcmp(cmd[1], "OTH") == 0) { +			imcb_error(ic, "Someone else logged in with your account");  			allow_reconnect = FALSE; +		} else if (cmd[1] && strcmp(cmd[1], "SSD") == 0) { +			imcb_error(ic, "Terminating session because of server shutdown"); +		} else { +			imcb_error(ic, "Session terminated by remote server (%s)", +			           cmd[1] ? cmd[1] : "reason unknown)");  		} -		else if( cmd[1] && strcmp( cmd[1], "SSD" ) == 0 ) -		{ -			imcb_error( ic, "Terminating session because of server shutdown" ); -		} -		else -		{ -			imcb_error( ic, "Session terminated by remote server (%s)", -			            cmd[1] ? cmd[1] : "reason unknown)" ); -		} -		 -		imc_logout( ic, allow_reconnect ); -		return( 0 ); -	} -	else if( strcmp( cmd[0], "IPG" ) == 0 ) -	{ -		imcb_error( ic, "Received IPG command, we don't handle them yet." ); -		 -		handler->msglen = atoi( cmd[1] ); -		 -		if( handler->msglen <= 0 ) -		{ -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); -			return( 0 ); + +		imc_logout(ic, allow_reconnect); +		return(0); +	} else if (strcmp(cmd[0], "IPG") == 0) { +		imcb_error(ic, "Received IPG command, we don't handle them yet."); + +		handler->msglen = atoi(cmd[1]); + +		if (handler->msglen <= 0) { +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE); +			return(0);  		}  	}  #if 0 -	else if( strcmp( cmd[0], "ADG" ) == 0 ) -	{ -		char *group = g_strdup( cmd[3] ); +	else if (strcmp(cmd[0], "ADG") == 0) { +		char *group = g_strdup(cmd[3]);  		int groupnum, i;  		GSList *l, *next; -		 -		http_decode( group ); -		if( sscanf( cmd[4], "%d", &groupnum ) == 1 ) -		{ -			if( groupnum >= md->groupcount ) -			{ -				md->grouplist = g_renew( char *, md->grouplist, groupnum + 1 ); -				for( i = md->groupcount; i <= groupnum; i ++ ) + +		http_decode(group); +		if (sscanf(cmd[4], "%d", &groupnum) == 1) { +			if (groupnum >= md->groupcount) { +				md->grouplist = g_renew(char *, md->grouplist, groupnum + 1); +				for (i = md->groupcount; i <= groupnum; i++) {  					md->grouplist[i] = NULL; +				}  				md->groupcount = groupnum + 1;  			} -			g_free( md->grouplist[groupnum] ); +			g_free(md->grouplist[groupnum]);  			md->grouplist[groupnum] = group; -		} -		else -		{ +		} else {  			/* Shouldn't happen, but if it does, give up on the group. */ -			g_free( group ); -			imcb_error( ic, "Syntax error" ); -			imc_logout( ic, TRUE ); +			g_free(group); +			imcb_error(ic, "Syntax error"); +			imc_logout(ic, TRUE);  			return 0;  		} -		 -		for( l = md->grpq; l; l = next ) -		{ + +		for (l = md->grpq; l; l = next) {  			struct msn_groupadd *ga = l->data;  			next = l->next; -			if( g_strcasecmp( ga->group, group ) == 0 ) -			{ -				if( !msn_buddy_list_add( ic, "FL", ga->who, ga->who, group ) ) +			if (g_strcasecmp(ga->group, group) == 0) { +				if (!msn_buddy_list_add(ic, "FL", ga->who, ga->who, group)) {  					return 0; -				 -				g_free( ga->group ); -				g_free( ga->who ); -				g_free( ga ); -				md->grpq = g_slist_remove( md->grpq, ga ); +				} + +				g_free(ga->group); +				g_free(ga->who); +				g_free(ga); +				md->grpq = g_slist_remove(md->grpq, ga);  			}  		}  	}  #endif -	else if( strcmp( cmd[0], "GCF" ) == 0 ) -	{ +	else if (strcmp(cmd[0], "GCF") == 0) {  		/* Coming up is cmd[2] bytes of stuff we're supposed to  		   censore. Meh. */ -		handler->msglen = atoi( cmd[2] ); -	} -	else if( strcmp( cmd[0], "UBX" ) == 0 ) -	{ +		handler->msglen = atoi(cmd[2]); +	} else if (strcmp(cmd[0], "UBX") == 0) {  		/* Status message. */ -		if( num_parts >= 3 ) -			handler->msglen = atoi( cmd[2] ); -	} -	else if( strcmp( cmd[0], "NOT" ) == 0 ) -	{ +		if (num_parts >= 3) { +			handler->msglen = atoi(cmd[2]); +		} +	} else if (strcmp(cmd[0], "NOT") == 0) {  		/* Some kind of notification, poorly documented but  		   apparently used to announce address book changes. */ -		if( num_parts >= 2 ) -			handler->msglen = atoi( cmd[1] ); -	} -	else if( strcmp( cmd[0], "UBM" ) == 0 ) -	{ -		if( num_parts >= 7 ) -			handler->msglen = atoi( cmd[6] ); -	} -	else if( strcmp( cmd[0], "QNG" ) == 0 ) -	{ +		if (num_parts >= 2) { +			handler->msglen = atoi(cmd[1]); +		} +	} else if (strcmp(cmd[0], "UBM") == 0) { +		if (num_parts >= 7) { +			handler->msglen = atoi(cmd[6]); +		} +	} else if (strcmp(cmd[0], "QNG") == 0) {  		ic->flags |= OPT_PONGED; -	} -	else if( g_ascii_isdigit( cmd[0][0] ) ) -	{ -		int num = atoi( cmd[0] ); -		const struct msn_status_code *err = msn_status_by_number( num ); -		 -		imcb_error( ic, "Error reported by MSN server: %s", err->text ); -		 -		if( err->flags & STATUS_FATAL ) -		{ -			imc_logout( ic, TRUE ); -			return( 0 ); +	} else if (g_ascii_isdigit(cmd[0][0])) { +		int num = atoi(cmd[0]); +		const struct msn_status_code *err = msn_status_by_number(num); + +		imcb_error(ic, "Error reported by MSN server: %s", err->text); + +		if (err->flags & STATUS_FATAL) { +			imc_logout(ic, TRUE); +			return(0);  		} -		 +  		/* Oh yes, errors can have payloads too now. Discard them for now. */ -		if( num_parts >= 3 ) -			handler->msglen = atoi( cmd[2] ); -	} -	else -	{ +		if (num_parts >= 3) { +			handler->msglen = atoi(cmd[2]); +		} +	} else {  		/* debug( "Received unknown command from main server: %s", cmd[0] ); */  	} -	 -	return( 1 ); + +	return(1);  } -static int msn_ns_message( struct msn_handler_data *handler, char *msg, int msglen, char **cmd, int num_parts ) +static int msn_ns_message(struct msn_handler_data *handler, char *msg, int msglen, char **cmd, int num_parts)  {  	struct im_connection *ic = handler->data;  	char *body;  	int blen = 0; -	 -	if( !num_parts ) -		return( 1 ); -	 -	if( ( body = strstr( msg, "\r\n\r\n" ) ) ) -	{ + +	if (!num_parts) { +		return(1); +	} + +	if ((body = strstr(msg, "\r\n\r\n"))) {  		body += 4; -		blen = msglen - ( body - msg ); +		blen = msglen - (body - msg);  	} -	 -	if( strcmp( cmd[0], "MSG" ) == 0 ) -	{ -		if( g_strcasecmp( cmd[1], "Hotmail" ) == 0 ) -		{ -			char *ct = get_rfc822_header( msg, "Content-Type:", msglen ); -			 -			if( !ct ) -				return( 1 ); -			 -			if( g_strncasecmp( ct, "application/x-msmsgssystemmessage", 33 ) == 0 ) -			{ + +	if (strcmp(cmd[0], "MSG") == 0) { +		if (g_strcasecmp(cmd[1], "Hotmail") == 0) { +			char *ct = get_rfc822_header(msg, "Content-Type:", msglen); + +			if (!ct) { +				return(1); +			} + +			if (g_strncasecmp(ct, "application/x-msmsgssystemmessage", 33) == 0) {  				char *mtype;  				char *arg1; -				 -				if( !body ) -					return( 1 ); -				 -				mtype = get_rfc822_header( body, "Type:", blen ); -				arg1 = get_rfc822_header( body, "Arg1:", blen ); -				 -				if( mtype && strcmp( mtype, "1" ) == 0 ) -				{ -					if( arg1 ) -						imcb_log( ic, "The server is going down for maintenance in %s minutes.", arg1 ); + +				if (!body) { +					return(1);  				} -				 -				g_free( arg1 ); -				g_free( mtype ); -			} -			else if( g_strncasecmp( ct, "text/x-msmsgsprofile", 20 ) == 0 ) -			{ + +				mtype = get_rfc822_header(body, "Type:", blen); +				arg1 = get_rfc822_header(body, "Arg1:", blen); + +				if (mtype && strcmp(mtype, "1") == 0) { +					if (arg1) { +						imcb_log(ic, "The server is going down for maintenance in %s minutes.", +						         arg1); +					} +				} + +				g_free(arg1); +				g_free(mtype); +			} else if (g_strncasecmp(ct, "text/x-msmsgsprofile", 20) == 0) {  				/* We don't care about this profile for now... */ -			} -			else if( g_strncasecmp( ct, "text/x-msmsgsinitialemailnotification", 37 ) == 0 ) -			{ -				if( set_getbool( &ic->acc->set, "mail_notifications" ) ) -				{ -					char *inbox = get_rfc822_header( body, "Inbox-Unread:", blen ); -					char *folders = get_rfc822_header( body, "Folders-Unread:", blen ); - -					if( inbox && folders ) -						imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders ); -					 -					g_free( inbox ); -					g_free( folders ); +			} else if (g_strncasecmp(ct, "text/x-msmsgsinitialemailnotification", 37) == 0) { +				if (set_getbool(&ic->acc->set, "mail_notifications")) { +					char *inbox = get_rfc822_header(body, "Inbox-Unread:", blen); +					char *folders = get_rfc822_header(body, "Folders-Unread:", blen); + +					if (inbox && folders) { +						imcb_log(ic, +						         "INBOX contains %s new messages, plus %s messages in other folders.", inbox, +						         folders); +					} + +					g_free(inbox); +					g_free(folders);  				} -			} -			else if( g_strncasecmp( ct, "text/x-msmsgsemailnotification", 30 ) == 0 ) -			{ -				if( set_getbool( &ic->acc->set, "mail_notifications" ) ) -				{ -					char *from = get_rfc822_header( body, "From-Addr:", blen ); -					char *fromname = get_rfc822_header( body, "From:", blen ); -					 -					if( from && fromname ) -						imcb_log( ic, "Received an e-mail message from %s <%s>.", fromname, from ); - -					g_free( from ); -					g_free( fromname ); +			} else if (g_strncasecmp(ct, "text/x-msmsgsemailnotification", 30) == 0) { +				if (set_getbool(&ic->acc->set, "mail_notifications")) { +					char *from = get_rfc822_header(body, "From-Addr:", blen); +					char *fromname = get_rfc822_header(body, "From:", blen); + +					if (from && fromname) { +						imcb_log(ic, "Received an e-mail message from %s <%s>.", fromname, +						         from); +					} + +					g_free(from); +					g_free(fromname);  				} -			} -			else if( g_strncasecmp( ct, "text/x-msmsgsactivemailnotification", 35 ) == 0 ) -			{ -			} -			else if( g_strncasecmp( ct, "text/x-msmsgsinitialmdatanotification", 37 ) == 0 || -			         g_strncasecmp( ct, "text/x-msmsgsoimnotification", 28 ) == 0 ) -			{ +			} else if (g_strncasecmp(ct, "text/x-msmsgsactivemailnotification", 35) == 0) { +			} else if (g_strncasecmp(ct, "text/x-msmsgsinitialmdatanotification", 37) == 0 || +			           g_strncasecmp(ct, "text/x-msmsgsoimnotification", 28) == 0) {  				/* We received an offline message. Or at least notification  				   that there is one waiting for us. Fetching the message(s)  				   and purging them from the server is a lot of SOAPy work  				   not worth doing IMHO. Also I thought it was possible to  				   have the notification server send them directly, I was  				   pretty sure I saw Pidgin do it.. -				    +  				   At least give a notification for now, seems like a  				   reasonable thing to do. Only problem is, they'll keep  				   coming back at login time until you read them using a  				   different client. :-( */ -				 -				char *xml = get_rfc822_header( body, "Mail-Data:", blen ); + +				char *xml = get_rfc822_header(body, "Mail-Data:", blen);  				struct xt_node *md, *m; -				 -				if( !xml ) + +				if (!xml) {  					return 1; -				md = xt_from_string( xml, 0 ); -				if( !md ) +				} +				md = xt_from_string(xml, 0); +				if (!md) {  					return 1; -				 -				for( m = md->children; ( m = xt_find_node( m, "M" ) ); m = m->next ) -				{ -					struct xt_node *e = xt_find_node( m->children, "E" ); -					struct xt_node *rt = xt_find_node( m->children, "RT" ); +				} + +				for (m = md->children; (m = xt_find_node(m, "M")); m = m->next) { +					struct xt_node *e = xt_find_node(m->children, "E"); +					struct xt_node *rt = xt_find_node(m->children, "RT");  					struct tm tp;  					time_t msgtime = 0; -					 -					if( !e || !e->text ) + +					if (!e || !e->text) {  						continue; -					 -					memset( &tp, 0, sizeof( tp ) ); -					if( rt && rt->text && -					    sscanf( rt->text, "%4d-%2d-%2dT%2d:%2d:%2d.", -					            &tp.tm_year, &tp.tm_mon, &tp.tm_mday, -					            &tp.tm_hour, &tp.tm_min, &tp.tm_sec ) == 6 ) -					{ +					} + +					memset(&tp, 0, sizeof(tp)); +					if (rt && rt->text && +					    sscanf(rt->text, "%4d-%2d-%2dT%2d:%2d:%2d.", +					           &tp.tm_year, &tp.tm_mon, &tp.tm_mday, +					           &tp.tm_hour, &tp.tm_min, &tp.tm_sec) == 6) {  						tp.tm_year -= 1900; -						tp.tm_mon --; -						msgtime = mktime_utc( &tp ); -						 +						tp.tm_mon--; +						msgtime = mktime_utc(&tp); +  					} -					imcb_buddy_msg( ic, e->text, "<< \002BitlBee\002 - Received offline message. BitlBee can't show these. >>", 0, msgtime ); +					imcb_buddy_msg(ic, e->text, +					               "<< \002BitlBee\002 - Received offline message. BitlBee can't show these. >>", 0, +					               msgtime);  				} -				 -				g_free( xml ); -				xt_free_node( md ); -			} -			else -			{ -				debug( "Can't handle %s packet from notification server", ct ); + +				g_free(xml); +				xt_free_node(md); +			} else { +				debug("Can't handle %s packet from notification server", ct);  			} -			 -			g_free( ct ); + +			g_free(ct);  		} -	} -	else if( strcmp( cmd[0], "UBX" ) == 0 ) -	{ +	} else if (strcmp(cmd[0], "UBX") == 0) {  		struct xt_node *ubx, *psm;  		char *psm_text = NULL; -		 -		ubx = xt_from_string( msg, msglen ); -		if( ubx && strcmp( ubx->name, "Data" ) == 0 && -		    ( psm = xt_find_node( ubx->children, "PSM" ) ) ) + +		ubx = xt_from_string(msg, msglen); +		if (ubx && strcmp(ubx->name, "Data") == 0 && +		    (psm = xt_find_node(ubx->children, "PSM"))) {  			psm_text = psm->text; -		 -		imcb_buddy_status_msg( ic, msn_normalize_handle( cmd[1] ), psm_text ); -		xt_free_node( ubx ); -	} -	else if( strcmp( cmd[0], "ADL" ) == 0 ) -	{ +		} + +		imcb_buddy_status_msg(ic, msn_normalize_handle(cmd[1]), psm_text); +		xt_free_node(ubx); +	} else if (strcmp(cmd[0], "ADL") == 0) {  		struct xt_node *adl, *d, *c; -		 -		if( !( adl = xt_from_string( msg, msglen ) ) ) + +		if (!(adl = xt_from_string(msg, msglen))) {  			return 1; -		 -		for( d = adl->children; d; d = d->next ) -		{ +		} + +		for (d = adl->children; d; d = d->next) {  			char *dn; -			if( strcmp( d->name, "d" ) != 0 || -			    ( dn = xt_find_attr( d, "n" ) ) == NULL ) +			if (strcmp(d->name, "d") != 0 || +			    (dn = xt_find_attr(d, "n")) == NULL) {  				continue; -			for( c = d->children; c; c = c->next ) -			{ +			} +			for (c = d->children; c; c = c->next) {  				bee_user_t *bu;  				struct msn_buddy_data *bd;  				char *cn, *handle, *f, *l;  				int flags; -				 -				if( strcmp( c->name, "c" ) != 0 || -				    ( l = xt_find_attr( c, "l" ) ) == NULL || -				    ( cn = xt_find_attr( c, "n" ) ) == NULL ) + +				if (strcmp(c->name, "c") != 0 || +				    (l = xt_find_attr(c, "l")) == NULL || +				    (cn = xt_find_attr(c, "n")) == NULL) {  					continue; -				 +				} +  				/* FIXME: Use "t" here, guess I should just add it  				   as a prefix like elsewhere in the protocol. */ -				handle = g_strdup_printf( "%s@%s", cn, dn ); -				if( !( ( bu = bee_user_by_handle( ic->bee, ic, handle ) ) || -				       ( bu = bee_user_new( ic->bee, ic, handle, 0 ) ) ) ) -				{ -					g_free( handle ); +				handle = g_strdup_printf("%s@%s", cn, dn); +				if (!((bu = bee_user_by_handle(ic->bee, ic, handle)) || +				      (bu = bee_user_new(ic->bee, ic, handle, 0)))) { +					g_free(handle);  					continue;  				} -				g_free( handle ); +				g_free(handle);  				bd = bu->data; -				 -				if( ( f = xt_find_attr( c, "f" ) ) ) -				{ -					http_decode( f ); -					imcb_rename_buddy( ic, bu->handle, f ); + +				if ((f = xt_find_attr(c, "f"))) { +					http_decode(f); +					imcb_rename_buddy(ic, bu->handle, f);  				} -				 -				flags = atoi( l ) & 15; -				if( bd->flags != flags ) -				{ + +				flags = atoi(l) & 15; +				if (bd->flags != flags) {  					bd->flags = flags; -					msn_buddy_ask( bu ); +					msn_buddy_ask(bu);  				}  			}  		} -	} -	else if( strcmp( cmd[0], "UBM" ) == 0 ) -	{ +	} else if (strcmp(cmd[0], "UBM") == 0) {  		/* This one will give us msgs from federated networks. Technically  		   it should also get us offline messages, but I don't know how  		   I can signal MSN servers to use it. */  		char *ct, *handle; -		 -		if( strcmp( cmd[1], ic->acc->user ) == 0 ) -		{ + +		if (strcmp(cmd[1], ic->acc->user) == 0) {  			/* With MPOP, you'll get copies of your own msgs from other  			   sessions. Discard those at least for now. */  			return 1;  		} -		 -		ct = get_rfc822_header( msg, "Content-Type", msglen ); -		if( strncmp( ct, "text/plain", 10 ) != 0 ) -		{ + +		ct = get_rfc822_header(msg, "Content-Type", msglen); +		if (strncmp(ct, "text/plain", 10) != 0) {  			/* Typing notification or something? */ -			g_free( ct ); +			g_free(ct);  			return 1;  		} -		if( strcmp( cmd[2], "1" ) != 0 ) -			handle = g_strdup_printf( "%s:%s", cmd[2], cmd[1] ); -		else -			handle = g_strdup( cmd[1] ); -		 -		imcb_buddy_msg( ic, handle, body, 0, 0 ); -		g_free( handle ); +		if (strcmp(cmd[2], "1") != 0) { +			handle = g_strdup_printf("%s:%s", cmd[2], cmd[1]); +		} else { +			handle = g_strdup(cmd[1]); +		} + +		imcb_buddy_msg(ic, handle, body, 0, 0); +		g_free(handle);  	} -	 +  	return 1;  } -void msn_auth_got_passport_token( struct im_connection *ic, const char *token, const char *error ) +void msn_auth_got_passport_token(struct im_connection *ic, const char *token, const char *error)  {  	struct msn_data *md; -	 +  	/* Dead connection? */ -	if( g_slist_find( msn_connections, ic ) == NULL ) +	if (g_slist_find(msn_connections, ic) == NULL) {  		return; -	 -	md = ic->proto_data; -	 -	if( token ) -	{ -		msn_ns_write( ic, -1, "USR %d SSO S %s %s {%s}\r\n", ++md->trId, md->tokens[0], token, md->uuid );  	} -	else -	{ -		imcb_error( ic, "Error during Passport authentication: %s", error ); -		imc_logout( ic, TRUE ); + +	md = ic->proto_data; + +	if (token) { +		msn_ns_write(ic, -1, "USR %d SSO S %s %s {%s}\r\n", ++md->trId, md->tokens[0], token, md->uuid); +	} else { +		imcb_error(ic, "Error during Passport authentication: %s", error); +		imc_logout(ic, TRUE);  	}  } -void msn_auth_got_contact_list( struct im_connection *ic ) +void msn_auth_got_contact_list(struct im_connection *ic)  {  	struct msn_data *md; -	 +  	/* Dead connection? */ -	if( g_slist_find( msn_connections, ic ) == NULL ) +	if (g_slist_find(msn_connections, ic) == NULL) {  		return; -	 +	} +  	md = ic->proto_data; -	msn_ns_write( ic, -1, "BLP %d %s\r\n", ++md->trId, "BL" ); +	msn_ns_write(ic, -1, "BLP %d %s\r\n", ++md->trId, "BL");  } -static gboolean msn_ns_send_adl_1( gpointer key, gpointer value, gpointer data ) +static gboolean msn_ns_send_adl_1(gpointer key, gpointer value, gpointer data)  {  	struct xt_node *adl = data, *d, *c;  	struct bee_user *bu = value; @@ -883,159 +787,166 @@ static gboolean msn_ns_send_adl_1( gpointer key, gpointer value, gpointer data )  	char handle[strlen(bu->handle) + 1];  	char *domain;  	char l[4]; -	 -	if( ( bd->flags & 7 ) == 0 || ( bd->flags & MSN_BUDDY_ADL_SYNCED ) ) + +	if ((bd->flags & 7) == 0 || (bd->flags & MSN_BUDDY_ADL_SYNCED)) { +		return FALSE; +	} + +	strcpy(handle, bu->handle); +	if ((domain = strchr(handle, '@')) == NULL) {    /* WTF */  		return FALSE; -	 -	strcpy( handle, bu->handle ); -	if( ( domain = strchr( handle, '@' ) ) == NULL ) /* WTF */ -		return FALSE;  +	}  	*domain = '\0'; -	domain ++; -	 -	if( ( d = adl->children ) == NULL || -	    g_strcasecmp( xt_find_attr( d, "n" ), domain ) != 0 ) -	{ -		d = xt_new_node( "d", NULL, NULL ); -		xt_add_attr( d, "n", domain ); -		xt_insert_child( adl, d ); +	domain++; + +	if ((d = adl->children) == NULL || +	    g_strcasecmp(xt_find_attr(d, "n"), domain) != 0) { +		d = xt_new_node("d", NULL, NULL); +		xt_add_attr(d, "n", domain); +		xt_insert_child(adl, d);  	} -	 -	g_snprintf( l, sizeof( l ), "%d", bd->flags & 7 ); -	c = xt_new_node( "c", NULL, NULL ); -	xt_add_attr( c, "n", handle ); -	xt_add_attr( c, "l", l ); -	xt_add_attr( c, "t", "1" ); /* FIXME: Network type, i.e. 32 for Y!MSG */ -	xt_insert_child( d, c ); -	 + +	g_snprintf(l, sizeof(l), "%d", bd->flags & 7); +	c = xt_new_node("c", NULL, NULL); +	xt_add_attr(c, "n", handle); +	xt_add_attr(c, "l", l); +	xt_add_attr(c, "t", "1");   /* FIXME: Network type, i.e. 32 for Y!MSG */ +	xt_insert_child(d, c); +  	/* Do this in batches of 100. */  	bd->flags |= MSN_BUDDY_ADL_SYNCED;  	return (--md->adl_todo % 140) == 0;  } -static void msn_ns_send_adl( struct im_connection *ic ) +static void msn_ns_send_adl(struct im_connection *ic)  {  	struct xt_node *adl;  	struct msn_data *md = ic->proto_data;  	char *adls; -	 -	adl = xt_new_node( "ml", NULL, NULL ); -	xt_add_attr( adl, "l", "1" ); -	g_tree_foreach( md->domaintree, msn_ns_send_adl_1, adl ); -	if( adl->children == NULL ) -	{ + +	adl = xt_new_node("ml", NULL, NULL); +	xt_add_attr(adl, "l", "1"); +	g_tree_foreach(md->domaintree, msn_ns_send_adl_1, adl); +	if (adl->children == NULL) {  		/* This tells the caller that we're done now. */  		md->adl_todo = -1; -		xt_free_node( adl ); +		xt_free_node(adl);  		return;  	} -	 -	adls = xt_to_string( adl ); -	xt_free_node( adl ); -	msn_ns_write( ic, -1, "ADL %d %zd\r\n%s", ++md->trId, strlen( adls ), adls ); -	g_free( adls ); + +	adls = xt_to_string(adl); +	xt_free_node(adl); +	msn_ns_write(ic, -1, "ADL %d %zd\r\n%s", ++md->trId, strlen(adls), adls); +	g_free(adls);  } -static void msn_ns_send_adl_start( struct im_connection *ic ) +static void msn_ns_send_adl_start(struct im_connection *ic)  {  	struct msn_data *md;  	GSList *l; -	 +  	/* Dead connection? */ -	if( g_slist_find( msn_connections, ic ) == NULL ) +	if (g_slist_find(msn_connections, ic) == NULL) {  		return; -	 +	} +  	md = ic->proto_data;  	md->adl_todo = 0; -	for( l = ic->bee->users; l; l = l->next ) -	{ +	for (l = ic->bee->users; l; l = l->next) {  		bee_user_t *bu = l->data;  		struct msn_buddy_data *bd = bu->data; -		 -		if( bu->ic != ic || ( bd->flags & 7 ) == 0 ) + +		if (bu->ic != ic || (bd->flags & 7) == 0) {  			continue; -		 +		} +  		bd->flags &= ~MSN_BUDDY_ADL_SYNCED;  		md->adl_todo++;  	} -	 -	msn_ns_send_adl( ic ); + +	msn_ns_send_adl(ic);  } -int msn_ns_finish_login( struct im_connection *ic ) +int msn_ns_finish_login(struct im_connection *ic)  {  	struct msn_data *md = ic->proto_data; -	 -	if( ic->flags & OPT_LOGGED_IN ) + +	if (ic->flags & OPT_LOGGED_IN) {  		return 1; -	 -	if( md->adl_todo < 0 ) +	} + +	if (md->adl_todo < 0) {  		md->flags |= MSN_DONE_ADL; -	 -	if( ( md->flags & MSN_DONE_ADL ) && ( md->flags & MSN_GOT_PROFILE ) ) -	{ -		if( md->flags & MSN_EMAIL_UNVERIFIED ) -			imcb_connected( ic ); -		else -			return msn_ns_set_display_name( ic, set_getstr( &ic->acc->set, "display_name" ) );  	} -	 + +	if ((md->flags & MSN_DONE_ADL) && (md->flags & MSN_GOT_PROFILE)) { +		if (md->flags & MSN_EMAIL_UNVERIFIED) { +			imcb_connected(ic); +		} else { +			return msn_ns_set_display_name(ic, set_getstr(&ic->acc->set, "display_name")); +		} +	} +  	return 1;  } -int msn_ns_sendmessage( struct im_connection *ic, bee_user_t *bu, const char *text ) +int msn_ns_sendmessage(struct im_connection *ic, bee_user_t *bu, const char *text)  {  	struct msn_data *md = ic->proto_data;  	int type = 0;  	char *buf, *handle; -	 -	if( strncmp( text, "\r\r\r", 3 ) == 0 ) + +	if (strncmp(text, "\r\r\r", 3) == 0) {  		/* Err. Shouldn't happen but I guess it can. Don't send others  		   any of the "SHAKE THAT THING" messages. :-D */  		return 1; -	 +	} +  	/* This might be a federated contact. Get its network number,  	   prefixed to bu->handle with a colon. Default is 1. */ -	for( handle = bu->handle; g_ascii_isdigit( *handle ); handle ++ ) +	for (handle = bu->handle; g_ascii_isdigit(*handle); handle++) {  		type = type * 10 + *handle - '0'; -	if( *handle == ':' ) -		handle ++; -	else +	} +	if (*handle == ':') { +		handle++; +	} else {  		type = 1; -	 -	buf = g_strdup_printf( "%s%s", MSN_MESSAGE_HEADERS, text ); -	 -	if( msn_ns_write( ic, -1, "UUM %d %s %d %d %zd\r\n%s", -	                          ++md->trId, handle, type, -	                          1, /* type == IM (not nudge/typing) */ -	                          strlen( buf ), buf ) ) +	} + +	buf = g_strdup_printf("%s%s", MSN_MESSAGE_HEADERS, text); + +	if (msn_ns_write(ic, -1, "UUM %d %s %d %d %zd\r\n%s", +	                 ++md->trId, handle, type, +	                 1,          /* type == IM (not nudge/typing) */ +	                 strlen(buf), buf)) {  		return 1; -	else +	} else {  		return 0; +	}  } -void msn_ns_oim_send_queue( struct im_connection *ic, GSList **msgq ) +void msn_ns_oim_send_queue(struct im_connection *ic, GSList **msgq)  {  	GSList *l; -	 -	for( l = *msgq; l; l = l->next ) -	{ + +	for (l = *msgq; l; l = l->next) {  		struct msn_message *m = l->data; -		bee_user_t *bu = bee_user_by_handle( ic->bee, ic, m->who ); -		 -		if( bu ) -			if( !msn_ns_sendmessage( ic, bu, m->text ) ) +		bee_user_t *bu = bee_user_by_handle(ic->bee, ic, m->who); + +		if (bu) { +			if (!msn_ns_sendmessage(ic, bu, m->text)) {  				return; +			} +		}  	} -	 -	while( *msgq != NULL ) -	{ + +	while (*msgq != NULL) {  		struct msn_message *m = (*msgq)->data; -		 -		g_free( m->who ); -		g_free( m->text ); -		g_free( m ); -		 -		*msgq = g_slist_remove( *msgq, m ); + +		g_free(m->who); +		g_free(m->text); +		g_free(m); + +		*msgq = g_slist_remove(*msgq, m);  	}  } | 
