Mercurial > pidgin
annotate src/protocols/msn/msn.c @ 5205:fefad67de2c7
[gaim-migrate @ 5573]
I had a damn good commit message, but it was eaten. Let's try it again.
Announcing, Gaim Plugin API version 2.0, or GPAPIV2.0 for short.
There are lots'a cool thingies here.
Okay now, this isn't as cool as the previous message, but:
1) There's now a single entry function for all plugin types. It returns a
detailed information structure on the plugin. This removes a lot of the
ugliness from old plugins. Oh yeah, libicq wasn't converted to this, so
if you use it, well, you shouldn't have used it anyway, but now you
can't! bwahahaha. Use AIM/ICQ.
2) There are now 3 types of plugins: Standard, Loader, and Protocol
plugins.
Standard plugins are, well, standard, compiled plugins.
Loader plugins load other plugins. For example, the perl support is now
a loader plugin. It loads perl scripts. In the future, we'll have
Ruby and Python loader plugins.
Protocol plugins are, well, protocol plugins... yeah...
3) Plugins have unique IDs, so they can be referred to or automatically
updated from a plugin database in the future. Neat, huh?
4) Plugins will have dependency support in the future, and can be hidden,
so if you have, say, a logging core plugin, it won't have to show up,
but then you load the GTK+ logging plugin and it'll auto-load the core
plugin. Core/UI split plugins!
5) There will eventually be custom plugin signals and RPC of some sort, for
the core/ui split plugins.
So, okay, back up .gaimrc.
I'd like to thank my parents for their support, javabsp for helping convert
a bunch of protocol plugins, and Etan for helping convert a bunch of
standard plugins.
Have fun. If you have any problems, please let me know, but you probably
won't have anything major happen. You will have to convert your plugins,
though, and I'm not guaranteeing that all perl scripts will still work.
I'll end up changing the perl script API eventually, so I know they won't
down the road. Don't worry, though. It'll be mass cool.
faceprint wants me to just commit the damn code already. So, here we go!!!
..
..
I need a massage. From a young, cute girl. Are there any young, cute girls
in the audience? IM me plz k thx.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 25 Apr 2003 06:47:33 +0000 |
parents | 092b418b5012 |
children | abe4d103e300 |
rev | line source |
---|---|
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
1 /** |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
2 * @file msn.c The MSN protocol plugin |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
3 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
4 * gaim |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
5 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
6 * Parts Copyright (C) 2003, Christian Hammond <chipx86@gnupdate.org> |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
7 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
8 * This program is free software; you can redistribute it and/or modify |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
11 * (at your option) any later version. |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
12 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
16 * GNU General Public License for more details. |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
17 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
21 * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
22 */ |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
23 #include "msn.h" |
3630 | 24 |
4546
a951bb590857
[gaim-migrate @ 4825]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4542
diff
changeset
|
25 #ifdef _WIN32 |
a951bb590857
[gaim-migrate @ 4825]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4542
diff
changeset
|
26 #include "win32dep.h" |
a951bb590857
[gaim-migrate @ 4825]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4542
diff
changeset
|
27 #endif |
a951bb590857
[gaim-migrate @ 4825]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4542
diff
changeset
|
28 |
4687 | 29 #define BUDDY_ALIAS_MAXLEN 388 |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
30 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
31 static GaimPlugin *my_protocol = NULL; |
4249 | 32 |
3630 | 33 /* for win32 compatability */ |
34 G_MODULE_IMPORT GSList *connections; | |
35 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
36 static void msn_login_callback(gpointer, gint, GaimInputCondition); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
37 static void msn_login_xfr_connect(gpointer, gint, GaimInputCondition); |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
38 |
2086 | 39 static char *msn_normalize(const char *s) |
40 { | |
41 static char buf[BUF_LEN]; | |
42 | |
43 g_return_val_if_fail(s != NULL, NULL); | |
44 | |
3504 | 45 g_snprintf(buf, sizeof(buf), "%s%s", s, strchr(s, '@') ? "" : "@hotmail.com"); |
2086 | 46 |
47 return buf; | |
48 } | |
49 | |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
50 char * |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
51 handle_errcode(char *buf, gboolean show) |
2086 | 52 { |
53 int errcode; | |
54 static char msg[MSN_BUF_LEN]; | |
55 | |
56 buf[4] = 0; | |
57 errcode = atoi(buf); | |
58 | |
59 switch (errcode) { | |
60 case 200: | |
3263 | 61 g_snprintf(msg, sizeof(msg), _("Syntax Error (probably a Gaim bug)")); |
2086 | 62 break; |
63 case 201: | |
3263 | 64 g_snprintf(msg, sizeof(msg), _("Invalid Parameter (probably a Gaim bug)")); |
2086 | 65 break; |
66 case 205: | |
3263 | 67 g_snprintf(msg, sizeof(msg), _("Invalid User")); |
2086 | 68 break; |
69 case 206: | |
3263 | 70 g_snprintf(msg, sizeof(msg), _("Fully Qualified Domain Name missing")); |
2086 | 71 break; |
72 case 207: | |
3263 | 73 g_snprintf(msg, sizeof(msg), _("Already Login")); |
2086 | 74 break; |
75 case 208: | |
3263 | 76 g_snprintf(msg, sizeof(msg), _("Invalid Username")); |
2086 | 77 break; |
78 case 209: | |
3263 | 79 g_snprintf(msg, sizeof(msg), _("Invalid Friendly Name")); |
2086 | 80 break; |
81 case 210: | |
3263 | 82 g_snprintf(msg, sizeof(msg), _("List Full")); |
2086 | 83 break; |
84 case 215: | |
3263 | 85 g_snprintf(msg, sizeof(msg), _("Already there")); |
2086 | 86 break; |
87 case 216: | |
3263 | 88 g_snprintf(msg, sizeof(msg), _("Not on list")); |
2086 | 89 break; |
2842
cf0f0153e2da
[gaim-migrate @ 2855]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
90 case 217: |
3263 | 91 g_snprintf(msg, sizeof(msg), _("User is offline")); |
2842
cf0f0153e2da
[gaim-migrate @ 2855]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
92 break; |
2086 | 93 case 218: |
3263 | 94 g_snprintf(msg, sizeof(msg), _("Already in the mode")); |
2086 | 95 break; |
96 case 219: | |
3263 | 97 g_snprintf(msg, sizeof(msg), _("Already in opposite list")); |
2086 | 98 break; |
99 case 280: | |
3263 | 100 g_snprintf(msg, sizeof(msg), _("Switchboard failed")); |
2086 | 101 break; |
102 case 281: | |
3263 | 103 g_snprintf(msg, sizeof(msg), _("Notify Transfer failed")); |
2086 | 104 break; |
105 | |
106 case 300: | |
3263 | 107 g_snprintf(msg, sizeof(msg), _("Required fields missing")); |
2086 | 108 break; |
109 case 302: | |
3263 | 110 g_snprintf(msg, sizeof(msg), _("Not logged in")); |
2086 | 111 break; |
112 | |
113 case 500: | |
3263 | 114 g_snprintf(msg, sizeof(msg), _("Internal server error")); |
2086 | 115 break; |
116 case 501: | |
3263 | 117 g_snprintf(msg, sizeof(msg), _("Database server error")); |
2086 | 118 break; |
119 case 510: | |
3263 | 120 g_snprintf(msg, sizeof(msg), _("File operation error")); |
2086 | 121 break; |
122 case 520: | |
3263 | 123 g_snprintf(msg, sizeof(msg), _("Memory allocation error")); |
2086 | 124 break; |
125 | |
126 case 600: | |
3263 | 127 g_snprintf(msg, sizeof(msg), _("Server busy")); |
2086 | 128 break; |
129 case 601: | |
3263 | 130 g_snprintf(msg, sizeof(msg), _("Server unavailable")); |
2086 | 131 break; |
132 case 602: | |
3263 | 133 g_snprintf(msg, sizeof(msg), _("Peer Notification server down")); |
2086 | 134 break; |
135 case 603: | |
3263 | 136 g_snprintf(msg, sizeof(msg), _("Database connect error")); |
2086 | 137 break; |
138 case 604: | |
3263 | 139 g_snprintf(msg, sizeof(msg), _("Server is going down (abandon ship)")); |
2086 | 140 break; |
141 | |
142 case 707: | |
3263 | 143 g_snprintf(msg, sizeof(msg), _("Error creating connection")); |
2086 | 144 break; |
145 case 711: | |
3263 | 146 g_snprintf(msg, sizeof(msg), _("Unable to write")); |
2086 | 147 break; |
148 case 712: | |
3263 | 149 g_snprintf(msg, sizeof(msg), _("Session overload")); |
2086 | 150 break; |
151 case 713: | |
3263 | 152 g_snprintf(msg, sizeof(msg), _("User is too active")); |
2086 | 153 break; |
154 case 714: | |
3263 | 155 g_snprintf(msg, sizeof(msg), _("Too many sessions")); |
2086 | 156 break; |
157 case 715: | |
3263 | 158 g_snprintf(msg, sizeof(msg), _("Not expected")); |
2086 | 159 break; |
160 case 717: | |
3263 | 161 g_snprintf(msg, sizeof(msg), _("Bad friend file")); |
2086 | 162 break; |
163 | |
164 case 911: | |
3263 | 165 g_snprintf(msg, sizeof(msg), _("Authentication failed")); |
2086 | 166 break; |
167 case 913: | |
3263 | 168 g_snprintf(msg, sizeof(msg), _("Not allowed when offline")); |
2086 | 169 break; |
3073 | 170 case 920: |
3263 | 171 g_snprintf(msg, sizeof(msg), _("Not accepting new users")); |
2086 | 172 break; |
3073 | 173 case 924: |
3263 | 174 g_snprintf(msg, sizeof(msg), _("User unverified")); |
3073 | 175 break; |
2086 | 176 default: |
3263 | 177 g_snprintf(msg, sizeof(msg), _("Unknown Error Code")); |
2086 | 178 break; |
179 } | |
180 | |
181 if (show) | |
3427 | 182 do_error_dialog(msg, NULL, GAIM_ERROR); |
2086 | 183 |
184 return msg; | |
185 } | |
186 | |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
187 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
188 char *url_decode(const char *msg) |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
189 { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
190 static char buf[MSN_BUF_LEN]; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
191 int i, j = 0; |
5191 | 192 char *bum; |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
193 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
194 bzero(buf, sizeof(buf)); |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
195 for (i = 0; i < strlen(msg); i++) { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
196 char hex[3]; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
197 if (msg[i] != '%') { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
198 buf[j++] = msg[i]; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
199 continue; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
200 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
201 strncpy(hex, msg + ++i, 2); hex[2] = 0; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
202 /* i is pointing to the start of the number */ |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
203 i++; /* now it's at the end and at the start of the for loop |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
204 will be at the next character */ |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
205 buf[j++] = strtol(hex, NULL, 16); |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
206 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
207 buf[j] = 0; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
208 |
5191 | 209 if(!g_utf8_validate(buf, -1, (const char **)&bum)) |
210 *bum = '\0'; | |
211 | |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
212 return buf; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
213 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
214 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
215 static char *url_encode(const char *msg) |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
216 { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
217 static char buf[MSN_BUF_LEN]; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
218 int i, j = 0; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
219 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
220 bzero(buf, sizeof(buf)); |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
221 for (i = 0; i < strlen(msg); i++) { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
222 if (isalnum(msg[i])) |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
223 buf[j++] = msg[i]; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
224 else { |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
225 sprintf(buf + j, "%%%02x", (unsigned char)msg[i]); |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
226 j += 3; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
227 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
228 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
229 buf[j] = 0; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
230 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
231 return buf; |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
232 } |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
233 |
2086 | 234 static void handle_hotmail(struct gaim_connection *gc, char *data) |
235 { | |
2932 | 236 char login_url[2048]; |
3171 | 237 char buf[MSN_BUF_LEN]; |
238 struct msn_data *md = gc->proto_data; | |
239 | |
3293 | 240 if (strchr(gc->username, '@') != strstr(gc->username, "@hotmail.com")) |
241 /* We can only get Hotmail notification from hotmail users */ | |
242 return; | |
243 | |
3195 | 244 if (!md->passport) { |
4270 | 245 g_snprintf(buf, sizeof(buf), "URL %u INBOX\r\n", ++md->trId); |
2932 | 246 |
3195 | 247 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
2153
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
248 return; |
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
249 } |
3195 | 250 } else { |
251 g_snprintf(login_url, sizeof(login_url), "%s", md->passport); | |
252 | |
253 if (strstr(data, "Content-Type: text/x-msmsgsinitialemailnotification;")) { | |
254 char *x = strstr(data, "Inbox-Unread:"); | |
255 if (!x) return; | |
256 x += strlen("Inbox-Unread: "); | |
257 connection_has_mail(gc, atoi(x), NULL, NULL, login_url); | |
258 } else if (strstr(data, "Content-Type: text/x-msmsgsemailnotification;")) { | |
259 char *from = strstr(data, "From:"); | |
260 char *subject = strstr(data, "Subject:"); | |
261 char *x; | |
262 if (!from || !subject) { | |
263 connection_has_mail(gc, 1, NULL, NULL, login_url); | |
264 return; | |
265 } | |
266 from += strlen("From: "); | |
267 x = strstr(from, "\r\n"); *x = 0; | |
268 subject += strlen("Subject: "); | |
269 x = strstr(subject, "\r\n"); *x = 0; | |
270 connection_has_mail(gc, -1, from, subject, login_url); | |
271 } | |
2086 | 272 } |
273 } | |
274 | |
275 struct msn_add_permit { | |
276 struct gaim_connection *gc; | |
277 char *user; | |
278 char *friend; | |
279 }; | |
280 | |
3730 | 281 static void msn_accept_add(struct msn_add_permit *map) |
2086 | 282 { |
4249 | 283 if(g_slist_find(connections, map->gc)) { |
284 struct msn_data *md = map->gc->proto_data; | |
285 char buf[MSN_BUF_LEN]; | |
286 | |
4270 | 287 g_snprintf(buf, sizeof(buf), "ADD %u AL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend)); |
4249 | 288 |
289 if (msn_write(md->fd, buf, strlen(buf)) < 0) { | |
290 hide_login_progress(map->gc, _("Write error")); | |
291 signoff(map->gc); | |
292 return; | |
293 } | |
4491 | 294 gaim_privacy_permit_add(map->gc->account, map->user); |
4249 | 295 build_allow_list(); /* er. right. we'll need to have a thing for this in CUI too */ |
296 show_got_added(map->gc, NULL, map->user, map->friend, NULL); | |
2086 | 297 } |
4249 | 298 |
3730 | 299 g_free(map->user); |
300 g_free(map->friend); | |
301 g_free(map); | |
2086 | 302 } |
303 | |
3730 | 304 static void msn_cancel_add(struct msn_add_permit *map) |
2086 | 305 { |
4249 | 306 if(g_slist_find(connections, map->gc)) { |
307 struct msn_data *md = map->gc->proto_data; | |
308 char buf[MSN_BUF_LEN]; | |
309 | |
4270 | 310 g_snprintf(buf, sizeof(buf), "ADD %u BL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend)); |
4249 | 311 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
312 hide_login_progress(map->gc, _("Write error")); | |
313 signoff(map->gc); | |
314 return; | |
315 } | |
4491 | 316 gaim_privacy_deny_add(map->gc->account, map->user); |
4249 | 317 build_block_list(); |
3118 | 318 } |
4249 | 319 |
2086 | 320 g_free(map->user); |
321 g_free(map->friend); | |
322 g_free(map); | |
323 } | |
324 | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
325 static int msn_process_main(struct gaim_connection *gc, char *buf) |
2086 | 326 { |
327 struct msn_data *md = gc->proto_data; | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
328 char sendbuf[MSN_BUF_LEN]; |
2086 | 329 |
4793 | 330 if (!g_ascii_strncasecmp(buf, "ADD", 3)) { |
2086 | 331 char *list, *user, *friend, *tmp = buf; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
332 struct msn_add_permit *ap; |
4491 | 333 GSList *perm = gc->account->permit; |
2086 | 334 char msg[MSN_BUF_LEN]; |
335 | |
336 GET_NEXT(tmp); | |
337 GET_NEXT(tmp); | |
338 list = tmp; | |
339 | |
340 GET_NEXT(tmp); | |
341 GET_NEXT(tmp); | |
342 user = tmp; | |
343 | |
344 GET_NEXT(tmp); | |
3323 | 345 friend = url_decode(tmp); |
2086 | 346 |
4793 | 347 if (g_ascii_strcasecmp(list, "RL")) |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
348 return 1; |
2086 | 349 |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
350 while (perm) { |
4793 | 351 if (!gaim_utf8_strcasecmp(perm->data, user)) |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
352 return 1; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
353 perm = perm->next; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
354 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
355 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
356 ap = g_new0(struct msn_add_permit, 1); |
2086 | 357 ap->user = g_strdup(user); |
3642 | 358 ap->friend = g_strdup(friend); |
2086 | 359 ap->gc = gc; |
360 | |
3299 | 361 g_snprintf(msg, sizeof(msg), _("The user %s (%s) wants to add %s to his or her buddy list."), |
3323 | 362 ap->user, ap->friend, ap->gc->username); |
2086 | 363 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
364 // do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, my_protocol->handle, FALSE); |
4793 | 365 } else if (!g_ascii_strncasecmp(buf, "BLP", 3)) { |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
366 char *type, *tmp = buf; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
367 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
368 GET_NEXT(tmp); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
369 GET_NEXT(tmp); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
370 GET_NEXT(tmp); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
371 type = tmp; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
372 |
4793 | 373 if (!g_ascii_strcasecmp(type, "AL")) { |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
374 /* If the current setting is AL, messages |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
375 * from users who are not in BL will be delivered |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
376 * |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
377 * In other words, deny some */ |
4491 | 378 gc->account->permdeny = DENY_SOME; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
379 } else { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
380 /* If the current |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
381 * setting is BL, only messages from people who are in the AL will be |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
382 * delivered. |
4349 | 383 * |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
384 * In other words, permit some */ |
4491 | 385 gc->account->permdeny = PERMIT_SOME; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
386 } |
4793 | 387 } else if (!g_ascii_strncasecmp(buf, "BPR", 3)) { |
388 } else if (!g_ascii_strncasecmp(buf, "CHG", 3)) { | |
389 } else if (!g_ascii_strncasecmp(buf, "CHL", 3)) { | |
2086 | 390 char *hash = buf; |
391 char buf2[MSN_BUF_LEN]; | |
392 md5_state_t st; | |
393 md5_byte_t di[16]; | |
394 int i; | |
395 | |
396 GET_NEXT(hash); | |
397 GET_NEXT(hash); | |
398 | |
399 md5_init(&st); | |
400 md5_append(&st, (const md5_byte_t *)hash, strlen(hash)); | |
401 md5_append(&st, (const md5_byte_t *)"Q1P7W2E4J9R8U3S5", strlen("Q1P7W2E4J9R8U3S5")); | |
402 md5_finish(&st, di); | |
403 | |
4270 | 404 g_snprintf(sendbuf, sizeof(sendbuf), "QRY %u msmsgs@msnmsgr.com 32\r\n", ++md->trId); |
2086 | 405 for (i = 0; i < 16; i++) { |
406 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
407 strcat(sendbuf, buf2); |
2086 | 408 } |
409 | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
410 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
4056 | 411 hide_login_progress(gc, _("Unable to write to server")); |
2086 | 412 signoff(gc); |
413 } | |
414 | |
415 debug_printf("\n"); | |
4793 | 416 } else if (!g_ascii_strncasecmp(buf, "FLN", 3)) { |
2086 | 417 char *usr = buf; |
418 | |
419 GET_NEXT(usr); | |
4732 | 420 serv_got_update(gc, usr, 0, 0, 0, 0, 0); |
4793 | 421 } else if (!g_ascii_strncasecmp(buf, "GTC", 3)) { |
422 } else if (!g_ascii_strncasecmp(buf, "INF", 3)) { | |
423 } else if (!g_ascii_strncasecmp(buf, "ILN", 3)) { | |
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
424 char *state, *user, *friend, *tmp = buf; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
425 int status = 0; |
2086 | 426 |
427 GET_NEXT(tmp); | |
428 | |
429 GET_NEXT(tmp); | |
430 state = tmp; | |
431 | |
432 GET_NEXT(tmp); | |
433 user = tmp; | |
434 | |
435 GET_NEXT(tmp); | |
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
436 friend = url_decode(tmp); |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
437 |
4227 | 438 serv_got_alias(gc, user, friend); |
2086 | 439 |
4793 | 440 if (!g_ascii_strcasecmp(state, "BSY")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
441 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); |
4793 | 442 } else if (!g_ascii_strcasecmp(state, "IDL")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
443 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); |
4793 | 444 } else if (!g_ascii_strcasecmp(state, "BRB")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
445 status |= UC_UNAVAILABLE | (MSN_BRB << 1); |
4793 | 446 } else if (!g_ascii_strcasecmp(state, "AWY")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
447 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); |
4793 | 448 } else if (!g_ascii_strcasecmp(state, "PHN")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
449 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); |
4793 | 450 } else if (!g_ascii_strcasecmp(state, "LUN")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
451 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); |
2086 | 452 } |
453 | |
4732 | 454 serv_got_update(gc, user, 1, 0, 0, 0, status); |
4793 | 455 } else if (!g_ascii_strncasecmp(buf, "LST", 3)) { |
2086 | 456 char *which, *who, *friend, *tmp = buf; |
3012 | 457 struct msn_add_permit *ap; /* for any as yet undealt with buddies who've added you to their buddy list when you were off-line. How dare they! */ |
4491 | 458 GSList *perm = gc->account->permit; /* current permit list */ |
459 GSList *denyl = gc->account->deny; | |
3012 | 460 char msg[MSN_BUF_LEN]; |
461 int new = 1; | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
462 int pos, tot; |
2086 | 463 |
464 GET_NEXT(tmp); | |
465 GET_NEXT(tmp); | |
466 which = tmp; | |
467 | |
468 GET_NEXT(tmp); | |
469 GET_NEXT(tmp); | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
470 pos = strtol(tmp, NULL, 10); |
2086 | 471 GET_NEXT(tmp); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
472 tot = strtol(tmp, NULL, 10); |
2086 | 473 GET_NEXT(tmp); |
474 who = tmp; | |
475 | |
476 GET_NEXT(tmp); | |
477 friend = url_decode(tmp); | |
478 | |
4793 | 479 if (!g_ascii_strcasecmp(which, "FL") && pos) { |
2086 | 480 struct msn_buddy *b = g_new0(struct msn_buddy, 1); |
481 b->user = g_strdup(who); | |
3642 | 482 b->friend = g_strdup(friend); |
2086 | 483 md->fl = g_slist_append(md->fl, b); |
4793 | 484 } else if (!g_ascii_strcasecmp(which, "AL") && pos) { |
4491 | 485 if (g_slist_find_custom(gc->account->deny, who, |
4349 | 486 (GCompareFunc)strcmp)) { |
3294 | 487 debug_printf("moving from deny to permit: %s", who); |
4491 | 488 gaim_privacy_deny_remove(gc->account, who); |
3294 | 489 } |
4491 | 490 gaim_privacy_permit_add(gc->account, who); |
4793 | 491 } else if (!g_ascii_strcasecmp(which, "BL") && pos) { |
4491 | 492 gaim_privacy_deny_add(gc->account, who); |
4793 | 493 } else if (!g_ascii_strcasecmp(which, "RL")) { |
3121 | 494 if (pos) { |
3012 | 495 while(perm) { |
4793 | 496 if(!g_ascii_strcasecmp(perm->data, who)) |
3012 | 497 new = 0; |
498 perm = perm->next; | |
499 } | |
3018 | 500 while(denyl) { |
4793 | 501 if(!g_ascii_strcasecmp(denyl->data, who)) |
3018 | 502 new = 0; |
503 denyl = denyl->next; | |
504 } | |
3012 | 505 if(new) { |
3013 | 506 debug_printf("Unresolved MSN RL entry\n"); |
3012 | 507 ap = g_new0(struct msn_add_permit, 1); |
508 ap->user = g_strdup(who); | |
3642 | 509 ap->friend = g_strdup(friend); |
3012 | 510 ap->gc = gc; |
511 | |
4249 | 512 g_snprintf(msg, sizeof(msg), _("The user %s (%s) wants to add you to their buddy list"),ap->user, ap->friend); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
513 do_ask_dialog(msg, NULL, ap, _("Authorize"), msn_accept_add, _("Deny"), msn_cancel_add, my_protocol->handle, FALSE); |
3012 | 514 } |
3121 | 515 } |
3012 | 516 |
517 if (pos != tot) | |
518 return 1; /* this isn't the last one in the RL, so return. */ | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
519 |
4270 | 520 g_snprintf(sendbuf, sizeof(sendbuf), "CHG %u NLN\r\n", ++md->trId); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
521 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
4056 | 522 hide_login_progress(gc, _("Unable to write")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
523 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
524 return 0; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
525 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
526 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
527 account_online(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
528 serv_finish_login(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
529 |
4491 | 530 md->permit = g_slist_copy(gc->account->permit); |
531 md->deny = g_slist_copy(gc->account->deny); | |
4349 | 532 |
2086 | 533 while (md->fl) { |
534 struct msn_buddy *mb = md->fl->data; | |
4687 | 535 struct buddy *b = gaim_find_buddy(gc->account, mb->user); |
2086 | 536 md->fl = g_slist_remove(md->fl, mb); |
4687 | 537 if(!b) { |
538 struct group *g; | |
539 printf("I'm adding %s now..\n", mb->user); | |
540 if (!(g = gaim_find_group(_("Buddies")))) { | |
4690 | 541 printf("How could I not exitst!?!\n"); |
4687 | 542 g = gaim_group_new(_("Buddies")); |
543 gaim_blist_add_group(g, NULL); | |
544 } | |
545 b = gaim_buddy_new(gc->account, mb->user, NULL); | |
546 gaim_blist_add_buddy(b,g,NULL); | |
547 } | |
4227 | 548 serv_got_alias(gc, mb->user, mb->friend); |
2086 | 549 g_free(mb->user); |
550 g_free(mb->friend); | |
551 g_free(mb); | |
552 } | |
553 } | |
4793 | 554 } else if (!g_ascii_strncasecmp(buf, "MSG", 3)) { |
2086 | 555 char *user, *tmp = buf; |
556 int length; | |
557 | |
558 GET_NEXT(tmp); | |
559 user = tmp; | |
560 | |
561 GET_NEXT(tmp); | |
562 | |
563 GET_NEXT(tmp); | |
564 length = atoi(tmp); | |
565 | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
566 md->msg = TRUE; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
567 md->msguser = g_strdup(user); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
568 md->msglen = length; |
4793 | 569 } else if (!g_ascii_strncasecmp(buf, "NLN", 3)) { |
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
570 char *state, *user, *friend, *tmp = buf; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
571 int status = 0; |
2086 | 572 |
573 GET_NEXT(tmp); | |
574 state = tmp; | |
575 | |
576 GET_NEXT(tmp); | |
577 user = tmp; | |
578 | |
579 GET_NEXT(tmp); | |
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
580 friend = url_decode(tmp); |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
581 |
4227 | 582 serv_got_alias(gc, user, friend); |
2086 | 583 |
4793 | 584 if (!g_ascii_strcasecmp(state, "BSY")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
585 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); |
4793 | 586 } else if (!g_ascii_strcasecmp(state, "IDL")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
587 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); |
4793 | 588 } else if (!g_ascii_strcasecmp(state, "BRB")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
589 status |= UC_UNAVAILABLE | (MSN_BRB << 1); |
4793 | 590 } else if (!g_ascii_strcasecmp(state, "AWY")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
591 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); |
4793 | 592 } else if (!g_ascii_strcasecmp(state, "PHN")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
593 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); |
4793 | 594 } else if (!g_ascii_strcasecmp(state, "LUN")) { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
595 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); |
2086 | 596 } |
597 | |
4732 | 598 serv_got_update(gc, user, 1, 0, 0, 0, status); |
4793 | 599 } else if (!g_ascii_strncasecmp(buf, "OUT", 3)) { |
2887 | 600 char *tmp = buf; |
601 | |
602 GET_NEXT(tmp); | |
4793 | 603 if (!g_ascii_strncasecmp(tmp, "OTH", 3)) { |
2889
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
604 hide_login_progress(gc, _("You have been disconnected. You have " |
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
605 "signed on from another location.")); |
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
606 signoff(gc); |
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
607 return 0; |
2887 | 608 } |
4793 | 609 } else if (!g_ascii_strncasecmp(buf, "PRP", 3)) { |
610 } else if (!g_ascii_strncasecmp(buf, "QNG", 3)) { | |
611 } else if (!g_ascii_strncasecmp(buf, "QRY", 3)) { | |
612 } else if (!g_ascii_strncasecmp(buf, "REA", 3)) { | |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
613 char *friend, *tmp = buf; |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
614 |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
615 GET_NEXT(tmp); |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
616 GET_NEXT(tmp); |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
617 GET_NEXT(tmp); |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
618 GET_NEXT(tmp); |
3456 | 619 |
620 friend = url_decode(tmp); | |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
621 |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
622 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
4793 | 623 } else if (!g_ascii_strncasecmp(buf, "REM", 3)) { |
624 } else if (!g_ascii_strncasecmp(buf, "RNG", 3)) { | |
2086 | 625 struct msn_switchboard *ms; |
626 char *sessid, *ssaddr, *auth, *user; | |
627 int port, i = 0; | |
628 char *tmp = buf; | |
629 | |
630 GET_NEXT(tmp); | |
631 sessid = tmp; | |
632 | |
633 GET_NEXT(tmp); | |
634 ssaddr = tmp; | |
635 | |
636 GET_NEXT(tmp); | |
637 | |
638 GET_NEXT(tmp); | |
639 auth = tmp; | |
640 | |
641 GET_NEXT(tmp); | |
642 user = tmp; | |
643 GET_NEXT(tmp); | |
644 | |
645 while (ssaddr[i] && ssaddr[i] != ':') i++; | |
646 if (ssaddr[i] == ':') { | |
647 char *x = &ssaddr[i + 1]; | |
648 ssaddr[i] = 0; | |
649 port = atoi(x); | |
650 } else | |
651 port = 1863; | |
652 | |
653 ms = g_new0(struct msn_switchboard, 1); | |
4634 | 654 if (proxy_connect(gc->account, ssaddr, port, msn_rng_connect, ms) != 0) { |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
655 g_free(ms); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
656 return 1; |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
657 } |
2086 | 658 ms->user = g_strdup(user); |
659 ms->sessid = g_strdup(sessid); | |
660 ms->auth = g_strdup(auth); | |
661 ms->gc = gc; | |
4793 | 662 } else if (!g_ascii_strncasecmp(buf, "URL", 3)) { |
3171 | 663 char *tmp = buf; |
664 FILE *fd; | |
665 md5_state_t st; | |
666 md5_byte_t di[16]; | |
667 int i; | |
668 char buf2[64]; | |
669 char sendbuf[64]; | |
670 char hippy[2048]; | |
671 char *rru; | |
672 char *passport; | |
673 | |
674 GET_NEXT(tmp); | |
675 GET_NEXT(tmp); | |
676 rru = tmp; | |
677 GET_NEXT(tmp); | |
678 passport = tmp; | |
679 | |
3630 | 680 g_snprintf(hippy, sizeof(hippy), "%s%lu%s", md->mspauth, time(NULL) - md->sl, gc->password); |
3171 | 681 |
682 md5_init(&st); | |
683 md5_append(&st, (const md5_byte_t *)hippy, strlen(hippy)); | |
684 md5_finish(&st, di); | |
685 | |
686 bzero(sendbuf, sizeof(sendbuf)); | |
687 for (i = 0; i < 16; i++) { | |
688 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
689 strcat(sendbuf, buf2); | |
690 } | |
691 | |
3195 | 692 if (md->passport) { |
693 unlink(md->passport); | |
3231 | 694 g_free(md->passport); |
3195 | 695 } |
3171 | 696 |
3630 | 697 if( (fd = gaim_mkstemp(&(md->passport))) == NULL ) { |
4270 | 698 debug_printf("Error opening temp file: %s\n", strerror(errno)); |
3630 | 699 } |
700 else { | |
4270 | 701 fputs("<html>\n" |
702 "<head>\n" | |
703 "<noscript>\n" | |
704 "<meta http-equiv=Refresh content=\"0; url=http://www.hotmail.com\">\n" | |
705 "</noscript>\n" | |
706 "</head>\n\n", fd); | |
3171 | 707 |
3630 | 708 fprintf(fd, "<body onload=\"document.pform.submit(); \">\n"); |
709 fprintf(fd, "<form name=\"pform\" action=\"%s\" method=\"POST\">\n\n", passport); | |
710 fprintf(fd, "<input type=\"hidden\" name=\"mode\" value=\"ttl\">\n"); | |
711 fprintf(fd, "<input type=\"hidden\" name=\"login\" value=\"%s\">\n", gc->username); | |
712 fprintf(fd, "<input type=\"hidden\" name=\"username\" value=\"%s\">\n", gc->username); | |
713 fprintf(fd, "<input type=\"hidden\" name=\"sid\" value=\"%s\">\n", md->sid); | |
714 fprintf(fd, "<input type=\"hidden\" name=\"kv\" value=\"%s\">\n", md->kv); | |
715 fprintf(fd, "<input type=\"hidden\" name=\"id\" value=\"2\">\n"); | |
716 fprintf(fd, "<input type=\"hidden\" name=\"sl\" value=\"%ld\">\n", time(NULL) - md->sl); | |
717 fprintf(fd, "<input type=\"hidden\" name=\"rru\" value=\"%s\">\n", rru); | |
718 fprintf(fd, "<input type=\"hidden\" name=\"auth\" value=\"%s\">\n", md->mspauth); | |
719 fprintf(fd, "<input type=\"hidden\" name=\"creds\" value=\"%s\">\n", sendbuf); // Digest me | |
720 fprintf(fd, "<input type=\"hidden\" name=\"svc\" value=\"mail\">\n"); | |
721 fprintf(fd, "<input type=\"hidden\" name=\"js\" value=\"yes\">\n"); | |
722 fprintf(fd, "</form></body>\n"); | |
723 fprintf(fd, "</html>\n"); | |
4270 | 724 if (fclose(fd)) { |
725 debug_printf("Error closing temp file: %s\n", strerror(errno)); | |
726 unlink(md->passport); | |
727 g_free(md->passport); | |
728 } | |
4462
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
729 else { |
4464
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
730 /* |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
731 * Renaming file with .html extension, so that |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
732 * win32 open_url will work. |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
733 */ |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
734 char *tmp; |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
735 if ((tmp = g_strdup_printf("%s.html", md->passport)) != NULL) { |
e926d3bdfd14
[gaim-migrate @ 4739]
Christian Hammond <chipx86@chipx86.com>
parents:
4463
diff
changeset
|
736 if (rename(md->passport, tmp) == 0) { |
4462
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
737 g_free(md->passport); |
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
738 md->passport = tmp; |
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
739 } else |
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
740 g_free(tmp); |
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
741 } |
ff6c275a57d4
[gaim-migrate @ 4737]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4460
diff
changeset
|
742 } |
3630 | 743 } |
4793 | 744 } else if (!g_ascii_strncasecmp(buf, "SYN", 3)) { |
745 } else if (!g_ascii_strncasecmp(buf, "USR", 3)) { | |
746 } else if (!g_ascii_strncasecmp(buf, "XFR", 3)) { | |
2086 | 747 char *host = strstr(buf, "SB"); |
748 int port; | |
749 int i = 0; | |
750 gboolean switchboard = TRUE; | |
751 char *tmp; | |
752 | |
753 if (!host) { | |
754 host = strstr(buf, "NS"); | |
755 if (!host) { | |
4056 | 756 hide_login_progress(gc, _("Got invalid XFR\n")); |
2086 | 757 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
758 return 0; |
2086 | 759 } |
760 switchboard = FALSE; | |
761 } | |
762 | |
763 GET_NEXT(host); | |
764 while (host[i] && host[i] != ':') i++; | |
765 if (host[i] == ':') { | |
766 tmp = &host[i + 1]; | |
767 host[i] = 0; | |
768 while (isdigit(*tmp)) tmp++; | |
769 *tmp++ = 0; | |
770 port = atoi(&host[i + 1]); | |
771 } else { | |
772 port = 1863; | |
773 tmp = host; | |
774 GET_NEXT(tmp); | |
775 } | |
776 | |
777 if (switchboard) { | |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
778 struct msn_switchboard *ms; |
2086 | 779 |
780 GET_NEXT(tmp); | |
781 | |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
782 ms = msn_switchboard_connect(gc, host, port); |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
783 |
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
784 if (ms == NULL) |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
785 return 1; |
4542
86b0a0243be8
[gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
4508
diff
changeset
|
786 |
2086 | 787 ms->auth = g_strdup(tmp); |
788 } else { | |
789 close(md->fd); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
790 gaim_input_remove(md->inpa); |
2086 | 791 md->inpa = 0; |
4634 | 792 if (proxy_connect(gc->account, host, port, msn_login_xfr_connect, gc) != 0) { |
4599 | 793 hide_login_progress(gc, _("Error transferring")); |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
794 signoff(gc); |
2740
68ad186943e0
[gaim-migrate @ 2753]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2739
diff
changeset
|
795 return 0; |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
796 } |
2086 | 797 } |
798 } else if (isdigit(*buf)) { | |
799 handle_errcode(buf, TRUE); | |
800 } else { | |
801 debug_printf("Unhandled message!\n"); | |
802 } | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
803 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
804 return 1; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
805 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
806 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
807 static void msn_process_main_msg(struct gaim_connection *gc, char *msg) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
808 { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
809 struct msn_data *md = gc->proto_data; |
3642 | 810 char *skiphead; |
3171 | 811 char *content; |
812 | |
813 content = strstr(msg, "Content-Type: "); | |
814 | |
4793 | 815 if ((content) && (!g_ascii_strncasecmp(content, "Content-Type: text/x-msmsgsprofile", |
3171 | 816 strlen("Content-Type: text/x-msmsgsprofile")))) { |
817 | |
818 char *kv,*sid,*mspauth; | |
819 | |
820 kv = strstr(msg, "kv: "); | |
821 sid = strstr(msg, "sid: "); | |
822 mspauth = strstr(msg, "MSPAuth: "); | |
823 | |
824 if (kv) { | |
825 char *tmp; | |
826 | |
827 kv += strlen("kv: "); | |
828 tmp = strstr(kv, "\r\n"); *tmp = 0; | |
829 md->kv = g_strdup(kv); | |
830 } | |
831 | |
832 if (sid) { | |
833 char *tmp; | |
834 | |
835 sid += strlen("sid: "); | |
836 tmp = strstr(sid, "\r\n"); *tmp = 0; | |
837 md->sid = g_strdup(sid); | |
838 } | |
839 | |
840 if (mspauth) { | |
841 char *tmp; | |
842 | |
843 mspauth += strlen("MSPAuth: "); | |
844 tmp = strstr(mspauth, "\r\n"); *tmp = 0; | |
845 md->mspauth = g_strdup(mspauth); | |
846 } | |
847 | |
848 } | |
849 | |
850 | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
851 |
4793 | 852 if (!g_ascii_strcasecmp(md->msguser, "hotmail")) { |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
853 handle_hotmail(gc, msg); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
854 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
855 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
856 |
3171 | 857 |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
858 skiphead = strstr(msg, "\r\n\r\n"); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
859 if (!skiphead || !skiphead[4]) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
860 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
861 skiphead += 4; |
3642 | 862 strip_linefeed(skiphead); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
863 |
3642 | 864 serv_got_im(gc, md->msguser, skiphead, 0, time(NULL), -1); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
865 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
866 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
867 static void msn_callback(gpointer data, gint source, GaimInputCondition cond) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
868 { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
869 struct gaim_connection *gc = data; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
870 struct msn_data *md = gc->proto_data; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
871 char buf[MSN_BUF_LEN]; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
872 int cont = 1; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
873 int len; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
874 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
875 len = read(md->fd, buf, sizeof(buf)); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
876 if (len <= 0) { |
3263 | 877 hide_login_progress_error(gc, _("Error reading from server")); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
878 signoff(gc); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
879 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
880 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
881 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
882 md->rxqueue = g_realloc(md->rxqueue, len + md->rxlen); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
883 memcpy(md->rxqueue + md->rxlen, buf, len); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
884 md->rxlen += len; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
885 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
886 while (cont) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
887 if (!md->rxlen) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
888 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
889 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
890 if (md->msg) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
891 char *msg; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
892 if (md->msglen > md->rxlen) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
893 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
894 msg = md->rxqueue; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
895 md->rxlen -= md->msglen; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
896 if (md->rxlen) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
897 md->rxqueue = g_memdup(msg + md->msglen, md->rxlen); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
898 } else { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
899 md->rxqueue = NULL; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
900 msg = g_realloc(msg, md->msglen + 1); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
901 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
902 msg[md->msglen] = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
903 md->msglen = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
904 md->msg = FALSE; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
905 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
906 msn_process_main_msg(gc, msg); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
907 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
908 g_free(md->msguser); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
909 g_free(msg); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
910 } else { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
911 char *end = md->rxqueue; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
912 int cmdlen; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
913 char *cmd; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
914 int i = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
915 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
916 while (i + 1 < md->rxlen) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
917 if (*end == '\r' && end[1] == '\n') |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
918 break; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
919 end++; i++; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
920 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
921 if (i + 1 == md->rxlen) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
922 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
923 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
924 cmdlen = end - md->rxqueue + 2; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
925 cmd = md->rxqueue; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
926 md->rxlen -= cmdlen; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
927 if (md->rxlen) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
928 md->rxqueue = g_memdup(cmd + cmdlen, md->rxlen); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
929 } else { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
930 md->rxqueue = NULL; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
931 cmd = g_realloc(cmd, cmdlen + 1); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
932 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
933 cmd[cmdlen] = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
934 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
935 debug_printf("MSN S: %s", cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
936 g_strchomp(cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
937 cont = msn_process_main(gc, cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
938 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
939 g_free(cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
940 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
941 } |
2086 | 942 } |
943 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
944 static void msn_login_xfr_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 945 { |
946 struct gaim_connection *gc = data; | |
947 struct msn_data *md; | |
948 char buf[MSN_BUF_LEN]; | |
949 | |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
950 if (!g_slist_find(connections, gc)) { |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
951 close(source); |
2086 | 952 return; |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
953 } |
2086 | 954 |
955 md = gc->proto_data; | |
956 | |
957 if (md->fd != source) | |
958 md->fd = source; | |
959 | |
960 if (md->fd == -1) { | |
4056 | 961 hide_login_progress(gc, _("Unable to connect to Notification Server")); |
2086 | 962 signoff(gc); |
963 return; | |
964 } | |
965 | |
4270 | 966 g_snprintf(buf, sizeof(buf), "VER %u MSNP5\r\n", ++md->trId); |
2086 | 967 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 968 hide_login_progress(gc, _("Unable to talk to Notification Server")); |
2086 | 969 signoff(gc); |
970 return; | |
971 } | |
972 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
973 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_login_callback, gc); |
2086 | 974 } |
975 | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
976 static int msn_process_login(struct gaim_connection *gc, char *buf) |
2086 | 977 { |
978 struct msn_data *md = gc->proto_data; | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
979 char sendbuf[MSN_BUF_LEN]; |
2086 | 980 |
4793 | 981 if (!g_ascii_strncasecmp(buf, "VER", 3)) { |
2226
2a09a177ed5f
[gaim-migrate @ 2236]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2219
diff
changeset
|
982 /* we got VER, check to see that MSNP5 is in the list, then send INF */ |
2a09a177ed5f
[gaim-migrate @ 2236]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2219
diff
changeset
|
983 if (!strstr(buf, "MSNP5")) { |
4056 | 984 hide_login_progress(gc, _("Protocol not supported")); |
2086 | 985 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
986 return 0; |
2086 | 987 } |
988 | |
4270 | 989 g_snprintf(sendbuf, sizeof(sendbuf), "INF %u\r\n", ++md->trId); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
990 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
4056 | 991 hide_login_progress(gc, _("Unable to request INF\n")); |
2086 | 992 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
993 return 0; |
2086 | 994 } |
4793 | 995 } else if (!g_ascii_strncasecmp(buf, "INF", 3)) { |
2086 | 996 /* check to make sure we can use md5 */ |
997 if (!strstr(buf, "MD5")) { | |
4056 | 998 hide_login_progress(gc, _("Unable to login using MD5")); |
2086 | 999 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1000 return 0; |
2086 | 1001 } |
1002 | |
4270 | 1003 g_snprintf(sendbuf, sizeof(sendbuf), "USR %u MD5 I %s\r\n", ++md->trId, gc->username); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1004 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
4056 | 1005 hide_login_progress(gc, _("Unable to send USR\n")); |
2086 | 1006 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1007 return 0; |
2086 | 1008 } |
1009 | |
3263 | 1010 set_login_progress(gc, 3, _("Requesting to send password")); |
4793 | 1011 } else if (!g_ascii_strncasecmp(buf, "USR", 3)) { |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1012 char *resp, *friend, *tmp = buf; |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1013 |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1014 GET_NEXT(tmp); |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1015 GET_NEXT(tmp); |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1016 resp = tmp; |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1017 GET_NEXT(tmp); |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1018 GET_NEXT(tmp); |
3323 | 1019 friend = url_decode(tmp); |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1020 GET_NEXT(tmp); |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1021 |
2086 | 1022 /* so here, we're either getting the challenge or the OK */ |
4793 | 1023 if (!g_ascii_strcasecmp(resp, "OK")) { |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1024 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1025 |
4270 | 1026 g_snprintf(sendbuf, sizeof(sendbuf), "SYN %u 0\r\n", ++md->trId); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1027 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
4056 | 1028 hide_login_progress(gc, _("Unable to write")); |
2086 | 1029 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1030 return 0; |
2086 | 1031 } |
1032 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1033 gaim_input_remove(md->inpa); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1034 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_callback, gc); |
2739
7aeedbf29a96
[gaim-migrate @ 2752]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2738
diff
changeset
|
1035 return 0; |
4793 | 1036 } else if (!g_ascii_strcasecmp(resp, "MD5")) { |
2086 | 1037 char buf2[MSN_BUF_LEN]; |
1038 md5_state_t st; | |
1039 md5_byte_t di[16]; | |
1040 int i; | |
1041 | |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1042 g_snprintf(buf2, sizeof(buf2), "%s%s", friend, gc->password); |
2086 | 1043 |
1044 md5_init(&st); | |
1045 md5_append(&st, (const md5_byte_t *)buf2, strlen(buf2)); | |
1046 md5_finish(&st, di); | |
1047 | |
4270 | 1048 g_snprintf(sendbuf, sizeof(sendbuf), "USR %u MD5 S ", ++md->trId); |
2086 | 1049 for (i = 0; i < 16; i++) { |
1050 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1051 strcat(sendbuf, buf2); |
2086 | 1052 } |
3321 | 1053 strcat(sendbuf, "\r\n"); |
2086 | 1054 |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1055 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
3263 | 1056 hide_login_progress(gc, _("Unable to send password")); |
2086 | 1057 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1058 return 0; |
2086 | 1059 } |
1060 | |
3263 | 1061 set_login_progress(gc, 4, _("Password sent")); |
2086 | 1062 } |
4793 | 1063 } else if (!g_ascii_strncasecmp(buf, "XFR", 3)) { |
2086 | 1064 char *host = strstr(buf, "NS"); |
1065 int port; | |
1066 int i = 0; | |
1067 | |
1068 if (!host) { | |
4056 | 1069 hide_login_progress(gc, _("Got invalid XFR\n")); |
2086 | 1070 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1071 return 0; |
2086 | 1072 } |
1073 | |
1074 GET_NEXT(host); | |
1075 while (host[i] && host[i] != ':') i++; | |
1076 if (host[i] == ':') { | |
1077 char *x = &host[i + 1]; | |
1078 host[i] = 0; | |
1079 port = atoi(x); | |
1080 } else | |
1081 port = 1863; | |
1082 | |
1083 close(md->fd); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1084 gaim_input_remove(md->inpa); |
2086 | 1085 md->inpa = 0; |
1086 md->fd = 0; | |
3171 | 1087 md->sl = time(NULL); |
4634 | 1088 if (proxy_connect(gc->account, host, port, msn_login_xfr_connect, gc) != 0) { |
4056 | 1089 hide_login_progress(gc, _("Unable to transfer")); |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1090 signoff(gc); |
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1091 } |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1092 return 0; |
2086 | 1093 } else { |
1094 if (isdigit(*buf)) | |
1095 hide_login_progress(gc, handle_errcode(buf, FALSE)); | |
1096 else | |
4056 | 1097 hide_login_progress(gc, _("Unable to parse message")); |
2086 | 1098 signoff(gc); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1099 return 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1100 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1101 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1102 return 1; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1103 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1104 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1105 static void msn_login_callback(gpointer data, gint source, GaimInputCondition cond) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1106 { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1107 struct gaim_connection *gc = data; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1108 struct msn_data *md = gc->proto_data; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1109 char buf[MSN_BUF_LEN]; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1110 int cont = 1; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1111 int len; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1112 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1113 len = read(md->fd, buf, sizeof(buf)); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1114 if (len <= 0) { |
3263 | 1115 hide_login_progress(gc, _("Error reading from server")); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1116 signoff(gc); |
2086 | 1117 return; |
1118 } | |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1119 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1120 md->rxqueue = g_realloc(md->rxqueue, len + md->rxlen); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1121 memcpy(md->rxqueue + md->rxlen, buf, len); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1122 md->rxlen += len; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1123 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1124 while (cont) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1125 char *end = md->rxqueue; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1126 int cmdlen; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1127 char *cmd; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1128 int i = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1129 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1130 if (!md->rxlen) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1131 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1132 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1133 while (i + 1 < md->rxlen) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1134 if (*end == '\r' && end[1] == '\n') |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1135 break; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1136 end++; i++; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1137 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1138 if (i + 1 == md->rxlen) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1139 return; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1140 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1141 cmdlen = end - md->rxqueue + 2; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1142 cmd = md->rxqueue; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1143 md->rxlen -= cmdlen; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1144 if (md->rxlen) { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1145 md->rxqueue = g_memdup(cmd + cmdlen, md->rxlen); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1146 } else { |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1147 md->rxqueue = NULL; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1148 cmd = g_realloc(cmd, cmdlen + 1); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1149 } |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1150 cmd[cmdlen] = 0; |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1151 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1152 debug_printf("MSN S: %s", cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1153 g_strchomp(cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1154 cont = msn_process_login(gc, cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1155 |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1156 g_free(cmd); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1157 } |
2086 | 1158 } |
1159 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1160 static void msn_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1161 { |
1162 struct gaim_connection *gc = data; | |
1163 struct msn_data *md; | |
1164 char buf[1024]; | |
1165 | |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1166 if (!g_slist_find(connections, gc)) { |
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1167 close(source); |
2086 | 1168 return; |
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1169 } |
2086 | 1170 |
1171 md = gc->proto_data; | |
1172 | |
1173 if (md->fd != source) | |
1174 md->fd = source; | |
1175 | |
1176 if (md->fd == -1) { | |
3263 | 1177 hide_login_progress(gc, _("Unable to connect")); |
2086 | 1178 signoff(gc); |
1179 return; | |
1180 } | |
1181 | |
4270 | 1182 g_snprintf(buf, sizeof(buf), "VER %u MSNP5\r\n", ++md->trId); |
2086 | 1183 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
3263 | 1184 hide_login_progress(gc, _("Unable to write to server")); |
2086 | 1185 signoff(gc); |
1186 return; | |
1187 } | |
1188 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1189 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_login_callback, gc); |
3263 | 1190 set_login_progress(gc, 2,_("Synching with server")); |
2086 | 1191 } |
1192 | |
4491 | 1193 static void msn_login(struct gaim_account *account) |
2086 | 1194 { |
4491 | 1195 struct gaim_connection *gc = new_gaim_conn(account); |
4460 | 1196 gc->proto_data = g_new0(struct msn_data, 1); |
2086 | 1197 |
3263 | 1198 set_login_progress(gc, 1, _("Connecting")); |
2086 | 1199 |
1200 g_snprintf(gc->username, sizeof(gc->username), "%s", msn_normalize(gc->username)); | |
4455 | 1201 |
4634 | 1202 if (proxy_connect(account, account->proto_opt[USEROPT_MSNSERVER][0] ? |
4491 | 1203 account->proto_opt[USEROPT_MSNSERVER] : MSN_SERVER, |
1204 account->proto_opt[USEROPT_MSNPORT][0] ? | |
1205 atoi(account->proto_opt[USEROPT_MSNPORT]) : MSN_PORT, | |
1206 msn_login_connect, gc) != 0) { | |
3263 | 1207 hide_login_progress(gc, _("Unable to connect")); |
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1208 signoff(gc); |
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1209 } |
2086 | 1210 } |
1211 | |
1212 static void msn_close(struct gaim_connection *gc) | |
1213 { | |
1214 struct msn_data *md = gc->proto_data; | |
1215 close(md->fd); | |
1216 if (md->inpa) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1217 gaim_input_remove(md->inpa); |
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1218 g_free(md->rxqueue); |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1219 if (md->msg) |
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1220 g_free(md->msguser); |
3195 | 1221 if (md->passport) { |
1222 unlink(md->passport); | |
3231 | 1223 g_free(md->passport); |
3195 | 1224 } |
2086 | 1225 while (md->switches) |
1226 msn_kill_switch(md->switches->data); | |
1227 while (md->fl) { | |
1228 struct msn_buddy *tmp = md->fl->data; | |
1229 md->fl = g_slist_remove(md->fl, tmp); | |
1230 g_free(tmp->user); | |
1231 g_free(tmp->friend); | |
1232 g_free(tmp); | |
1233 } | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1234 g_slist_free(md->permit); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1235 g_slist_free(md->deny); |
2086 | 1236 g_free(md); |
1237 } | |
1238 | |
3001 | 1239 static int msn_send_typing(struct gaim_connection *gc, char *who, int typing) { |
2993 | 1240 struct msn_switchboard *ms = msn_find_switch(gc, who); |
1241 char header[MSN_BUF_LEN] = "MIME-Version: 1.0\r\n" | |
1242 "Content-Type: text/x-msmsgscontrol\r\n" | |
1243 "TypingUser: "; | |
1244 char buf [MSN_BUF_LEN]; | |
3001 | 1245 if (!ms || !typing) |
1246 return 0; | |
4270 | 1247 g_snprintf(buf, sizeof(buf), "MSG %u N %d\r\n%s%s\r\n\r\n\r\n", |
2993 | 1248 ++ms->trId, |
1249 strlen(header) + strlen("\r\n\r\n\r\n") + strlen(gc->username), | |
1250 header, gc->username); | |
1251 if (msn_write(ms->fd, buf, strlen(buf)) < 0) | |
1252 msn_kill_switch(ms); | |
1253 return MSN_TYPING_SEND_TIMEOUT; | |
1254 } | |
1255 | |
5136 | 1256 static int msn_send_im(struct gaim_connection *gc, const char *who, const char *message, int len, int flags) |
2086 | 1257 { |
1258 struct msn_data *md = gc->proto_data; | |
1259 struct msn_switchboard *ms = msn_find_switch(gc, who); | |
1260 char buf[MSN_BUF_LEN]; | |
1261 | |
1262 if (ms) { | |
3642 | 1263 char *send; |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1264 |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1265 if (ms->txqueue) { |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1266 debug_printf("appending to queue\n"); |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1267 ms->txqueue = g_slist_append(ms->txqueue, g_strdup(message)); |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1268 return 1; |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1269 } |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1270 |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1271 send = add_cr(message); |
4270 | 1272 g_snprintf(buf, sizeof(buf), "MSG %u N %d\r\n%s%s", ++ms->trId, |
3642 | 1273 strlen(MIME_HEADER) + strlen(send), |
1274 MIME_HEADER, send); | |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1275 g_free(send); |
2086 | 1276 if (msn_write(ms->fd, buf, strlen(buf)) < 0) |
1277 msn_kill_switch(ms); | |
1278 debug_printf("\n"); | |
1279 } else if (strcmp(who, gc->username)) { | |
4270 | 1280 g_snprintf(buf, MSN_BUF_LEN, "XFR %u SB\r\n", ++md->trId); |
2086 | 1281 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1282 hide_login_progress(gc, _("Write error")); |
2086 | 1283 signoff(gc); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1284 return 1; |
2086 | 1285 } |
1286 | |
1287 ms = g_new0(struct msn_switchboard, 1); | |
1288 md->switches = g_slist_append(md->switches, ms); | |
1289 ms->user = g_strdup(who); | |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1290 ms->txqueue = g_slist_append(ms->txqueue, g_strdup(message)); |
2086 | 1291 ms->gc = gc; |
1292 ms->fd = -1; | |
1293 } else | |
1294 /* in msn you can't send messages to yourself, so we'll fake like we received it ;) */ | |
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2842
diff
changeset
|
1295 serv_got_im(gc, who, message, flags | IM_FLAG_GAIMUSER, time(NULL), -1); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1296 return 1; |
2086 | 1297 } |
1298 | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1299 static int msn_chat_send(struct gaim_connection *gc, int id, char *message) |
2086 | 1300 { |
1301 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
1302 char buf[MSN_BUF_LEN]; | |
3642 | 1303 char *send; |
2086 | 1304 |
1305 if (!ms) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1306 return -EINVAL; |
2086 | 1307 |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1308 send = add_cr(message); |
4270 | 1309 g_snprintf(buf, sizeof(buf), "MSG %u N %d\r\n%s%s", ++ms->trId, |
3642 | 1310 strlen(MIME_HEADER) + strlen(send), |
1311 MIME_HEADER, send); | |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1312 g_free(send); |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1313 if (msn_write(ms->fd, buf, strlen(buf)) < 0) { |
2086 | 1314 msn_kill_switch(ms); |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1315 return 0; |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1316 } |
2086 | 1317 debug_printf("\n"); |
1318 serv_got_chat_in(gc, id, gc->username, 0, message, time(NULL)); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1319 return 0; |
2086 | 1320 } |
1321 | |
3466 | 1322 static void msn_chat_invite(struct gaim_connection *gc, int id, const char *msg, const char *who) |
2086 | 1323 { |
1324 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
1325 char buf[MSN_BUF_LEN]; | |
1326 | |
1327 if (!ms) | |
1328 return; | |
1329 | |
4270 | 1330 g_snprintf(buf, sizeof(buf), "CAL %u %s\r\n", ++ms->trId, who); |
2086 | 1331 if (msn_write(ms->fd, buf, strlen(buf)) < 0) |
1332 msn_kill_switch(ms); | |
1333 } | |
1334 | |
1335 static void msn_chat_leave(struct gaim_connection *gc, int id) | |
1336 { | |
1337 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
1338 char buf[MSN_BUF_LEN]; | |
1339 | |
1340 if (!ms) | |
1341 return; | |
1342 | |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1343 g_snprintf(buf, sizeof(buf), "OUT\r\n"); |
2086 | 1344 if (msn_write(ms->fd, buf, strlen(buf)) < 0) |
1345 msn_kill_switch(ms); | |
1346 } | |
1347 | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
1348 static GList *msn_away_states(struct gaim_connection *gc) |
2086 | 1349 { |
1350 GList *m = NULL; | |
1351 | |
3263 | 1352 m = g_list_append(m, _("Available")); |
1353 m = g_list_append(m, _("Away From Computer")); | |
1354 m = g_list_append(m, _("Be Right Back")); | |
1355 m = g_list_append(m, _("Busy")); | |
1356 m = g_list_append(m, _("On The Phone")); | |
1357 m = g_list_append(m, _("Out To Lunch")); | |
1358 m = g_list_append(m, _("Hidden")); | |
2086 | 1359 |
1360 return m; | |
1361 } | |
1362 | |
1363 static void msn_set_away(struct gaim_connection *gc, char *state, char *msg) | |
1364 { | |
1365 struct msn_data *md = gc->proto_data; | |
1366 char buf[MSN_BUF_LEN]; | |
4270 | 1367 const char *away; |
2086 | 1368 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1369 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1370 g_free(gc->away); |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1371 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1372 } |
2086 | 1373 |
1374 if (msg) { | |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1375 gc->away = g_strdup(""); |
2086 | 1376 away = "AWY"; |
1377 } else if (state) { | |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1378 gc->away = g_strdup(""); |
2086 | 1379 |
3538 | 1380 if (!strcmp(state, _("Away From Computer"))) |
2086 | 1381 away = "AWY"; |
3538 | 1382 else if (!strcmp(state, _("Be Right Back"))) |
2086 | 1383 away = "BRB"; |
3538 | 1384 else if (!strcmp(state, _("Busy"))) |
2086 | 1385 away = "BSY"; |
3538 | 1386 else if (!strcmp(state, _("On The Phone"))) |
2086 | 1387 away = "PHN"; |
3538 | 1388 else if (!strcmp(state, _("Out To Lunch"))) |
2086 | 1389 away = "LUN"; |
3538 | 1390 else if (!strcmp(state, _("Hidden"))) |
2152
f631cfc8e824
[gaim-migrate @ 2162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
1391 away = "HDN"; |
2086 | 1392 else { |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4069
diff
changeset
|
1393 g_free(gc->away); |
2086 | 1394 gc->away = NULL; |
1395 away = "NLN"; | |
1396 } | |
1397 } else if (gc->is_idle) | |
1398 away = "IDL"; | |
1399 else | |
1400 away = "NLN"; | |
1401 | |
4270 | 1402 g_snprintf(buf, sizeof(buf), "CHG %u %s\r\n", ++md->trId, away); |
2086 | 1403 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1404 hide_login_progress(gc, _("Write error")); |
2086 | 1405 signoff(gc); |
1406 return; | |
1407 } | |
1408 } | |
1409 | |
1410 static void msn_set_idle(struct gaim_connection *gc, int idle) | |
1411 { | |
1412 struct msn_data *md = gc->proto_data; | |
4270 | 1413 char buf[64]; |
2086 | 1414 |
1415 if (gc->away) | |
1416 return; | |
4270 | 1417 g_snprintf(buf, sizeof(buf), |
1418 idle ? "CHG %d IDL\r\n" : "CHG %u NLN\r\n", ++md->trId); | |
2086 | 1419 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1420 hide_login_progress(gc, _("Write error")); |
2086 | 1421 signoff(gc); |
1422 return; | |
1423 } | |
1424 } | |
1425 | |
4687 | 1426 static const char *msn_list_icon(struct gaim_account *a, struct buddy *b) |
2086 | 1427 { |
4687 | 1428 return "msn"; |
1429 } | |
4916 | 1430 |
1431 static void msn_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) | |
1432 { | |
5068 | 1433 if (b->present == GAIM_BUDDY_OFFLINE) |
4916 | 1434 *se = "offline"; |
1435 else if (b->uc >> 1 == 2 || b->uc >> 1 == 6) | |
1436 *se = "occupied"; | |
5022 | 1437 else if (b->uc) |
1438 *se = "away"; | |
2086 | 1439 } |
4916 | 1440 |
2086 | 1441 static char *msn_get_away_text(int s) |
1442 { | |
1443 switch (s) { | |
1444 case MSN_BUSY : | |
4056 | 1445 return _("Busy"); |
2086 | 1446 case MSN_BRB : |
4606 | 1447 return _("Be Right Back"); |
2086 | 1448 case MSN_AWAY : |
4606 | 1449 return _("Away From Computer"); |
2086 | 1450 case MSN_PHONE : |
4606 | 1451 return _("On The Phone"); |
2086 | 1452 case MSN_LUNCH : |
4606 | 1453 return _("Out To Lunch"); |
2086 | 1454 case MSN_IDLE : |
4056 | 1455 return _("Idle"); |
2086 | 1456 default: |
4056 | 1457 return _("Available"); |
2086 | 1458 } |
1459 } | |
1460 | |
4732 | 1461 static char *msn_status_text(struct buddy *b) { |
4723 | 1462 if (b->uc & UC_UNAVAILABLE) |
4745 | 1463 return g_strdup(msn_get_away_text(b->uc >> 1)); |
4723 | 1464 return NULL; |
1465 } | |
4150 | 1466 |
4732 | 1467 static char *msn_tooltip_text(struct buddy *b) { |
5068 | 1468 if (GAIM_BUDDY_IS_ONLINE(b)) |
4920 | 1469 return g_strdup_printf(_("<b>Status:</b> %s"), msn_get_away_text(b->uc >> 1)); |
4921 | 1470 |
1471 return NULL; | |
4724 | 1472 } |
1473 | |
5136 | 1474 static GList *msn_buddy_menu(struct gaim_connection *gc, const char *who) |
2086 | 1475 { |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1476 GList *m = NULL; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1477 |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1478 return m; |
2086 | 1479 } |
1480 | |
3466 | 1481 static void msn_add_buddy(struct gaim_connection *gc, const char *name) |
2086 | 1482 { |
1483 struct msn_data *md = gc->proto_data; | |
2588
a3117e29317d
[gaim-migrate @ 2601]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2582
diff
changeset
|
1484 char *who = msn_normalize(name); |
2086 | 1485 char buf[MSN_BUF_LEN]; |
1486 GSList *l = md->fl; | |
1487 | |
2600
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1488 if (who[0] == '@') |
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1489 /* how did this happen? */ |
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1490 return; |
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1491 |
2953 | 1492 if (strchr(who, ' ')) |
2952 | 1493 /* This is a broken blist entry. */ |
1494 return; | |
1495 | |
2086 | 1496 while (l) { |
1497 struct msn_buddy *b = l->data; | |
4793 | 1498 if (!gaim_utf8_strcasecmp(who, b->user)) |
2086 | 1499 break; |
1500 l = l->next; | |
1501 } | |
1502 if (l) | |
1503 return; | |
1504 | |
4270 | 1505 g_snprintf(buf, sizeof(buf), "ADD %u FL %s %s\r\n", ++md->trId, who, who); |
2086 | 1506 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1507 hide_login_progress(gc, _("Write error")); |
2086 | 1508 signoff(gc); |
1509 return; | |
1510 } | |
1511 } | |
1512 | |
2681
37d80035e77f
[gaim-migrate @ 2694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2665
diff
changeset
|
1513 static void msn_rem_buddy(struct gaim_connection *gc, char *who, char *group) |
2086 | 1514 { |
1515 struct msn_data *md = gc->proto_data; | |
1516 char buf[MSN_BUF_LEN]; | |
1517 | |
4270 | 1518 g_snprintf(buf, sizeof(buf), "REM %u FL %s\r\n", ++md->trId, who); |
2086 | 1519 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1520 hide_login_progress(gc, _("Write error")); |
2086 | 1521 signoff(gc); |
1522 return; | |
1523 } | |
1524 } | |
1525 | |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1526 static void msn_act_id(gpointer data, char *entry) |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1527 { |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1528 struct gaim_connection *gc = data; |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1529 struct msn_data *md = gc->proto_data; |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1530 char buf[MSN_BUF_LEN]; |
3323 | 1531 char *alias; |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1532 |
3466 | 1533 if (!entry || *entry == '\0') |
3448 | 1534 alias = g_strdup(""); |
1535 else | |
3642 | 1536 alias = g_strdup(entry); |
3323 | 1537 |
1538 if (strlen(alias) >= BUDDY_ALIAS_MAXLEN) { | |
3427 | 1539 do_error_dialog(_("New MSN friendly name too long."), NULL, GAIM_ERROR); |
3020 | 1540 return; |
1541 } | |
1542 | |
4270 | 1543 g_snprintf(buf, sizeof(buf), "REA %u %s %s\r\n", ++md->trId, gc->username, url_encode(alias)); |
3323 | 1544 g_free(alias); |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1545 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1546 hide_login_progress(gc, _("Write error")); |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1547 signoff(gc); |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1548 return; |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1549 } |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1550 } |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1551 |
4333 | 1552 static void msn_show_set_friendly_name(struct gaim_connection *gc) |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1553 { |
4333 | 1554 do_prompt_dialog(_("Set Friendly Name:"), gc->displayname, gc, msn_act_id, NULL); |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1555 } |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1556 |
4333 | 1557 static GList *msn_actions(struct gaim_connection *gc) |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1558 { |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1559 GList *m = NULL; |
4333 | 1560 struct proto_actions_menu *pam; |
1561 | |
1562 pam = g_new0(struct proto_actions_menu, 1); | |
1563 pam->label = _("Set Friendly Name"); | |
1564 pam->callback = msn_show_set_friendly_name; | |
1565 pam->gc = gc; | |
1566 m = g_list_append(m, pam); | |
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1567 |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1568 return m; |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1569 } |
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1570 |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1571 static void msn_convo_closed(struct gaim_connection *gc, char *who) |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1572 { |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1573 struct msn_switchboard *ms = msn_find_switch(gc, who); |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1574 |
4069
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1575 if (ms) { |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1576 char sendbuf[256]; |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1577 |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1578 g_snprintf(sendbuf, sizeof(sendbuf), "BYE %s\r\n", gc->username); |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1579 |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1580 msn_write(ms->fd, sendbuf, strlen(sendbuf)); |
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1581 |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1582 msn_kill_switch(ms); |
4069
5b56c42c2717
[gaim-migrate @ 4281]
Christian Hammond <chipx86@chipx86.com>
parents:
4068
diff
changeset
|
1583 } |
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1584 } |
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1585 |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1586 static void msn_keepalive(struct gaim_connection *gc) |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1587 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1588 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1589 char buf[MSN_BUF_LEN]; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1590 |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1591 g_snprintf(buf, sizeof(buf), "PNG\r\n"); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1592 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1593 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1594 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1595 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1596 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1597 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1598 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1599 static void msn_set_permit_deny(struct gaim_connection *gc) |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1600 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1601 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1602 char buf[MSN_BUF_LEN]; |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1603 GSList *s, *t = NULL; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1604 |
4491 | 1605 if (gc->account->permdeny == PERMIT_ALL || gc->account->permdeny == DENY_SOME) |
4270 | 1606 g_snprintf(buf, sizeof(buf), "BLP %u AL\r\n", ++md->trId); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1607 else |
4270 | 1608 g_snprintf(buf, sizeof(buf), "BLP %u BL\r\n", ++md->trId); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1609 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1610 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1611 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1612 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1613 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1614 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1615 |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1616 /* this is safe because we'll always come here after we've gotten the list off the server, |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1617 * and data is never removed. So if the lengths are equal we don't know about anyone locally |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1618 * and so there's no sense in going through them all. */ |
4491 | 1619 if (g_slist_length(gc->account->permit) == g_slist_length(md->permit)) { |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1620 g_slist_free(md->permit); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1621 md->permit = NULL; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1622 } |
4491 | 1623 if (g_slist_length(gc->account->deny) == g_slist_length(md->deny)) { |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1624 g_slist_free(md->deny); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1625 md->deny = NULL; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1626 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1627 if (!md->permit && !md->deny) |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1628 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1629 |
3200 | 1630 if (md->permit) { |
4491 | 1631 s = g_slist_nth(gc->account->permit, g_slist_length(md->permit)); |
3200 | 1632 while (s) { |
1633 char *who = s->data; | |
1634 s = s->next; | |
1635 if (!strchr(who, '@')) { | |
1636 t = g_slist_append(t, who); | |
1637 continue; | |
1638 } | |
4349 | 1639 if (g_slist_find(md->deny, who)) { |
3294 | 1640 t = g_slist_append(t, who); |
1641 continue; | |
1642 } | |
4270 | 1643 g_snprintf(buf, sizeof(buf), "ADD %u AL %s %s\r\n", ++md->trId, who, who); |
3200 | 1644 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1645 hide_login_progress(gc, _("Write error")); |
3200 | 1646 signoff(gc); |
1647 return; | |
1648 } | |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1649 } |
3200 | 1650 while (t) { |
4491 | 1651 gaim_privacy_permit_remove(gc->account, t->data); |
3200 | 1652 t = t->next; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1653 } |
3200 | 1654 if (t) |
1655 g_slist_free(t); | |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1656 t = NULL; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1657 g_slist_free(md->permit); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1658 md->permit = NULL; |
3200 | 1659 } |
1660 | |
1661 if (md->deny) { | |
4491 | 1662 s = g_slist_nth(gc->account->deny, g_slist_length(md->deny)); |
3200 | 1663 while (s) { |
1664 char *who = s->data; | |
1665 s = s->next; | |
1666 if (!strchr(who, '@')) { | |
1667 t = g_slist_append(t, who); | |
1668 continue; | |
1669 } | |
4349 | 1670 if (g_slist_find(md->deny, who)) { |
3294 | 1671 t = g_slist_append(t, who); |
1672 continue; | |
1673 } | |
4270 | 1674 g_snprintf(buf, sizeof(buf), "ADD %u BL %s %s\r\n", ++md->trId, who, who); |
3200 | 1675 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1676 hide_login_progress(gc, _("Write error")); |
3200 | 1677 signoff(gc); |
1678 return; | |
1679 } | |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1680 } |
3200 | 1681 while (t) { |
4491 | 1682 gaim_privacy_deny_remove(gc->account, t->data); |
3200 | 1683 t = t->next; |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1684 } |
3200 | 1685 if (t) |
1686 g_slist_free(t); | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1687 g_slist_free(md->deny); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1688 md->deny = NULL; |
3200 | 1689 } |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1690 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1691 |
4349 | 1692 static void msn_add_permit(struct gaim_connection *gc, const char *who) |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1693 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1694 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1695 char buf[MSN_BUF_LEN]; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1696 |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1697 if (!strchr(who, '@')) { |
3427 | 1698 g_snprintf(buf, sizeof(buf), |
1699 _("An MSN screenname must be in the form \"user@server.com\". " | |
1700 "Perhaps you meant %s@hotmail.com. No changes were made to your " | |
1701 "allow list."), who); | |
1702 do_error_dialog(_("Invalid MSN screenname"), buf, GAIM_ERROR); | |
4491 | 1703 gaim_privacy_permit_remove(gc->account, who); |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1704 return; |
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1705 } |
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1706 |
4491 | 1707 if (g_slist_find_custom(gc->account->deny, who, (GCompareFunc)strcmp)) { |
3294 | 1708 debug_printf("MSN: Moving %s from BL to AL\n", who); |
4491 | 1709 gaim_privacy_deny_remove(gc->account, who); |
4270 | 1710 g_snprintf(buf, sizeof(buf), "REM %u BL %s\r\n", ++md->trId, who); |
3294 | 1711 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1712 hide_login_progress(gc, _("Write error")); |
3294 | 1713 signoff(gc); |
1714 return; | |
1715 } | |
1716 } | |
4270 | 1717 g_snprintf(buf, sizeof(buf), "ADD %u AL %s %s\r\n", ++md->trId, who, who); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1718 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1719 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1720 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1721 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1722 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1723 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1724 |
4349 | 1725 static void msn_rem_permit(struct gaim_connection *gc, const char *who) |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1726 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1727 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1728 char buf[MSN_BUF_LEN]; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1729 |
4270 | 1730 g_snprintf(buf, sizeof(buf), "REM %u AL %s\r\n", ++md->trId, who); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1731 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1732 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1733 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1734 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1735 } |
4349 | 1736 |
4491 | 1737 gaim_privacy_deny_add(gc->account, who); |
4270 | 1738 g_snprintf(buf, sizeof(buf), "ADD %u BL %s %s\r\n", ++md->trId, who, who); |
3294 | 1739 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1740 hide_login_progress(gc, _("Write error")); |
3294 | 1741 signoff(gc); |
1742 return; | |
1743 } | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1744 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1745 |
4349 | 1746 static void msn_add_deny(struct gaim_connection *gc, const char *who) |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1747 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1748 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1749 char buf[MSN_BUF_LEN]; |
4349 | 1750 |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1751 if (!strchr(who, '@')) { |
3427 | 1752 g_snprintf(buf, sizeof(buf), |
1753 _("An MSN screenname must be in the form \"user@server.com\". " | |
1754 "Perhaps you meant %s@hotmail.com. No changes were made to your " | |
1755 "block list."), who); | |
1756 do_error_dialog(_("Invalid MSN screenname"), buf, GAIM_ERROR); | |
4491 | 1757 gaim_privacy_deny_remove(gc->account, who); |
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1758 return; |
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1759 } |
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1760 |
4491 | 1761 if (g_slist_find_custom(gc->account->permit, who, (GCompareFunc)strcmp)) { |
3294 | 1762 debug_printf("MSN: Moving %s from AL to BL\n", who); |
4491 | 1763 gaim_privacy_permit_remove(gc->account, who); |
4270 | 1764 g_snprintf(buf, sizeof(buf), "REM %u AL %s\r\n", ++md->trId, who); |
3294 | 1765 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1766 hide_login_progress(gc, _("Write error")); |
3294 | 1767 signoff(gc); |
1768 return; | |
1769 } | |
1770 } | |
4349 | 1771 |
3294 | 1772 |
4270 | 1773 g_snprintf(buf, sizeof(buf), "ADD %u BL %s %s\r\n", ++md->trId, who, who); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1774 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1775 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1776 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1777 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1778 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1779 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1780 |
4349 | 1781 static void msn_rem_deny(struct gaim_connection *gc, const char *who) |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1782 { |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1783 struct msn_data *md = gc->proto_data; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1784 char buf[MSN_BUF_LEN]; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1785 |
4270 | 1786 g_snprintf(buf, sizeof(buf), "REM %u BL %s\r\n", ++md->trId, who); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1787 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1788 hide_login_progress(gc, _("Write error")); |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1789 signoff(gc); |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1790 return; |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1791 } |
4349 | 1792 |
4491 | 1793 gaim_privacy_permit_add(gc->account, who); |
4270 | 1794 g_snprintf(buf, sizeof(buf), "ADD %u AL %s %s\r\n", ++md->trId, who, who); |
3294 | 1795 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
4056 | 1796 hide_login_progress(gc, _("Write error")); |
3294 | 1797 signoff(gc); |
1798 return; | |
1799 } | |
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1800 } |
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1801 |
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1802 static void msn_buddy_free(struct buddy *b) |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1803 { |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1804 if (b->proto_data) |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1805 g_free(b->proto_data); |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1806 } |
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1807 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1808 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1809 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1810 GAIM_PROTO_MSN, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1811 OPT_PROTO_MAIL_CHECK, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1812 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1813 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1814 msn_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1815 msn_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1816 msn_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1817 msn_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1818 msn_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1819 msn_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1820 msn_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1821 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1822 msn_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1823 msn_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1824 msn_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1825 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1826 msn_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1827 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1828 msn_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1829 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1830 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1831 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1832 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1833 msn_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1834 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1835 msn_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1836 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1837 msn_rem_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1838 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1839 msn_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1840 msn_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1841 msn_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1842 msn_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1843 msn_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1844 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1845 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1846 msn_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1847 msn_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1848 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1849 msn_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1850 msn_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1851 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1852 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1853 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1854 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1855 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1856 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1857 msn_buddy_free, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1858 msn_convo_closed, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1859 msn_normalize |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1860 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1861 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1862 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1863 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1864 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1865 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1866 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1867 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1868 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1869 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1870 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1871 "prpl-msn", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1872 "MSN", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1873 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1874 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1875 N_("MSN Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1876 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1877 N_("MSN Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1878 "Christian Hammond <chipx86@gnupdate.org>", /**< author */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1879 WEBSITE, /**< homepage */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1880 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1881 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1882 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1883 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1884 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1885 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1886 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1887 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1888 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1889 static void |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1890 __init_plugin(GaimPlugin *plugin) |
2086 | 1891 { |
3572 | 1892 struct proto_user_opt *puo; |
1893 | |
1894 puo = g_new0(struct proto_user_opt, 1); | |
4966 | 1895 puo->label = g_strdup(_("Login Server:")); |
3572 | 1896 puo->def = g_strdup(MSN_SERVER); |
1897 puo->pos = USEROPT_MSNSERVER; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1898 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
3572 | 1899 |
1900 puo = g_new0(struct proto_user_opt, 1); | |
4115 | 1901 puo->label = g_strdup(_("Port:")); |
3572 | 1902 puo->def = g_strdup("1863"); |
1903 puo->pos = USEROPT_MSNPORT; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1904 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
2086 | 1905 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1906 my_protocol = plugin; |
2086 | 1907 } |
1908 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5191
diff
changeset
|
1909 GAIM_INIT_PLUGIN(msn, __init_plugin, info); |