Mercurial > pidgin.yaz
diff libpurple/protocols/msn/slpcall.c @ 27374:a6d84d9de605
Add support for receiving handwritten (Ink) messages from MSN buddies.
Based on patch from notak and galt, but using imgstore instead of a custom
smiley (like AIM DirectIM), and with better error checking.
References #393.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Mon, 06 Jul 2009 04:37:06 +0000 |
parents | 14b927f45ec5 |
children | 35b6fd563056 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/slpcall.c Sun Jul 05 05:41:00 2009 +0000 +++ b/libpurple/protocols/msn/slpcall.c Mon Jul 06 04:37:06 2009 +0000 @@ -210,8 +210,51 @@ { char *body_str; - body_str = g_strndup((const char *)body, body_len); - slpcall = msn_slp_sip_recv(slplink, body_str); + if (slpmsg->session_id == 64) + { + /* This is for handwritten messages (Ink) */ + GError *error; + glong items_read, items_written; + + body_str = g_utf16_to_utf8((gunichar2 *)body, body_len / 2, + &items_read, &items_written, &error); + body_len -= items_read * 2 + 2; + body += items_read * 2 + 2; + if (body_str == NULL + || body_len <= 0 + || strstr(body_str, "image/gif") == NULL) + { + if (error != NULL) + purple_debug_error("msn", + "Unable to convert Ink header from UTF-16 to UTF-8: %s\n", + error->message); + else + purple_debug_error("msn", + "Received Ink in unknown format\n"); + g_free(body_str); + return NULL; + } + g_free(body_str); + + body_str = g_utf16_to_utf8((gunichar2 *)body, body_len / 2, + &items_read, &items_written, &error); + if (!body_str) + { + purple_debug_error("msn", + "Unable to convert Ink body from UTF-16 to UTF-8: %s\n", + error->message); + return NULL; + } + + msn_switchboard_show_ink(slpmsg->slplink->swboard, + slplink->remote_user, + body_str); + } + else + { + body_str = g_strndup((const char *)body, body_len); + slpcall = msn_slp_sip_recv(slplink, body_str); + } g_free(body_str); } else if (slpmsg->flags == 0x20 ||