Sun, 30 Jul 2006 13:44:34 +0000
[gaim-migrate @ 16600]
change to add SOAP HTTP header retrieve
Now Can do the OIM Message XML process
submitted by Ma Yuan<mayuan2006@gmail.com>
committer: Ethan Blanton <elb@pidgin.im>
| 5309 | 1 | /** |
|
13628
77a85ddf2205
[gaim-migrate @ 16014]
Evan Schoenberg <evands@pidgin.im>
parents:
12410
diff
changeset
|
2 | * @file msn-utils.c Utility functions |
| 5309 | 3 | * |
| 4 | * gaim | |
| 5 | * | |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
6 | * Gaim is the legal property of its developers, whose names are too numerous |
|
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
8 | * source distribution. |
|
6701
7e2db9273748
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
6359
diff
changeset
|
9 | * |
| 5309 | 10 | * This program is free software; you can redistribute it and/or modify |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
| 22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 | */ | |
| 24 | #include "msn.h" | |
|
13628
77a85ddf2205
[gaim-migrate @ 16014]
Evan Schoenberg <evands@pidgin.im>
parents:
12410
diff
changeset
|
25 | #include "msn-utils.h" |
| 13855 | 26 | //#include <openssl/md5.h> |
| 5309 | 27 | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
28 | void |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
29 | msn_parse_format(const char *mime, char **pre_ret, char **post_ret) |
| 5309 | 30 | { |
| 31 | char *cur; | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
32 | GString *pre = g_string_new(NULL); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
33 | GString *post = g_string_new(NULL); |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
34 | unsigned int colors[3]; |
| 5309 | 35 | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
36 | if (pre_ret != NULL) *pre_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
37 | if (post_ret != NULL) *post_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
38 | |
| 5309 | 39 | cur = strstr(mime, "FN="); |
| 40 | ||
| 8518 | 41 | if (cur && (*(cur = cur + 3) != ';')) |
| 42 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
43 | pre = g_string_append(pre, "<FONT FACE=\""); |
| 5309 | 44 | |
| 8518 | 45 | while (*cur && *cur != ';') |
| 46 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
47 | pre = g_string_append_c(pre, *cur); |
| 5309 | 48 | cur++; |
| 49 | } | |
| 50 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
51 | pre = g_string_append(pre, "\">"); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
52 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 53 | } |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
54 | |
| 5309 | 55 | cur = strstr(mime, "EF="); |
| 56 | ||
| 8518 | 57 | if (cur && (*(cur = cur + 3) != ';')) |
| 58 | { | |
| 59 | while (*cur && *cur != ';') | |
| 60 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
61 | pre = g_string_append_c(pre, '<'); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
62 | pre = g_string_append_c(pre, *cur); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
63 | pre = g_string_append_c(pre, '>'); |
| 8691 | 64 | post = g_string_prepend_c(post, '>'); |
| 65 | post = g_string_prepend_c(post, *cur); | |
| 66 | post = g_string_prepend_c(post, '/'); | |
| 67 | post = g_string_prepend_c(post, '<'); | |
| 5309 | 68 | cur++; |
| 69 | } | |
| 70 | } | |
| 71 | ||
| 72 | cur = strstr(mime, "CO="); | |
| 73 | ||
| 8518 | 74 | if (cur && (*(cur = cur + 3) != ';')) |
| 75 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
76 | int i; |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
77 | |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
78 | i = sscanf(cur, "%02x%02x%02x;", &colors[0], &colors[1], &colors[2]); |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
79 | |
| 8518 | 80 | if (i > 0) |
| 81 | { | |
| 5309 | 82 | char tag[64]; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
83 | |
| 8518 | 84 | if (i == 1) |
| 85 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
86 | colors[1] = 0; |
| 8518 | 87 | colors[2] = 0; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
88 | } |
| 8518 | 89 | else if (i == 2) |
| 90 | { | |
| 91 | unsigned int temp = colors[0]; | |
| 92 | ||
| 93 | colors[0] = colors[1]; | |
| 94 | colors[1] = temp; | |
| 95 | colors[2] = 0; | |
| 96 | } | |
| 97 | else if (i == 3) | |
| 98 | { | |
| 99 | unsigned int temp = colors[2]; | |
| 100 | ||
| 101 | colors[2] = colors[0]; | |
| 102 | colors[0] = temp; | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
103 | } |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
104 | |
| 5309 | 105 | g_snprintf(tag, sizeof(tag), |
| 106 | "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">", | |
| 8518 | 107 | colors[0], colors[1], colors[2]); |
| 108 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
109 | pre = g_string_append(pre, tag); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
110 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 111 | } |
| 112 | } | |
| 113 | ||
| 7134 | 114 | cur = g_strdup(gaim_url_decode(pre->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
115 | g_string_free(pre, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
116 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
117 | if (pre_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
118 | *pre_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
119 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
120 | g_free(cur); |
| 5309 | 121 | |
| 7134 | 122 | cur = g_strdup(gaim_url_decode(post->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
123 | g_string_free(post, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
124 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
125 | if (post_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
126 | *post_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
127 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
128 | g_free(cur); |
| 5309 | 129 | } |
| 8518 | 130 | |
| 131 | /* | |
| 132 | * We need this because we're only supposed to encode spaces in the font | |
| 133 | * names. gaim_url_encode() isn't acceptable. | |
| 134 | */ | |
|
11897
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11176
diff
changeset
|
135 | static const char * |
| 8518 | 136 | encode_spaces(const char *str) |
| 137 | { | |
| 138 | static char buf[BUF_LEN]; | |
| 139 | const char *c; | |
| 140 | char *d; | |
| 141 | ||
| 142 | g_return_val_if_fail(str != NULL, NULL); | |
| 143 | ||
| 144 | for (c = str, d = buf; *c != '\0'; c++) | |
| 145 | { | |
| 146 | if (*c == ' ') | |
| 147 | { | |
| 148 | *d++ = '%'; | |
| 149 | *d++ = '2'; | |
| 150 | *d++ = '0'; | |
| 151 | } | |
| 152 | else | |
| 153 | *d++ = *c; | |
| 154 | } | |
| 155 | ||
| 156 | return buf; | |
| 157 | } | |
| 158 | ||
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
159 | /* |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
160 | * Taken from the zephyr plugin. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
161 | * This parses HTML formatting (put out by one of the gtkimhtml widgets |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
162 | * and converts it to msn formatting. It doesn't deal with the tag closing, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
163 | * but gtkimhtml widgets give valid html. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
164 | * It currently deals properly with <b>, <u>, <i>, <font face=...>, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
165 | * <font color=...>. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
166 | * It ignores <font back=...> and <font size=...> |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
167 | */ |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
168 | void |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
169 | msn_import_html(const char *html, char **attributes, char **message) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
170 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
171 | int len, retcount = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
172 | const char *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
173 | char *msg; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
174 | char *fontface = NULL; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
175 | char fonteffect[4]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
176 | char fontcolor[7]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
177 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
178 | g_return_if_fail(html != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
179 | g_return_if_fail(attributes != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
180 | g_return_if_fail(message != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
181 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
182 | len = strlen(html); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
183 | msg = g_malloc0(len + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
184 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
185 | memset(fontcolor, 0, sizeof(fontcolor)); |
|
10093
e22f76d46b0b
[gaim-migrate @ 11111]
Evan Schoenberg <evands@pidgin.im>
parents:
10041
diff
changeset
|
186 | strcat(fontcolor, "0"); |
|
10041
79adc9cc8e84
[gaim-migrate @ 11000]
Mark Doliner <markdoliner@pidgin.im>
parents:
9331
diff
changeset
|
187 | memset(fonteffect, 0, sizeof(fonteffect)); |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
188 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
189 | for (c = html; *c != '\0';) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
190 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
191 | if (*c == '<') |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
192 | { |
|
8923
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
193 | if (!g_ascii_strncasecmp(c + 1, "br>", 3)) |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
194 | { |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
195 | msg[retcount++] = '\r'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
196 | msg[retcount++] = '\n'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
197 | c += 4; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
198 | } |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
199 | else if (!g_ascii_strncasecmp(c + 1, "i>", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
200 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
201 | strcat(fonteffect, "I"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
202 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
203 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
204 | else if (!g_ascii_strncasecmp(c + 1, "b>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
205 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
206 | strcat(fonteffect, "B"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
207 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
208 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
209 | else if (!g_ascii_strncasecmp(c + 1, "u>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
210 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
211 | strcat(fonteffect, "U"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
212 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
213 | } |
|
10274
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
214 | else if (!g_ascii_strncasecmp(c + 1, "s>", 2)) |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
215 | { |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
216 | strcat(fonteffect, "S"); |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
217 | c += 3; |
|
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
218 | } |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
219 | else if (!g_ascii_strncasecmp(c + 1, "a href=\"", 8)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
220 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
221 | c += 9; |
|
10274
f329b1d7fd43
[gaim-migrate @ 11424]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10093
diff
changeset
|
222 | |
| 9331 | 223 | if (!g_ascii_strncasecmp(c, "mailto:", 7)) |
| 224 | c += 7; | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
225 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
226 | while ((*c != '\0') && g_ascii_strncasecmp(c, "\">", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
227 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
228 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
229 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
230 | c += 2; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
231 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
232 | /* ignore descriptive string */ |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
233 | while ((*c != '\0') && g_ascii_strncasecmp(c, "</a>", 4)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
234 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
235 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
236 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
237 | c += 4; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
238 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
239 | else if (!g_ascii_strncasecmp(c + 1, "font", 4)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
240 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
241 | c += 5; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
242 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
243 | while ((*c != '\0') && !g_ascii_strncasecmp(c, " ", 1)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
244 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
245 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
246 | if (!g_ascii_strncasecmp(c, "color=\"#", 7)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
247 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
248 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
249 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
250 | fontcolor[0] = *(c + 4); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
251 | fontcolor[1] = *(c + 5); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
252 | fontcolor[2] = *(c + 2); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
253 | fontcolor[3] = *(c + 3); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
254 | fontcolor[4] = *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
255 | fontcolor[5] = *(c + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
256 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
257 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
258 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
259 | else if (!g_ascii_strncasecmp(c, "face=\"", 6)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
260 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
261 | const char *end = NULL; |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
262 | const char *comma = NULL; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
263 | unsigned int namelen = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
264 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
265 | c += 6; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
266 | end = strchr(c, '\"'); |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
267 | comma = strchr(c, ','); |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
268 | |
|
9090
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
269 | if (comma == NULL || comma > end) |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
270 | namelen = (unsigned int)(end - c); |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
271 | else |
|
2c7655380bf5
[gaim-migrate @ 9867]
Christian Hammond <chipx86@chipx86.com>
parents:
8923
diff
changeset
|
272 | namelen = (unsigned int)(comma - c); |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
273 | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
274 | fontface = g_strndup(c, namelen); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
275 | c = end + 2; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
276 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
277 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
278 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
279 | /* Drop all unrecognized/misparsed font tags */ |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
280 | while ((*c != '\0') && g_ascii_strncasecmp(c, "\">", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
281 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
282 | |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
283 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
284 | c += 2; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
285 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
286 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
287 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
288 | { |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
289 | while ((*c != '\0') && (*c != '>')) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
290 | c++; |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
291 | if (*c != '\0') |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10274
diff
changeset
|
292 | c++; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
293 | } |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
294 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
295 | else if (*c == '&') |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
296 | { |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
297 | if (!g_ascii_strncasecmp(c, "<", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
298 | { |
| 8678 | 299 | msg[retcount++] = '<'; |
| 300 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
301 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
302 | else if (!g_ascii_strncasecmp(c, ">", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
303 | { |
| 8678 | 304 | msg[retcount++] = '>'; |
| 305 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
306 | } |
|
9264
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
307 | else if (!g_ascii_strncasecmp(c, " ", 6)) |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
308 | { |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
309 | msg[retcount++] = ' '; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
310 | c += 6; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
311 | } |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
312 | else if (!g_ascii_strncasecmp(c, """, 6)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
313 | { |
| 8678 | 314 | msg[retcount++] = '"'; |
| 315 | c += 6; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
316 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
317 | else if (!g_ascii_strncasecmp(c, "&", 5)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
318 | { |
| 8678 | 319 | msg[retcount++] = '&'; |
| 320 | c += 5; | |
| 321 | } | |
|
9264
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
322 | else if (!g_ascii_strncasecmp(c, "'", 6)) |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
323 | { |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
324 | msg[retcount++] = '\''; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
325 | c += 6; |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
326 | } |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
327 | else |
|
082e824358cf
[gaim-migrate @ 10063]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9198
diff
changeset
|
328 | msg[retcount++] = *c++; |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
329 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
330 | else |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
331 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
332 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
333 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
334 | if (fontface == NULL) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
335 | fontface = g_strdup("MS Sans Serif"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
336 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
337 | *attributes = g_strdup_printf("FN=%s; EF=%s; CO=%s; PF=0", |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
338 | encode_spaces(fontface), |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
339 | fonteffect, fontcolor); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
340 | *message = g_strdup(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
341 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
342 | g_free(fontface); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
343 | g_free(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
344 | } |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
345 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
346 | void |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
347 | msn_parse_socket(const char *str, char **ret_host, int *ret_port) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
348 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
349 | char *host; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
350 | char *c; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
351 | int port; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
352 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
353 | host = g_strdup(str); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
354 | |
| 13854 | 355 | if ((c = strchr(host, ':')) != NULL){ |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
356 | *c = '\0'; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
357 | port = atoi(c + 1); |
| 13854 | 358 | }else{ |
| 359 | port = 1863; | |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
360 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
361 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
362 | *ret_host = host; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
363 | *ret_port = port; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9090
diff
changeset
|
364 | } |
| 13854 | 365 | |
| 13855 | 366 | /*check the edian of system*/ |
| 367 | int | |
| 368 | isBigEndian(void) | |
| 369 | { | |
| 370 | short int word = 0x0100; | |
| 371 | char *byte = (char *)&word; | |
| 372 | ||
| 373 | return(byte[0]); | |
| 374 | } | |
| 375 | ||
| 376 | /*swap utility*/ | |
| 377 | unsigned int | |
| 378 | swapInt(unsigned int dw) | |
| 379 | { | |
| 380 | unsigned int tmp; | |
| 381 | tmp = (dw & 0x000000FF); | |
| 382 | tmp = ((dw & 0x0000FF00) >> 0x08) | (tmp << 0x08); | |
| 383 | tmp = ((dw & 0x00FF0000) >> 0x10) | (tmp << 0x08); | |
| 384 | tmp = ((dw & 0xFF000000) >> 0x18) | (tmp << 0x08); | |
| 385 | return(tmp); | |
| 386 | } | |
| 387 | ||
| 388 | /* | |
| 13858 | 389 | * Handle MSN Chanllege computation |
| 13855 | 390 | *This algorithm reference with http://msnpiki.msnfanatic.com/index.php/MSNP11:Challenges |
| 391 | */ | |
| 392 | #define BUFSIZE 256 | |
| 393 | void | |
| 394 | msn_handle_chl(char *input, char *output) | |
| 395 | { | |
| 396 | GaimCipher *cipher; | |
| 397 | GaimCipherContext *context; | |
| 398 | char *productKey = MSNP13_WLM_PRODUCT_KEY, | |
| 399 | *productID = MSNP13_WLM_PRODUCT_ID, | |
| 400 | *hexChars = "0123456789abcdef", | |
| 401 | buf[BUFSIZE]; | |
| 402 | unsigned char md5Hash[16], *newHash; | |
| 403 | unsigned int *md5Parts, *chlStringParts, newHashParts[5]; | |
| 404 | ||
| 405 | long long nHigh=0, nLow=0; | |
| 406 | ||
| 407 | int i, bigEndian; | |
| 408 | ||
| 409 | /* Determine our endianess */ | |
| 410 | bigEndian = isBigEndian(); | |
| 411 | ||
| 412 | /* Create the MD5 hash by using Gaim MD5 algorithm*/ | |
| 413 | cipher = gaim_ciphers_find_cipher("md5"); | |
| 414 | context = gaim_cipher_context_new(cipher, NULL); | |
| 415 | ||
| 416 | gaim_cipher_context_append(context, (const guchar *)input, | |
| 417 | strlen(input)); | |
| 418 | gaim_cipher_context_append(context, (const guchar *)productKey, | |
| 419 | strlen(productKey)); | |
| 420 | gaim_cipher_context_digest(context, sizeof(md5Hash), md5Hash, NULL); | |
| 421 | gaim_cipher_context_destroy(context); | |
| 422 | ||
| 423 | /* Split it into four integers */ | |
| 424 | md5Parts = (unsigned int *)md5Hash; | |
| 425 | for(i=0; i<4; i++){ | |
| 426 | /* check for endianess */ | |
| 427 | if(bigEndian) | |
| 428 | md5Parts[i] = swapInt(md5Parts[i]); | |
| 429 | ||
| 430 | /* & each integer with 0x7FFFFFFF */ | |
| 431 | /* and save one unmodified array for later */ | |
| 432 | newHashParts[i] = md5Parts[i]; | |
| 433 | md5Parts[i] &= 0x7FFFFFFF; | |
| 434 | } | |
| 435 | ||
| 436 | /* make a new string and pad with '0' */ | |
| 437 | snprintf(buf, BUFSIZE-5, "%s%s", input, productID); | |
| 438 | i = strlen(buf); | |
| 439 | memset(&buf[i], '0', 8 - (i % 8)); | |
| 440 | buf[i + (8 - (i % 8))]='\0'; | |
| 441 | ||
| 442 | /* split into integers */ | |
| 443 | chlStringParts = (unsigned int *)buf; | |
| 444 | ||
| 445 | /* this is magic */ | |
| 446 | for (i=0; i<(strlen(buf)/4)-1; i+=2){ | |
| 447 | long long temp; | |
| 448 | ||
| 449 | if(bigEndian){ | |
| 450 | chlStringParts[i] = swapInt(chlStringParts[i]); | |
| 451 | chlStringParts[i+1] = swapInt(chlStringParts[i+1]); | |
| 452 | } | |
| 453 | ||
| 454 | temp=(md5Parts[0] * (((0x0E79A9C1 * (long long)chlStringParts[i]) % 0x7FFFFFFF)+nHigh) + md5Parts[1])%0x7FFFFFFF; | |
| 455 | nHigh=(md5Parts[2] * (((long long)chlStringParts[i+1]+temp) % 0x7FFFFFFF) + md5Parts[3]) % 0x7FFFFFFF; | |
| 456 | nLow=nLow + nHigh + temp; | |
| 457 | } | |
| 458 | nHigh=(nHigh+md5Parts[1]) % 0x7FFFFFFF; | |
| 459 | nLow=(nLow+md5Parts[3]) % 0x7FFFFFFF; | |
| 460 | ||
| 461 | newHashParts[0]^=nHigh; | |
| 462 | newHashParts[1]^=nLow; | |
| 463 | newHashParts[2]^=nHigh; | |
| 464 | newHashParts[3]^=nLow; | |
| 465 | ||
| 466 | /* swap more bytes if big endian */ | |
| 467 | for(i=0; i<4 && bigEndian; i++) | |
| 468 | newHashParts[i] = swapInt(newHashParts[i]); | |
| 469 | ||
| 470 | /* make a string of the parts */ | |
| 471 | newHash = (unsigned char *)newHashParts; | |
| 472 | ||
| 473 | /* convert to hexadecimal */ | |
| 474 | for (i=0; i<16; i++) | |
| 475 | { | |
| 476 | output[i*2]=hexChars[(newHash[i]>>4)&0xF]; | |
| 477 | output[(i*2)+1]=hexChars[newHash[i]&0xF]; | |
| 478 | } | |
| 479 | ||
| 480 | output[32]='\0'; | |
| 481 | ||
| 482 | // gaim_debug_info("MaYuan","chl output{%s}\n",output); | |
| 483 | } | |
| 484 |