libpurple/protocols/mxit/protocol.c

branch
mxit-2.x.y
changeset 33848
07ffa66fd57b
parent 33828
7a40d62c81d8
parent 33847
7cd76ebbe8d1
child 34507
979df20d7871
--- a/libpurple/protocols/mxit/protocol.c	Wed Mar 27 01:37:02 2013 +0200
+++ b/libpurple/protocols/mxit/protocol.c	Wed Apr 03 11:21:06 2013 +0200
@@ -23,8 +23,9 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#include    "internal.h"
-#include	"purple.h"
+#include	"internal.h"
+#include	"debug.h"
+#include	"version.h"
 
 #include	"protocol.h"
 #include	"mxit.h"
@@ -37,6 +38,7 @@
 #include	"login.h"
 #include	"formcmds.h"
 #include	"http.h"
+#include	"cipher.h"
 #include	"voicevideo.h"
 
 
@@ -98,26 +100,27 @@
  */
 void dump_bytes( struct MXitSession* session, const char* buf, int len )
 {
-	char		msg[( len * 3 ) + 1];
-	int			i;
-
-	memset( msg, 0x00, sizeof( msg ) );
+	char*	msg	= g_malloc0( len + 1 );
+	int		i;
 
 	for ( i = 0; i < len; i++ ) {
-		if ( buf[i] == CP_REC_TERM )		/* record terminator */
+		char ch	= buf[i];
+
+		if ( ch == CP_REC_TERM )		/* record terminator */
 			msg[i] = '!';
-		else if ( buf[i] == CP_FLD_TERM )	/* field terminator */
+		else if ( ch == CP_FLD_TERM )	/* field terminator */
 			msg[i] = '^';
-		else if ( buf[i] == CP_PKT_TERM )	/* packet terminator */
+		else if ( ch == CP_PKT_TERM )	/* packet terminator */
 			msg[i] = '@';
-		else if ( buf[i] < 0x20 )
+		else if ( ( ch < 0x20 ) || ( ch > 0x7E ) )		/* non-printable character */
 			msg[i] = '_';
 		else
-			msg[i] = buf[i];
-
+			msg[i] = ch;
 	}
 
 	purple_debug_info( MXIT_PLUGIN_ID, "DUMP: '%s'\n", msg );
+
+	g_free( msg );
 }
 
 
@@ -461,23 +464,23 @@
 	packet->headerlen = 0;
 
 	/* create generic packet header */
-	hlen = snprintf( header, sizeof( header ), "id=%s%c", purple_account_get_username( session->acc ), CP_REC_TERM );	/* client mxitid */
+	hlen = g_snprintf( header, sizeof( header ), "id=%s%c", purple_account_get_username( session->acc ), CP_REC_TERM );	/* client mxitid */
 
 	if ( session->http ) {
 		/* http connection only */
-		hlen += snprintf( header + hlen, sizeof( header ) - hlen, "s=" );
+		hlen += g_snprintf( header + hlen, sizeof( header ) - hlen, "s=" );
 		if ( session->http_sesid > 0 ) {
-			hlen += snprintf( header + hlen, sizeof( header ) - hlen, "%u%c", session->http_sesid, CP_FLD_TERM );	/* http session id */
+			hlen += g_snprintf( header + hlen, sizeof( header ) - hlen, "%u%c", session->http_sesid, CP_FLD_TERM );	/* http session id */
 		}
 		session->http_seqno++;
-		hlen += snprintf( header + hlen, sizeof( header ) - hlen, "%u%c", session->http_seqno, CP_REC_TERM );		/* http request sequence id */
+		hlen += g_snprintf( header + hlen, sizeof( header ) - hlen, "%u%c", session->http_seqno, CP_REC_TERM );		/* http request sequence id */
 	}
 
-	hlen += snprintf( header + hlen, sizeof( header ) - hlen, "cm=%i%c", cmd, CP_REC_TERM ); 						/* packet command */
+	hlen += g_snprintf( header + hlen, sizeof( header ) - hlen, "cm=%i%c", cmd, CP_REC_TERM ); 						/* packet command */
 
 	if ( !session->http ) {
 		/* socket connection only */
-		packet->headerlen = snprintf( packet->header, sizeof( packet->header ), "ln=%i%c", ( datalen + hlen ), CP_REC_TERM );		/* packet length */
+		packet->headerlen = g_snprintf( packet->header, sizeof( packet->header ), "ln=%i%c", ( datalen + hlen ), CP_REC_TERM );		/* packet length */
 	}
 
 	/* copy the header to packet */
@@ -611,7 +614,6 @@
 	struct MXitSession* session		= (struct MXitSession*) user_data;
 	gboolean			poll		= FALSE;
 	gint64				now			= mxit_now_milli();
