pidgin.mxit: aaee2d99: Structured reply messages should rather ...
andrew.victor at mxit.com
andrew.victor at mxit.com
Sat Aug 13 18:05:48 EDT 2011
----------------------------------------------------------------------
Revision: aaee2d99cc08c2b99d8829ed7b6875ac85324d87
Parent: 0277aa1f960a0348a5696381da98307525be8b53
Author: andrew.victor at mxit.com
Date: 08/13/11 12:29:21
Branch: im.pidgin.pidgin.mxit
URL: http://d.pidgin.im/viewmtn/revision/info/aaee2d99cc08c2b99d8829ed7b6875ac85324d87
Changelog:
Structured reply messages should rather not be enclosed in the ::DATA: format.
For links, also indicate if the reply message is in a structured format rather than the
callback having to try and guess based on the first new bytes of the message.
Changes against parent 0277aa1f960a0348a5696381da98307525be8b53
patched libpurple/protocols/mxit/formcmds.c
patched libpurple/protocols/mxit/markup.c
patched libpurple/protocols/mxit/markup.h
patched libpurple/protocols/mxit/mxit.c
-------------- next part --------------
============================================================
--- libpurple/protocols/mxit/formcmds.c cdc2c671161a59d653ff574e2f8ef7bd29f29e21
+++ libpurple/protocols/mxit/formcmds.c 8888c7bc15e7758d2c8fbe9e7a00d214621c08b1
@@ -253,8 +253,8 @@ static void command_clear(struct MXitSes
/*------------------------------------------------------------------------
* Process a Reply MXit command.
- * [::op=cmd|type=reply|replymsg=back|selmsg=b) Back|id=12345:]
- * [::op=cmd|nm=rep|type=reply|replymsg=back|selmsg=b) Back|id=12345:]
+ * [::op=cmd|type=reply|replymsg=back|selmsg=b) Back|displaymsg=Processing|id=12345:]
+ * [::op=cmd|nm=rep|type=reply|replymsg=back|selmsg=b) Back|displaymsg=Processing|id=12345:]
*
* @param mx The received message data object
* @param hash The MXit command <key,value> map
@@ -265,22 +265,26 @@ static void command_reply(struct RXMsgDa
char* selmsg;
char* nm;
- selmsg = g_hash_table_lookup(hash, "selmsg"); /* find the selection message */
- replymsg = g_hash_table_lookup(hash, "replymsg"); /* find the reply message */
+ selmsg = g_hash_table_lookup(hash, "selmsg"); /* selection message */
+ replymsg = g_hash_table_lookup(hash, "replymsg"); /* reply message */
nm = g_hash_table_lookup(hash, "nm"); /* name parameter */
- if ((selmsg) && (replymsg) && (nm)) {
+
+ if ((selmsg == NULL) || (replymsg == NULL))
+ return; /* these parameters are required */
+
+ if (nm) { /* indicates response must be a structured response */
gchar* seltext = g_markup_escape_text(purple_url_decode(selmsg), -1);
- gchar* replycmd = g_strdup_printf("::type=reply|nm=%s|res=%s|err=0:", nm, replymsg);
+ gchar* replycmd = g_strdup_printf("type=reply|nm=%s|res=%s|err=0", nm, replymsg);
- mxit_add_html_link( mx, replycmd, seltext );
+ mxit_add_html_link( mx, replycmd, TRUE, seltext );
g_free(seltext);
g_free(replycmd);
}
- else if ((selmsg) && (replymsg)) {
+ else {
gchar* seltext = g_markup_escape_text(purple_url_decode(selmsg), -1);
- mxit_add_html_link( mx, purple_url_decode(replymsg), seltext );
+ mxit_add_html_link( mx, purple_url_decode(replymsg), FALSE, seltext );
g_free(seltext);
}
@@ -317,6 +321,7 @@ static void command_platformreq(GHashTab
/*------------------------------------------------------------------------
* Process an inline image MXit command.
+ * [::op=img|dat=ASDF23408asdflkj2309flkjsadf%3d%3d|algn=1|w=120|h=12|t=100|replymsg=text:]
*
* @param mx The received message data object
* @param hash The MXit command <key,value> map
@@ -372,7 +377,7 @@ static void command_image(struct RXMsgDa
reply = g_hash_table_lookup(hash, "replymsg");
if (reply) {
g_string_append_printf(msg, "\n");
- mxit_add_html_link(mx, reply, _( "click here" ));
+ mxit_add_html_link(mx, reply, FALSE, _( "click here" ));
}
}
============================================================
--- libpurple/protocols/mxit/markup.c ad61ab39393434666fa7d2b980223083179e773f
+++ libpurple/protocols/mxit/markup.c 645b4601bfae8c09b0028bc145e940d6ab7905a9
@@ -124,10 +124,11 @@ static void hex_dump( const char* buf, i
* Adds a link to a message
*
* @param mx The Markup message object
- * @param linkname This is the what will be returned when the link gets clicked
- * @param displayname This is the name for the link which will be displayed in the UI
+ * @param replydata This is the what will be returned when the link gets clicked
+ * @param isStructured Indicates that the reply is a structured reply
+ * @param displaytext This is the text for the link which will be displayed in the UI
*/
-void mxit_add_html_link( struct RXMsgData* mx, const char* linkname, const char* displayname )
+void mxit_add_html_link( struct RXMsgData* mx, const char* replydata, gboolean isStructured, const char* displaytext )
{
#ifdef MXIT_LINK_CLICK
char retstr[256];
@@ -135,15 +136,24 @@ void mxit_add_html_link( struct RXMsgDat
char link[256];
int len;
- len = g_snprintf( retstr, sizeof( retstr ), "%s|%s|%s|%s|%s", MXIT_LINK_KEY, purple_account_get_username( mx->session->acc ),
- purple_account_get_protocol_id( mx->session->acc ), mx->from, linkname );
+ /*
+ * The link content is encoded as follows:
+ * MXIT_LINK_KEY | ACCOUNT_USER | ACCOUNT_PROTO | REPLY_TO | REPLY_FORMAT | REPLY_DATA
+ */
+ len = g_snprintf( retstr, sizeof( retstr ), "%s|%s|%s|%s|%i|%s",
+ MXIT_LINK_KEY,
+ purple_account_get_username( mx->session->acc ),
+ purple_account_get_protocol_id( mx->session->acc ),
+ mx->from,
+ isStructured ? 1 : 0,
+ replydata );
retstr64 = purple_base64_encode( (const unsigned char*) retstr, len );
g_snprintf( link, sizeof( link ), "%s%s", MXIT_LINK_PREFIX, retstr64 );
g_free( retstr64 );
- g_string_append_printf( mx->msg, "<a href=\"%s\">%s</a>", link, displayname );
+ g_string_append_printf( mx->msg, "<a href=\"%s\">%s</a>", link, displaytext );
#else
- g_string_append_printf( mx->msg, "<b>%s</b>", linkname );
+ g_string_append_printf( mx->msg, "<b>%s</b>", replydata );
#endif
}
@@ -824,7 +834,7 @@ void mxit_parse_markup( struct RXMsgData
if ( ch ) {
/* end found */
*ch = '\0';
- mxit_add_html_link( mx, &message[i + 1], &message[i + 1] );
+ mxit_add_html_link( mx, &message[i + 1], FALSE, &message[i + 1] );
*ch = '$';
i += ( ch - &message[i + 1] ) + 1;
}
============================================================
--- libpurple/protocols/mxit/markup.h 79037138e25a7fc9488ea4134f52e070a4743b0f
+++ libpurple/protocols/mxit/markup.h ff2f748c80a33bbddcbc23ef2d8f8b3a7f701950
@@ -31,7 +31,7 @@ char* mxit_convert_markup_tx( const char
void mxit_parse_markup( struct RXMsgData* mx, char* message, int len, short msgtype, int msgflags );
char* mxit_convert_markup_tx( const char* message, int* msgtype );
-void mxit_add_html_link( struct RXMsgData* mx, const char* linkname, const char* displayname );
+void mxit_add_html_link( struct RXMsgData* mx, const char* replydata, gboolean isStructured, const char* displaytext );
void mxit_show_message( struct RXMsgData* mx );
void mxit_free_emoticon_cache( struct MXitSession* session );
============================================================
--- libpurple/protocols/mxit/mxit.c 0484144a2c480b0846f0727327a4b27f0b07230f
+++ libpurple/protocols/mxit/mxit.c 40de980694fc1b075d9672acffe6923e8fde039c
@@ -75,10 +75,10 @@ static void* mxit_link_click( const char
link = (gchar*) purple_base64_decode( link64 + strlen( MXIT_LINK_PREFIX ), &len );
purple_debug_info( MXIT_PLUGIN_ID, "Clicked Link: '%s'\n", link );
- parts = g_strsplit( link, "|", 5 );
+ parts = g_strsplit( link, "|", 6 );
/* check if this is a valid mxit link */
- if ( ( !parts ) || ( !parts[0] ) || ( !parts[1] ) || ( !parts[2] ) || ( !parts[3] ) || ( !parts[4] ) ) {
+ if ( ( !parts ) || ( !parts[0] ) || ( !parts[1] ) || ( !parts[2] ) || ( !parts[3] ) || ( !parts[4] ) || ( !parts[5] ) ) {
/* this is not for us */
goto skip;
}
@@ -96,10 +96,10 @@ static void* mxit_link_click( const char
goto skip;
/* determine if it's a command-response to send */
- is_command = g_str_has_prefix( parts[4], "::type=reply|" );
+ is_command = ( atoi( parts[4] ) == 1 );
/* send click message back to MXit */
- mxit_send_message( con->proto_data, parts[3], parts[4], FALSE, is_command );
+ mxit_send_message( con->proto_data, parts[3], parts[5], FALSE, is_command );
g_free( link );
link = NULL;
More information about the Commits
mailing list