--- 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 */