-	int					polldiff;
 	gint64				rxdiff;
 
 	if ( !( session->flags & MXIT_FLAG_LOGGEDIN ) ) {
@@ -621,7 +623,6 @@
 
 	/* calculate the time differences */
 	rxdiff = now - session->last_rx;
-	polldiff = now - session->http_last_poll;
 
 	if ( rxdiff < MXIT_HTTP_POLL_MIN ) {
 		/* we received some reply a few moments ago, so reset the poll interval */
@@ -638,7 +639,7 @@
 	}
 
 	/* debugging */
-	//purple_debug_info( MXIT_PLUGIN_ID, "POLL TIMER: %i (%i,%i)\n", session->http_interval, rxdiff, polldiff );
+	//purple_debug_info( MXIT_PLUGIN_ID, "POLL TIMER: %i (%i)\n", session->http_interval, rxdiff );
 
 	if ( poll ) {
 		/* send poll request */
@@ -716,7 +717,7 @@
 	clientVersion = g_strdup_printf( "%c-%i.%i.%i-%s-%s", MXIT_CP_DISTCODE, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_MICRO_VERSION, MXIT_CP_ARCH, MXIT_CP_PLATFORM );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i%c%s%c"		/* "ms"=password\1version\1maxreplyLen\1name\1 */
 								"%s%c%i%c%s%c%s%c"			/* dateOfBirth\1gender\1location\1capabilities\1 */
 								"%s%c%i%c%s%c%s"			/* dc\1features\1dialingcode\1locale */
@@ -760,7 +761,7 @@
 	clientVersion = g_strdup_printf( "%c-%i.%i.%i-%s-%s", MXIT_CP_DISTCODE, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_MICRO_VERSION, MXIT_CP_ARCH, MXIT_CP_PLATFORM );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i%c"			/* "ms"=password\1version\1getContacts\1 */
 								"%s%c%s%c%i%c"				/* capabilities\1dc\1features\1 */
 								"%s%c%s%c"					/* dialingcode\1locale\1 */
@@ -774,7 +775,7 @@
 	/* include "custom resource" information */
 	splashId = splash_current( session );
 	if ( splashId != NULL )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%ccr=%s", CP_REC_TERM, splashId );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%ccr=%s", CP_REC_TERM, splashId );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_LOGIN );
@@ -804,7 +805,7 @@
 		markuped_msg = g_strdup( msg );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i%c%i",		/* "ms"=jid\1msg\1type\1flags */
 								to, CP_FLD_TERM, markuped_msg, CP_FLD_TERM, msgtype, CP_FLD_TERM, CP_MSG_MARKUP | CP_MSG_EMOTICON
 	);
@@ -831,14 +832,14 @@
 	int				datalen;
 	unsigned int	i;
 
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%i",		/* "ms="mxitid\1nr_attributes */
 								( username ? username : "" ), CP_FLD_TERM, nr_attrib
 	);
 
 	/* add attributes */
 	for ( i = 0; i < nr_attrib; i++ )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_EXTPROFILE_GET );
@@ -864,7 +865,7 @@
 		parts = g_strsplit( attributes, "\01", 1 + ( nr_attrib * 3 ) );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%i",	/* "ms"=password\1nr_attibutes  */
 								( password ) ? password : "", CP_FLD_TERM, nr_attrib
 	);
@@ -876,7 +877,7 @@
 			g_strfreev( parts );
 			return;
 		}
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen,
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen,
 								"%c%s%c%s%c%s",		/* \1name\1type\1value  */
 								CP_FLD_TERM, parts[i], CP_FLD_TERM, parts[i + 1], CP_FLD_TERM, parts[i + 2] );
 	}
@@ -904,13 +905,13 @@
 	unsigned int	i;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%i%c%s%c%i%c%i%c%i",	/* inputType \1 input \1 maxSuggestions \1 startIndex \1 numAttributes \1 name0 \1 name1 ... \1 nameN */
 								CP_SUGGEST_FRIENDS, CP_FLD_TERM, "", CP_FLD_TERM, max, CP_FLD_TERM, 0, CP_FLD_TERM, nr_attrib );
 
 	/* add attributes */
 	for ( i = 0; i < nr_attrib; i++ )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_SUGGESTCONTACTS );
@@ -933,13 +934,13 @@
 	unsigned int	i;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%i%c%s%c%i%c%i%c%i",	/* inputType \1 input \1 maxSuggestions \1 startIndex \1 numAttributes \1 name0 \1 name1 ... \1 nameN */
 								CP_SUGGEST_SEARCH, CP_FLD_TERM, text, CP_FLD_TERM, max, CP_FLD_TERM, 0, CP_FLD_TERM, nr_attrib );
 
 	/* add attributes */
 	for ( i = 0; i < nr_attrib; i++ )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, attribute[i] );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_SUGGESTCONTACTS );
