diff options
| author | Sven Moritz Hallberg <pesco@khjk.org> | 2009-03-12 20:10:06 +0100 | 
|---|---|---|
| committer | Sven Moritz Hallberg <pesco@khjk.org> | 2009-03-12 20:10:06 +0100 | 
| commit | 823de9d44f262ea2364ac8ec6a1e18e0f7dab658 (patch) | |
| tree | bfe64e4fafbcd13aaef6a436cab6ad91619e2821 /protocols/msn | |
| parent | 9b55485a6f9d72334b372e6fb6b60bbde943170d (diff) | |
commit updates by ashish shukla <wahjava@gmail.com>
Diffstat (limited to 'protocols/msn')
| -rw-r--r-- | protocols/msn/msn.c | 61 | ||||
| -rw-r--r-- | protocols/msn/msn.h | 6 | ||||
| -rw-r--r-- | protocols/msn/ns.c | 23 | ||||
| -rw-r--r-- | protocols/msn/sb.c | 42 | 
4 files changed, 54 insertions, 78 deletions
diff --git a/protocols/msn/msn.c b/protocols/msn/msn.c index 335ae894..05eae541 100644 --- a/protocols/msn/msn.c +++ b/protocols/msn/msn.c @@ -112,7 +112,6 @@ static void msn_logout( struct im_connection *ic )  static int msn_buddy_msg( struct im_connection *ic, char *who, char *message, int away )  {  	struct msn_switchboard *sb; -	struct msn_data *md = ic->proto_data;  	if( ( sb = msn_sb_by_handle( ic, who ) ) )  	{ @@ -121,47 +120,13 @@ static int msn_buddy_msg( struct im_connection *ic, char *who, char *message, in  	else  	{  		struct msn_message *m; -		char buf[1024];  		/* Create a message. We have to arrange a usable switchboard, and send the message later. */  		m = g_new0( struct msn_message, 1 );  		m->who = g_strdup( who );  		m->text = g_strdup( message ); -		/* FIXME: *CHECK* the reliability of using spare sb's! */ -		if( ( sb = msn_sb_spare( ic ) ) ) -		{ -			debug( "Trying to use a spare switchboard to message %s", who ); -			 -			sb->who = g_strdup( who ); -			g_snprintf( buf, sizeof( buf ), "CAL %d %s\r\n", ++sb->trId, who ); -			if( msn_sb_write( sb, buf, strlen( buf ) ) ) -			{ -				/* He/She should join the switchboard soon, let's queue the message. */ -				sb->msgq = g_slist_append( sb->msgq, m ); -				return( 1 ); -			} -		} -		 -		debug( "Creating a new switchboard to message %s", who ); -		 -		/* If we reach this line, there was no spare switchboard, so let's make one. */ -		g_snprintf( buf, sizeof( buf ), "XFR %d SB\r\n", ++md->trId ); -		if( !msn_write( ic, buf, strlen( buf ) ) ) -		{ -			g_free( m->who ); -			g_free( m->text ); -			g_free( m ); -			 -			return( 0 ); -		} -		 -		/* And queue the message to md. We'll pick it up when the switchboard comes up. */ -		md->msgq = g_slist_append( md->msgq, m ); -		 -		/* FIXME: If the switchboard creation fails, the message will not be sent. */ -		 -		return( 1 ); +		return msn_sb_write_msg( ic, m );  	}  	return( 0 ); @@ -251,8 +216,6 @@ static void msn_chat_leave( struct groupchat *c )  static struct groupchat *msn_chat_with( struct im_connection *ic, char *who )  {  	struct msn_switchboard *sb; -	struct msn_data *md = ic->proto_data; -	char buf[1024];  	if( ( sb = msn_sb_by_handle( ic, who ) ) )  	{ @@ -263,31 +226,13 @@ static struct groupchat *msn_chat_with( struct im_connection *ic, char *who )  	{  		struct msn_message *m; -		if( ( sb = msn_sb_spare( ic ) ) ) -		{ -			debug( "Trying to reuse an existing switchboard as a groupchat with %s", who ); -			g_snprintf( buf, sizeof( buf ), "CAL %d %s\r\n", ++sb->trId, who ); -			if( msn_sb_write( sb, buf, strlen( buf ) ) ) -				return msn_sb_to_chat( sb ); -		} -		 -		/* If the stuff above failed for some reason: */ -		debug( "Creating a new switchboard to groupchat with %s", who ); -		 -		/* Request a new switchboard. */ -		g_snprintf( buf, sizeof( buf ), "XFR %d SB\r\n", ++md->trId ); -		if( !msn_write( ic, buf, strlen( buf ) ) ) -			return( 0 ); -		  		/* Create a magic message. This is quite hackish, but who cares? :-P */  		m = g_new0( struct msn_message, 1 );  		m->who = g_strdup( who );  		m->text = g_strdup( GROUPCHAT_SWITCHBOARD_MESSAGE ); -		/* Queue the magic message and cross your fingers. */ -		md->msgq = g_slist_append( md->msgq, m ); -		 -		/* FIXME: Can I try to return something here already? */ +		msn_sb_write_msg( ic, m ); +  		return NULL;  	} diff --git a/protocols/msn/msn.h b/protocols/msn/msn.h index 63759303..7c849acf 100644 --- a/protocols/msn/msn.h +++ b/protocols/msn/msn.h @@ -23,6 +23,9 @@    Suite 330, Boston, MA  02111-1307  USA  */ +#ifndef _MSN_H +#define _MSN_H +  /* Some hackish magicstrings to make special-purpose messages/switchboards.   */  #define TYPING_NOTIFICATION_MESSAGE "\r\r\rBEWARE, ME R TYPINK MESSAGE!!!!\r\r\r" @@ -175,3 +178,6 @@ int msn_sb_sendmessage( struct msn_switchboard *sb, char *text );  struct groupchat *msn_sb_to_chat( struct msn_switchboard *sb );  void msn_sb_destroy( struct msn_switchboard *sb );  gboolean msn_sb_connected( gpointer data, gint source, b_input_condition cond ); +int msn_sb_write_msg( struct im_connection *ic, struct msn_message *m ); + +#endif //_MSN_H diff --git a/protocols/msn/ns.c b/protocols/msn/ns.c index fe48f96d..ffaa90a7 100644 --- a/protocols/msn/ns.c +++ b/protocols/msn/ns.c @@ -277,25 +277,11 @@ static int msn_ns_command( gpointer data, char **cmd, int num_parts )  	{  		if( num_parts == 5 )  		{ -			int i, groupcount; -			 -			groupcount = atoi( cmd[4] ); -			if( groupcount > 0 ) -			{ -				/* valgrind says this is leaking memory, I'm guessing -				   that this happens during server redirects. */ -				if( md->grouplist ) -				{ -					for( i = 0; i < md->groupcount; i ++ ) -						g_free( md->grouplist[i] ); -					g_free( md->grouplist ); -				} -				 -				md->groupcount = groupcount; +			md->buddycount = atoi( cmd[3] ); +			md->groupcount = atoi( cmd[4] ); +			if( md->groupcount > 0 )  				md->grouplist = g_new0( char *, md->groupcount ); -			} -			md->buddycount = atoi( cmd[3] );  			if( !*cmd[3] || md->buddycount == 0 )  				msn_logged_in( ic );  		} @@ -678,9 +664,6 @@ static int msn_ns_message( gpointer data, char *msg, int msglen, char **cmd, int  				{  					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 )  			{ diff --git a/protocols/msn/sb.c b/protocols/msn/sb.c index 18c41ef5..e9526234 100644 --- a/protocols/msn/sb.c +++ b/protocols/msn/sb.c @@ -47,6 +47,48 @@ int msn_sb_write( struct msn_switchboard *sb, char *s, int len )  	return( 1 );  } +int msn_sb_write_msg( struct im_connection *ic, struct msn_message *m ) +{ +	struct msn_data *md = ic->proto_data; +	struct msn_switchboard *sb; +	char buf[1024]; + +	/* FIXME: *CHECK* the reliability of using spare sb's! */ +	if( ( sb = msn_sb_spare( ic ) ) ) +	{ +		debug( "Trying to use a spare switchboard to message %s", m->who ); +		 +		sb->who = g_strdup( m->who ); +		g_snprintf( buf, sizeof( buf ), "CAL %d %s\r\n", ++sb->trId, m->who ); +		if( msn_sb_write( sb, buf, strlen( buf ) ) ) +		{ +			/* He/She should join the switchboard soon, let's queue the message. */ +			sb->msgq = g_slist_append( sb->msgq, m ); +			return( 1 ); +		} +	} +	 +	debug( "Creating a new switchboard to message %s", m->who ); +	 +	/* If we reach this line, there was no spare switchboard, so let's make one. */ +	g_snprintf( buf, sizeof( buf ), "XFR %d SB\r\n", ++md->trId ); +	if( !msn_write( ic, buf, strlen( buf ) ) ) +	{ +		g_free( m->who ); +		g_free( m->text ); +		g_free( m ); +		 +		return( 0 ); +	} +	 +	/* And queue the message to md. We'll pick it up when the switchboard comes up. */ +	md->msgq = g_slist_append( md->msgq, m ); +	 +	/* FIXME: If the switchboard creation fails, the message will not be sent. */ +	 +	return( 1 ); +} +  struct msn_switchboard *msn_sb_create( struct im_connection *ic, char *host, int port, char *key, int session )  {  	struct msn_data *md = ic->proto_data;  | 
