Mercurial > pidgin
changeset 1754:6e51e206a388
[gaim-migrate @ 1764]
URL decoding in the MSN stuff. Yay.
committer: Tailor Script <tailor@pidgin.im>
author | Rob Flynn <gaim@robflynn.com> |
---|---|
date | Thu, 26 Apr 2001 22:15:46 +0000 |
parents | ee578ccaa5f1 |
children | 300dcb2aa120 |
files | ChangeLog plugins/msn/msn.c |
diffstat | 2 files changed, 71 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Apr 26 01:51:19 2001 +0000 +++ b/ChangeLog Thu Apr 26 22:15:46 2001 +0000 @@ -14,8 +14,9 @@ (thanks Neil Sanchala) * Some perl updates (thanks to Sean Egan) * IRC got the following slash commands: - op, deop, voice, devoice, mode, raw, quote, and kick (thanks + op, deop, voice, devoice, mode, raw, quote, and kick (thanks to Sean Egan) + * MSN Properly handles URL decoding of 'friendly' names version 0.11.0-pre10 (04/13/2001): * Many, many bug fixes
--- a/plugins/msn/msn.c Thu Apr 26 01:51:19 2001 +0000 +++ b/plugins/msn/msn.c Thu Apr 26 22:15:46 2001 +0000 @@ -106,6 +106,73 @@ void msn_des_win(GtkWidget *a, GtkWidget *b); void msn_newmail_dialog(const char *text); +char tochar(char *h) +{ + char alphabet[] = "0123456789abcdef"; + char tmp; + char b; + int v = 0; + int i; + + for (i = strlen(h); i > 0; i--) + { + tmp = tolower(h[strlen(h) - i]); + + if (tmp >= '0' && tmp <= '9') + b = tmp - '0'; + else if (tmp >= 'a' && tmp <= 'f') + b = (tmp - 'a') + 10; + + if (i > 1) + v =+ ((i-1) * 16) * b; + else + v += b; + } + + return v; +} + +char *url_decode(char *text) +{ + static char newtext[MSN_BUF_LEN]; + char *buf; + int c = 0; + int i = 0; + int j = 0; + + for (i = 0; i < strlen(text); i++) + { + if (text[i] == '%') + c++; + } + + buf = (char *)malloc(strlen(text) + c + 1); + + for (i = 0, j = 0 ; text[i] != 0; i++) + { + if (text[i] != '%') + { + buf[j++] = text[i]; + } + else + { + char hex[3]; + hex[0] = text[++i]; + hex[1] = text[++i]; + hex[2] = 0; + + buf[j++] = tochar(hex); + } + } + + for (i = 0; i < strlen(buf); i++) + newtext[i] = buf[i]; + + free(buf); + + return newtext; +} + void msn_accept_add_permit(gpointer w, struct msn_ask_add_permit *ap) { msn_add_permit(ap->gc, ap->user); @@ -227,7 +294,7 @@ snprintf(buf, MSN_BUF_LEN, "The user %s (%s) wants to add you to their buddylist.", res[4], res[5]); ap->user = g_strdup(res[4]); - ap->friendly = g_strdup(res[5]); + ap->friendly = url_decode(res[5]); ap->gc = gc; do_ask_dialog(buf, ap, (GtkFunction) msn_accept_add_permit, (GtkFunction) msn_cancel_add_permit); @@ -767,7 +834,7 @@ } else { - md->friendly = g_strdup(res[4]); + md->friendly = url_decode(res[4]); /* Ok, ok. Your account is FINALLY online. Ya think Microsoft * could have had any more steps involved? */