@@ -959,14 +960,14 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%i%c",					/* "ms"=show\1status */
 								presence, CP_FLD_TERM
 	);
 
 	/* append status message (if one is set) */
 	if ( statusmsg )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%s", statusmsg );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%s", statusmsg );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_STATUS );
@@ -985,7 +986,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%i",	/* "ms"=mood */
 								mood
 	);
@@ -1011,7 +1012,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%s%c%i%c%s%c%i",	/* "ms"=group \1 username \1 alias \1 type \1 msg \1 isuserid */
 								groupname, CP_FLD_TERM, username, CP_FLD_TERM, alias,
 								CP_FLD_TERM, MXIT_TYPE_MXIT, CP_FLD_TERM,
@@ -1036,7 +1037,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s",	/* "ms"=username */
 								username
 	);
@@ -1059,7 +1060,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%s",	/* "ms"=username\1group\1alias */
 								username, CP_FLD_TERM, "", CP_FLD_TERM, alias
 	);
@@ -1082,14 +1083,14 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s",	/* "ms"=username */
 								username
 	);
 
 	/* append reason (if one is set) */
 	if ( reason )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, reason );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, reason );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_DENY );
@@ -1110,7 +1111,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%s",	/* "ms"=groupname\1username\1alias */
 								groupname, CP_FLD_TERM, username, CP_FLD_TERM, alias
 	);
@@ -1132,7 +1133,7 @@
 	int			datalen;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s",	/* "ms"=splashId */
 								splashid
 	);
@@ -1158,7 +1159,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_msgevent: to=%s id=%s event=%i\n", to, id, event );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i",		/* "ms"=contactAddress \1 id \1 event */
 								to, CP_FLD_TERM, id, CP_FLD_TERM, event
 	);
@@ -1183,14 +1184,14 @@
 	int			i;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%i",	/* "ms"=roomname\1nr_jids\1jid0\1..\1jidN */
 								groupname, CP_FLD_TERM, nr_usernames
 	);
 
 	/* add usernames */
 	for ( i = 0; i < nr_usernames; i++ )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, usernames[i] );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, usernames[i] );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_GRPCHAT_CREATE );
@@ -1212,14 +1213,14 @@
 	int			i;
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ),
+	datalen = g_snprintf( data, sizeof( data ),
 								"ms=%s%c%i",	/* "ms"=roomid\1nr_jids\1jid0\1..\1jidN */
 								roomid, CP_FLD_TERM, nr_usernames
 	);
 
 	/* add usernames */
 	for ( i = 0; i < nr_usernames; i++ )
-		datalen += snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, usernames[i] );
+		datalen += g_snprintf( data + datalen, sizeof( data ) - datalen, "%c%s", CP_FLD_TERM, usernames[i] );
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_GRPCHAT_INVITE );
@@ -1245,7 +1246,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "SENDING FILE '%s' of %i bytes to user '%s'\n", filename, buflen, username );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1281,7 +1282,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_reject\n" );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1319,7 +1320,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_accept\n" );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1355,7 +1356,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_send_file_received\n" );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1392,7 +1393,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_set_avatar: %i bytes\n", avatarlen );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1431,7 +1432,7 @@
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_avatar: %s\n", mxitId );
 
 	/* convert the packet to a byte stream */
-	datalen = snprintf( data, sizeof( data ), "ms=" );
+	datalen = g_snprintf( data, sizeof( data ), "ms=" );
 
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
@@ -1878,11 +1879,11 @@
 		}
 		else if ( strcmp( CP_PROFILE_FLAGS, fname ) == 0 ) {
 			/* profile flags */
-			profile->flags = strtoll( fvalue, NULL, 10 );
+			profile->flags = g_ascii_strtoll( fvalue, NULL, 10 );
 		}
 		else if ( strcmp( CP_PROFILE_LASTSEEN, fname ) == 0 ) {
 			/* last seen online */
-			profile->lastonline = strtoll( fvalue, NULL, 10 );
+			profile->lastonline = g_ascii_strtoll( fvalue, NULL, 10 );
 		}
 		else if ( strcmp( CP_PROFILE_WHEREAMI, fname ) == 0 ) {
 			/* where am I */
@@ -2061,7 +2062,7 @@
 	int event;
 
 	/*
-	 * contactAddress \1 dateTime \1 id \1 event 
+	 * contactAddress \1 dateTime \1 id \1 event
 	 */
 
 	/* strip off dummy domain */
@@ -2880,7 +2881,7 @@
 	/* cancel all outstanding async calls */
 	while ( session->async_calls ) {
 		purple_util_fetch_url_cancel( session->async_calls->data );
-		session->async_calls = g_slist_delete_link(session->async_calls, session->async_calls);
+		session->async_calls = g_slist_delete_link( session->async_calls, session->async_calls );
 	}
 
 	/* remove the input cb function */

mercurial