Mercurial > pidgin.yaz
annotate src/protocols/msn/notification.c @ 5508:2a57266df5f6
[gaim-migrate @ 5907]
Fixed the MSN friendly name bug.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sun, 25 May 2003 09:39:44 +0000 |
parents | 4f72b611f0ee |
children | f6ef1871cfcc |
rev | line source |
---|---|
5309 | 1 /** |
2 * @file notification.c Notification server functions | |
3 * | |
4 * gaim | |
5 * | |
6 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 */ | |
22 #include "msn.h" | |
23 #include "notification.h" | |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
24 #include "state.h" |
5309 | 25 #include "error.h" |
26 #include "utils.h" | |
27 | |
28 typedef struct | |
29 { | |
30 struct gaim_connection *gc; | |
31 MsnUser *user; | |
32 | |
33 } MsnPermitAdd; | |
34 | |
35 static GHashTable *notification_commands = NULL; | |
36 static GHashTable *notification_msg_types = NULL; | |
5312
89948fedf782
[gaim-migrate @ 5684]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
37 G_MODULE_IMPORT GSList *connections; |
5309 | 38 |
39 /************************************************************************** | |
5457
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
40 * Utility functions |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
41 **************************************************************************/ |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
42 static gboolean |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
43 __add_buddy(MsnServConn *servconn, MsnUser *user) |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
44 { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
45 MsnSession *session = servconn->session; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
46 struct gaim_connection *gc = session->account->gc; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
47 struct buddy *b; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
48 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
49 b = gaim_find_buddy(gc->account, msn_user_get_passport(user)); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
50 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
51 if (b == NULL) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
52 struct group *g = NULL; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
53 const char *group_name = NULL; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
54 int group_id; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
55 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
56 group_id = msn_user_get_group_id(user); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
57 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
58 if (group_id > -1) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
59 group_name = g_hash_table_lookup(session->group_names, |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
60 &group_id); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
61 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
62 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
63 if (group_name == NULL) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
64 gaim_debug(GAIM_DEBUG_WARNING, "msn", |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
65 "Group ID %d for user %s was not defined.\n", |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
66 group_id, msn_user_get_passport(user)); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
67 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
68 else if ((g = gaim_find_group(group_name)) == NULL) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
69 gaim_debug(GAIM_DEBUG_ERROR, "msn", |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
70 "Group '%s' appears in server-side " |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
71 "buddy list, but not here!", |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
72 group_name); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
73 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
74 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
75 if (g == NULL) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
76 if ((g = gaim_find_group(_("Buddies"))) == NULL) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
77 g = gaim_group_new(_("Buddies")); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
78 gaim_blist_add_group(g, NULL); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
79 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
80 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
81 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
82 b = gaim_buddy_new(gc->account, |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
83 msn_user_get_passport(user), NULL); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
84 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
85 gaim_blist_add_buddy(b, g, NULL); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
86 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
87 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
88 b->proto_data = user; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
89 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
90 serv_got_alias(gc, (char *)msn_user_get_passport(user), |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
91 (char *)msn_user_get_name(user)); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
92 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
93 return TRUE; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
94 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
95 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
96 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
97 /************************************************************************** |
5309 | 98 * Callbacks |
99 **************************************************************************/ | |
100 static void | |
101 msn_accept_add_cb(MsnPermitAdd *pa) | |
102 { | |
103 if (g_slist_find(connections, pa->gc) != NULL) { | |
104 MsnSession *session = pa->gc->proto_data; | |
105 char outparams[MSN_BUF_LEN]; | |
106 | |
107 g_snprintf(outparams, sizeof(outparams), "AL %s %s", | |
108 msn_user_get_passport(pa->user), | |
109 msn_url_encode(msn_user_get_name(pa->user))); | |
110 | |
111 if (msn_servconn_send_command(session->notification_conn, | |
112 "ADD", outparams) <= 0) { | |
113 hide_login_progress(pa->gc, _("Write error")); | |
114 signoff(pa->gc); | |
115 return; | |
116 } | |
117 | |
118 gaim_privacy_permit_add(pa->gc->account, | |
119 msn_user_get_passport(pa->user)); | |
120 build_allow_list(); | |
121 | |
122 show_got_added(pa->gc, NULL, msn_user_get_passport(pa->user), | |
123 msn_user_get_name(pa->user), NULL); | |
124 } | |
125 | |
126 msn_user_destroy(pa->user); | |
127 g_free(pa); | |
128 } | |
129 | |
130 static void | |
131 msn_cancel_add_cb(MsnPermitAdd *pa) | |
132 { | |
133 if (g_slist_find(connections, pa->gc) != NULL) { | |
134 MsnSession *session = pa->gc->proto_data; | |
135 char outparams[MSN_BUF_LEN]; | |
136 | |
137 g_snprintf(outparams, sizeof(outparams), "BL %s %s", | |
138 msn_user_get_passport(pa->user), | |
139 msn_url_encode(msn_user_get_name(pa->user))); | |
140 | |
141 if (msn_servconn_send_command(session->notification_conn, | |
142 "ADD", outparams) <= 0) { | |
143 hide_login_progress(pa->gc, _("Write error")); | |
144 signoff(pa->gc); | |
145 return; | |
146 } | |
147 | |
148 gaim_privacy_deny_add(pa->gc->account, | |
149 msn_user_get_passport(pa->user)); | |
150 build_block_list(); | |
151 } | |
152 | |
153 msn_user_destroy(pa->user); | |
154 g_free(pa); | |
155 } | |
156 | |
157 /************************************************************************** | |
158 * Catch-all commands | |
159 **************************************************************************/ | |
160 static gboolean | |
161 __blank_cmd(MsnServConn *servconn, const char *command, const char **params, | |
162 size_t param_count) | |
163 { | |
164 return TRUE; | |
165 } | |
166 | |
167 static gboolean | |
168 __unknown_cmd(MsnServConn *servconn, const char *command, const char **params, | |
169 size_t param_count) | |
170 { | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
171 char buf[MSN_BUF_LEN]; |
5309 | 172 |
5334
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
173 if (isdigit(*command)) { |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
174 int errnum = atoi(command); |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
175 |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
176 if (errnum == 225) { |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
177 /* |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
178 * Ignore this. It happens as a result of moving a buddy from |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
179 * one group that isn't on the server to another that is. |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
180 * The user doesn't care if the old group was there or not. |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
181 */ |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
182 return TRUE; |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
183 } |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
184 |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
185 g_snprintf(buf, sizeof(buf), "MSN Error: %s\n", |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
186 msn_error_get_text(errnum)); |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
187 } |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
188 else { |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
189 g_snprintf(buf, sizeof(buf), "MSN Error: Unable to parse message\n"); |
bbf2141d30d0
[gaim-migrate @ 5709]
Christian Hammond <chipx86@chipx86.com>
parents:
5333
diff
changeset
|
190 } |
5309 | 191 |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5406
diff
changeset
|
192 gaim_notify_error(servconn->session->account->gc, NULL, buf, NULL); |
5309 | 193 |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
194 return TRUE; |
5309 | 195 } |
196 | |
197 | |
198 /************************************************************************** | |
199 * Login | |
200 **************************************************************************/ | |
201 static gboolean | |
202 __ver_cmd(MsnServConn *servconn, const char *command, const char **params, | |
203 size_t param_count) | |
204 { | |
205 struct gaim_connection *gc = servconn->session->account->gc; | |
206 size_t i; | |
207 gboolean msnp5_found = FALSE; | |
208 | |
209 for (i = 1; i < param_count; i++) { | |
210 if (!strcmp(params[i], "MSNP5")) { | |
211 msnp5_found = TRUE; | |
212 break; | |
213 } | |
214 } | |
215 | |
216 if (!msnp5_found) { | |
217 hide_login_progress(gc, _("Protocol not supported")); | |
218 signoff(gc); | |
219 | |
220 return FALSE; | |
221 } | |
222 | |
223 if (!msn_servconn_send_command(servconn, "INF", NULL)) { | |
224 hide_login_progress(gc, _("Unable to request INF")); | |
225 signoff(gc); | |
226 | |
227 return FALSE; | |
228 } | |
229 | |
230 return TRUE; | |
231 } | |
232 | |
233 static gboolean | |
234 __inf_cmd(MsnServConn *servconn, const char *command, const char **params, | |
235 size_t param_count) | |
236 { | |
237 struct gaim_connection *gc = servconn->session->account->gc; | |
238 char outparams[MSN_BUF_LEN]; | |
239 | |
240 if (strcmp(params[1], "MD5")) { | |
241 hide_login_progress(gc, _("Unable to login using MD5")); | |
242 signoff(gc); | |
243 | |
244 return FALSE; | |
245 } | |
246 | |
247 g_snprintf(outparams, sizeof(outparams), "MD5 I %s", gc->username); | |
248 | |
249 if (!msn_servconn_send_command(servconn, "USR", outparams)) { | |
250 hide_login_progress(gc, _("Unable to send USR")); | |
251 signoff(gc); | |
252 | |
253 return FALSE; | |
254 } | |
255 | |
5326
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
256 set_login_progress(gc, 4, _("Requesting to send password")); |
5309 | 257 |
258 return TRUE; | |
259 } | |
260 | |
261 static gboolean | |
262 __usr_cmd(MsnServConn *servconn, const char *command, const char **params, | |
263 size_t param_count) | |
264 { | |
5326
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
265 MsnSession *session = servconn->session; |
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
266 struct gaim_connection *gc = session->account->gc; |
5309 | 267 char outparams[MSN_BUF_LEN]; |
268 | |
269 /* We're either getting the challenge or the OK. Let's find out. */ | |
270 if (!g_ascii_strcasecmp(params[1], "OK")) { | |
5508
2a57266df5f6
[gaim-migrate @ 5907]
Christian Hammond <chipx86@chipx86.com>
parents:
5506
diff
changeset
|
271 const char *friendly = params[3]; |
2a57266df5f6
[gaim-migrate @ 5907]
Christian Hammond <chipx86@chipx86.com>
parents:
5506
diff
changeset
|
272 |
5309 | 273 /* OK */ |
274 | |
5508
2a57266df5f6
[gaim-migrate @ 5907]
Christian Hammond <chipx86@chipx86.com>
parents:
5506
diff
changeset
|
275 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friendly); |
2a57266df5f6
[gaim-migrate @ 5907]
Christian Hammond <chipx86@chipx86.com>
parents:
5506
diff
changeset
|
276 |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
277 session->syncing_lists = TRUE; |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
278 |
5309 | 279 if (!msn_servconn_send_command(servconn, "SYN", "0")) { |
280 hide_login_progress(gc, _("Unable to write")); | |
281 signoff(gc); | |
282 | |
283 return FALSE; | |
284 } | |
5326
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
285 |
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
286 set_login_progress(session->account->gc, 4, _("Retrieving buddy list")); |
5309 | 287 } |
288 else { | |
289 /* Challenge */ | |
290 const char *challenge = params[3]; | |
291 char buf[MSN_BUF_LEN]; | |
292 md5_state_t st; | |
293 md5_byte_t di[16]; | |
294 int i; | |
295 | |
296 g_snprintf(buf, sizeof(buf), "%s%s", challenge, gc->password); | |
297 | |
298 md5_init(&st); | |
299 md5_append(&st, (const md5_byte_t *)buf, strlen(buf)); | |
300 md5_finish(&st, di); | |
301 | |
302 g_snprintf(outparams, sizeof(outparams), "MD5 S "); | |
303 | |
304 for (i = 0; i < 16; i++) { | |
305 g_snprintf(buf, sizeof(buf), "%02x", di[i]); | |
306 strcat(outparams, buf); | |
307 } | |
308 | |
309 if (!msn_servconn_send_command(servconn, "USR", outparams)) { | |
310 hide_login_progress(gc, _("Unable to send password")); | |
311 signoff(gc); | |
312 | |
313 return FALSE; | |
314 } | |
315 | |
316 set_login_progress(gc, 4, _("Password sent")); | |
317 } | |
318 | |
319 return TRUE; | |
320 } | |
321 | |
322 /************************************************************************** | |
323 * Log out | |
324 **************************************************************************/ | |
325 static gboolean | |
326 __out_cmd(MsnServConn *servconn, const char *command, const char **params, | |
327 size_t param_count) | |
328 { | |
329 struct gaim_connection *gc = servconn->session->account->gc; | |
330 | |
331 if (!g_ascii_strcasecmp(params[0], "OTH")) { | |
332 hide_login_progress(gc, | |
333 _("You have been disconnected. You have " | |
334 "signed on from another location.")); | |
335 signoff(gc); | |
336 } | |
337 else if (!g_ascii_strcasecmp(params[0], "SSD")) { | |
338 hide_login_progress(gc, | |
339 _("You have been disconnected. The MSN servers " | |
340 "are going down temporarily.")); | |
341 signoff(gc); | |
342 } | |
343 | |
344 return FALSE; | |
345 } | |
346 | |
347 /************************************************************************** | |
348 * Messages | |
349 **************************************************************************/ | |
350 static gboolean | |
351 __msg_cmd(MsnServConn *servconn, const char *command, const char **params, | |
352 size_t param_count) | |
353 { | |
354 gaim_debug(GAIM_DEBUG_INFO, "msn", "Found message. Parsing.\n"); | |
355 | |
356 servconn->parsing_msg = TRUE; | |
357 servconn->msg_passport = g_strdup(params[0]); | |
358 servconn->msg_friendly = g_strdup(params[1]); | |
359 servconn->msg_len = atoi(params[2]); | |
360 | |
361 return TRUE; | |
362 } | |
363 | |
364 /************************************************************************** | |
365 * Challenges | |
366 **************************************************************************/ | |
367 static gboolean | |
368 __chl_cmd(MsnServConn *servconn, const char *command, const char **params, | |
369 size_t param_count) | |
370 { | |
371 struct gaim_connection *gc = servconn->session->account->gc; | |
372 char buf[MSN_BUF_LEN]; | |
373 char buf2[3]; | |
374 md5_state_t st; | |
375 md5_byte_t di[16]; | |
376 int i; | |
377 | |
378 md5_init(&st); | |
379 md5_append(&st, (const md5_byte_t *)params[1], strlen(params[1])); | |
380 md5_append(&st, (const md5_byte_t *)"Q1P7W2E4J9R8U3S5", | |
381 strlen("Q1P7W2E4J9R8U3S5")); | |
382 md5_finish(&st, di); | |
383 | |
384 g_snprintf(buf, sizeof(buf), | |
385 "QRY %u msmsgs@msnmsgr.com 32\r\n", | |
386 servconn->session->trId++); | |
387 | |
388 for (i = 0; i < 16; i++) { | |
389 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
390 strcat(buf, buf2); | |
391 } | |
392 | |
393 if (msn_servconn_write(servconn, buf, strlen(buf)) <= 0) { | |
394 hide_login_progress(gc, _("Unable to write to server")); | |
395 signoff(gc); | |
396 } | |
397 | |
398 return TRUE; | |
399 } | |
400 | |
401 /************************************************************************** | |
402 * Buddy Lists | |
403 **************************************************************************/ | |
404 static gboolean | |
405 __add_cmd(MsnServConn *servconn, const char *command, const char **params, | |
406 size_t param_count) | |
407 { | |
408 MsnSession *session = servconn->session; | |
5457
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
409 MsnUser *user; |
5309 | 410 struct gaim_connection *gc = session->account->gc; |
411 MsnPermitAdd *pa; | |
412 GSList *sl; | |
413 const char *list, *passport; | |
414 char *friend; | |
415 char msg[MSN_BUF_LEN]; | |
416 | |
417 list = params[1]; | |
418 passport = params[3]; | |
419 | |
420 friend = msn_url_decode(params[4]); | |
421 | |
5457
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
422 if (!g_ascii_strcasecmp(list, "FL")) { |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
423 user = msn_user_new(session, passport, friend); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
424 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
425 __add_buddy(servconn, user); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
426 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
427 return TRUE; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
428 } |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
429 else if (g_ascii_strcasecmp(list, "RL")) |
5309 | 430 return TRUE; |
431 | |
432 for (sl = gc->account->permit; sl != NULL; sl = sl->next) { | |
433 if (!gaim_utf8_strcasecmp(sl->data, passport)) | |
434 return TRUE; | |
435 } | |
436 | |
5457
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
437 user = msn_user_new(session, passport, friend); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
438 |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
439 pa = g_new0(MsnPermitAdd, 1); |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
440 pa->user = user; |
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
441 pa->gc = gc; |
5309 | 442 |
443 g_snprintf(msg, sizeof(msg), | |
444 _("The user %s (%s) wants to add %s to his or her buddy list."), | |
445 passport, friend, gc->username); | |
446 | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
447 gaim_request_action(gc, NULL, msg, NULL, 0, pa, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
448 _("Authorize"), G_CALLBACK(msn_accept_add_cb), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
449 _("Deny"), G_CALLBACK(msn_cancel_add_cb)); |
5309 | 450 |
451 return TRUE; | |
452 } | |
453 | |
454 static gboolean | |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
455 __adg_cmd(MsnServConn *servconn, const char *command, const char **params, |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
456 size_t param_count) |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
457 { |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
458 MsnSession *session = servconn->session; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
459 gint *group_id; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
460 char *group_name; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
461 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
462 group_id = g_new(gint, 1); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
463 *group_id = atoi(params[3]); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
464 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
465 group_name = msn_url_decode(params[2]); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
466 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
467 gaim_debug(GAIM_DEBUG_INFO, "msn", "Added group %s (id %d)\n", |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
468 group_name, group_id); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
469 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
470 g_hash_table_insert(session->group_ids, group_name, group_id); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
471 g_hash_table_insert(session->group_names, group_id, g_strdup(group_name)); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
472 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
473 return TRUE; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
474 } |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
475 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
476 static gboolean |
5309 | 477 __blp_cmd(MsnServConn *servconn, const char *command, const char **params, |
478 size_t param_count) | |
479 { | |
480 struct gaim_connection *gc = servconn->session->account->gc; | |
481 | |
482 if (!g_ascii_strcasecmp(params[2], "AL")) { | |
483 /* | |
484 * If the current setting is AL, messages from users who | |
485 * are not in BL will be delivered. | |
486 * | |
487 * In other words, deny some. | |
488 */ | |
489 gc->account->permdeny = DENY_SOME; | |
490 } | |
491 else { | |
492 /* If the current setting is BL, only messages from people | |
493 * who are in the AL will be delivered. | |
494 * | |
495 * In other words, permit some. | |
496 */ | |
497 gc->account->permdeny = PERMIT_SOME; | |
498 } | |
499 | |
500 return TRUE; | |
501 } | |
502 | |
503 static gboolean | |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
504 __bpr_cmd(MsnServConn *servconn, const char *command, const char **params, |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
505 size_t param_count) |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
506 { |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
507 MsnSession *session = servconn->session; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
508 struct gaim_connection *gc = session->account->gc; |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
509 const char *passport, *type, *value; |
5375
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
510 struct buddy *b; |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
511 MsnUser *user; |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
512 |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
513 passport = params[1]; |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
514 type = params[2]; |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
515 value = params[3]; |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
516 |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
517 user = msn_users_find_with_passport(session->users, passport); |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
518 |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
519 if (value != NULL) { |
5375
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
520 if (!strcmp(type, "MOB")) { |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
521 if (!strcmp(value, "Y")) { |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
522 user->mobile = TRUE; |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
523 |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
524 if ((b = gaim_find_buddy(gc->account, passport)) != NULL) { |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
525 if (GAIM_BUDDY_IS_ONLINE(b)) { |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
526 serv_got_update(gc, (char *)passport, |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
527 1, 0, 0, 0, b->uc); |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
528 } |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
529 } |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
530 } |
d8ebee2f749c
[gaim-migrate @ 5751]
Christian Hammond <chipx86@chipx86.com>
parents:
5373
diff
changeset
|
531 } |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
532 else if (!strcmp(type, "PHH")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
533 msn_user_set_home_phone(user, msn_url_decode(value)); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
534 else if (!strcmp(type, "PHW")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
535 msn_user_set_work_phone(user, msn_url_decode(value)); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
536 else if (!strcmp(type, "PHM")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
537 msn_user_set_mobile_phone(user, msn_url_decode(value)); |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
538 } |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
539 |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
540 return TRUE; |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
541 } |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
542 |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
543 static gboolean |
5309 | 544 __fln_cmd(MsnServConn *servconn, const char *command, const char **params, |
545 size_t param_count) | |
546 { | |
547 struct gaim_connection *gc = servconn->session->account->gc; | |
548 | |
549 serv_got_update(gc, (char *)params[0], 0, 0, 0, 0, 0); | |
550 | |
551 return TRUE; | |
552 } | |
553 | |
554 static gboolean | |
555 __iln_cmd(MsnServConn *servconn, const char *command, const char **params, | |
556 size_t param_count) | |
557 { | |
558 struct gaim_connection *gc = servconn->session->account->gc; | |
559 int status = 0; | |
560 const char *state, *passport, *friend; | |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
561 struct buddy *b; |
5309 | 562 |
563 state = params[1]; | |
564 passport = params[2]; | |
565 friend = msn_url_decode(params[3]); | |
566 | |
567 serv_got_alias(gc, (char *)passport, (char *)friend); | |
568 | |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
569 if ((b = gaim_find_buddy(gc->account, passport)) != NULL) |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
570 status |= ((((b->uc) >> 1) & 0xF0) << 1); |
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
571 |
5309 | 572 if (!g_ascii_strcasecmp(state, "BSY")) |
573 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); | |
574 else if (!g_ascii_strcasecmp(state, "IDL")) | |
575 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); | |
576 else if (!g_ascii_strcasecmp(state, "BRB")) | |
577 status |= UC_UNAVAILABLE | (MSN_BRB << 1); | |
578 else if (!g_ascii_strcasecmp(state, "AWY")) | |
579 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); | |
580 else if (!g_ascii_strcasecmp(state, "PHN")) | |
581 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); | |
582 else if (!g_ascii_strcasecmp(state, "LUN")) | |
583 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); | |
584 | |
585 serv_got_update(gc, (char *)passport, 1, 0, 0, 0, status); | |
586 | |
587 return TRUE; | |
588 } | |
589 | |
590 static gboolean | |
591 __lsg_cmd(MsnServConn *servconn, const char *command, const char **params, | |
592 size_t param_count) | |
593 { | |
594 MsnSession *session = servconn->session; | |
595 struct group *g; | |
596 const char *name; | |
597 int group_num, num_groups, group_id; | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
598 gint *group_id_1, *group_id_2; |
5309 | 599 |
600 group_num = atoi(params[2]); | |
601 num_groups = atoi(params[3]); | |
602 group_id = atoi(params[4]); | |
603 name = msn_url_decode(params[5]); | |
604 | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
605 if (num_groups == 0) |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
606 return TRUE; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
607 |
5309 | 608 if (group_num == 1) { |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
609 session->group_names = g_hash_table_new_full(g_int_hash, g_int_equal, |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
610 g_free, g_free); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
611 session->group_ids = g_hash_table_new_full(g_str_hash, g_str_equal, |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
612 g_free, g_free); |
5309 | 613 } |
614 | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
615 group_id_1 = g_new(gint, 1); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
616 group_id_2 = g_new(gint, 1); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
617 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
618 *group_id_1 = group_id; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
619 *group_id_2 = group_id; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
620 |
5323
29754a7d94e5
[gaim-migrate @ 5695]
Christian Hammond <chipx86@chipx86.com>
parents:
5322
diff
changeset
|
621 if (!strcmp(name, "~")) |
29754a7d94e5
[gaim-migrate @ 5695]
Christian Hammond <chipx86@chipx86.com>
parents:
5322
diff
changeset
|
622 name = _("Buddies"); |
29754a7d94e5
[gaim-migrate @ 5695]
Christian Hammond <chipx86@chipx86.com>
parents:
5322
diff
changeset
|
623 |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
624 g_hash_table_insert(session->group_names, group_id_1, g_strdup(name)); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
625 g_hash_table_insert(session->group_ids, g_strdup(name), group_id_2); |
5309 | 626 |
627 if ((g = gaim_find_group(name)) == NULL) { | |
628 g = gaim_group_new(name); | |
629 gaim_blist_add_group(g, NULL); | |
630 } | |
631 | |
632 return TRUE; | |
633 } | |
634 | |
635 static gboolean | |
636 __lst_cmd(MsnServConn *servconn, const char *command, const char **params, | |
637 size_t param_count) | |
638 { | |
639 MsnSession *session = servconn->session; | |
640 struct gaim_connection *gc = session->account->gc; | |
641 int user_num; | |
642 int num_users; | |
643 const char *type; | |
644 const char *passport; | |
645 const char *friend; | |
646 | |
647 user_num = atoi(params[3]); | |
648 num_users = atoi(params[4]); | |
649 | |
650 if (user_num == 0 && num_users == 0) | |
651 return TRUE; /* There are no users on this list. */ | |
652 | |
653 type = params[1]; | |
654 passport = params[5]; | |
655 friend = msn_url_decode(params[6]); | |
656 | |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
657 if (session->syncing_lists && session->lists_synced) |
5406
9acf4832c0dc
[gaim-migrate @ 5782]
Christian Hammond <chipx86@chipx86.com>
parents:
5385
diff
changeset
|
658 return TRUE; |
9acf4832c0dc
[gaim-migrate @ 5782]
Christian Hammond <chipx86@chipx86.com>
parents:
5385
diff
changeset
|
659 |
5309 | 660 if (!g_ascii_strcasecmp(type, "FL") && user_num != 0) { |
661 /* These are users on our contact list. */ | |
662 MsnUser *user; | |
663 | |
664 user = msn_user_new(session, passport, friend); | |
665 | |
666 if (param_count == 8) | |
667 msn_user_set_group_id(user, atoi(params[7])); | |
668 | |
669 session->lists.forward = g_slist_append(session->lists.forward, user); | |
670 } | |
671 else if (!g_ascii_strcasecmp(type, "AL") && user_num != 0) { | |
672 /* These are users who are allowed to see our status. */ | |
673 if (g_slist_find_custom(gc->account->deny, passport, | |
674 (GCompareFunc)strcmp)) { | |
675 | |
676 gaim_debug(GAIM_DEBUG_INFO, "msn", | |
677 "Moving user from deny list to permit: %s (%s)\n", | |
678 passport, friend); | |
679 | |
680 gaim_privacy_deny_remove(gc->account, passport); | |
681 } | |
682 | |
683 gaim_privacy_permit_add(gc->account, passport); | |
684 } | |
685 else if (!g_ascii_strcasecmp(type, "BL") && user_num != 0) { | |
686 /* These are users who are not allowed to see our status. */ | |
687 gaim_privacy_deny_add(gc->account, passport); | |
688 } | |
689 else if (!g_ascii_strcasecmp(type, "RL")) { | |
690 /* These are users who have us on their contact list. */ | |
691 if (user_num > 0) { | |
692 gboolean new_entry = TRUE; | |
693 | |
694 if (g_slist_find_custom(gc->account->permit, passport, | |
695 (GCompareFunc)g_ascii_strcasecmp)) { | |
696 new_entry = FALSE; | |
697 } | |
698 | |
699 if (g_slist_find_custom(gc->account->deny, passport, | |
700 (GCompareFunc)g_ascii_strcasecmp)) { | |
701 new_entry = FALSE; | |
702 } | |
703 | |
704 if (new_entry) { | |
705 MsnPermitAdd *pa; | |
706 char msg[MSN_BUF_LEN]; | |
707 | |
708 gaim_debug(GAIM_DEBUG_WARNING, "msn", | |
709 "Unresolved MSN RL entry: %s\n", passport); | |
710 | |
711 pa = g_new0(MsnPermitAdd, 1); | |
712 pa->user = msn_user_new(session, passport, friend); | |
713 pa->gc = gc; | |
714 | |
715 g_snprintf(msg, sizeof(msg), | |
716 _("The user %s (%s) wants to add you to their " | |
717 "buddy list."), | |
718 msn_user_get_passport(pa->user), | |
719 msn_user_get_name(pa->user)); | |
720 | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
721 gaim_request_action(gc, NULL, msg, NULL, 0, pa, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
722 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
723 G_CALLBACK(msn_accept_add_cb), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
724 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5479
diff
changeset
|
725 G_CALLBACK(msn_cancel_add_cb)); |
5309 | 726 } |
727 } | |
728 | |
729 if (user_num != num_users) | |
730 return TRUE; /* This isn't the last one in the RL. */ | |
731 | |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
732 /* Now we're at the last one, so we can do final work. */ |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
733 if (!session->lists_synced) { |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
734 if (!msn_servconn_send_command(servconn, "CHG", "NLN")) { |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
735 hide_login_progress(gc, _("Unable to write")); |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
736 signoff(gc); |
5309 | 737 |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
738 return FALSE; |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
739 } |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
740 |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
741 account_online(gc); |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
742 serv_finish_login(gc); |
5309 | 743 } |
744 | |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
745 if (session->lists.allow == NULL) |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
746 session->lists.allow = g_slist_copy(gc->account->permit); |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
747 else |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
748 session->lists.allow = g_slist_concat(session->lists.allow, |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
749 gc->account->permit); |
5309 | 750 |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
751 if (session->lists.block == NULL) |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
752 session->lists.block = g_slist_copy(gc->account->deny); |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
753 else |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
754 session->lists.block = g_slist_concat(session->lists.block, |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
755 gc->account->deny); |
5309 | 756 |
757 while (session->lists.forward != NULL) { | |
758 MsnUser *user = session->lists.forward->data; | |
759 | |
760 session->lists.forward = g_slist_remove(session->lists.forward, | |
761 user); | |
762 | |
5457
c8c290021b7b
[gaim-migrate @ 5845]
Christian Hammond <chipx86@chipx86.com>
parents:
5456
diff
changeset
|
763 __add_buddy(servconn, user); |
5309 | 764 } |
5406
9acf4832c0dc
[gaim-migrate @ 5782]
Christian Hammond <chipx86@chipx86.com>
parents:
5385
diff
changeset
|
765 |
5456
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
766 session->syncing_lists = FALSE; |
40e976d42028
[gaim-migrate @ 5844]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
767 session->lists_synced = TRUE; |
5309 | 768 } |
769 | |
770 return TRUE; | |
771 } | |
772 | |
773 static gboolean | |
774 __nln_cmd(MsnServConn *servconn, const char *command, const char **params, | |
775 size_t param_count) | |
776 { | |
777 MsnSession *session = servconn->session; | |
778 struct gaim_connection *gc = session->account->gc; | |
779 const char *state; | |
780 const char *passport; | |
781 const char *friend; | |
782 int status = 0; | |
783 | |
784 state = params[0]; | |
785 passport = params[1]; | |
786 friend = msn_url_decode(params[2]); | |
787 | |
788 serv_got_alias(gc, (char *)passport, (char *)friend); | |
789 | |
790 if (!g_ascii_strcasecmp(state, "BSY")) | |
791 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); | |
792 else if (!g_ascii_strcasecmp(state, "IDL")) | |
793 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); | |
794 else if (!g_ascii_strcasecmp(state, "BRB")) | |
795 status |= UC_UNAVAILABLE | (MSN_BRB << 1); | |
796 else if (!g_ascii_strcasecmp(state, "AWY")) | |
797 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); | |
798 else if (!g_ascii_strcasecmp(state, "PHN")) | |
799 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); | |
800 else if (!g_ascii_strcasecmp(state, "LUN")) | |
801 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); | |
802 | |
803 serv_got_update(gc, (char *)passport, 1, 0, 0, 0, status); | |
804 | |
805 return TRUE; | |
806 } | |
807 | |
808 static gboolean | |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
809 __prp_cmd(MsnServConn *servconn, const char *command, const char **params, |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
810 size_t param_count) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
811 { |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
812 MsnSession *session = servconn->session; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
813 const char *type, *value; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
814 |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
815 type = params[2]; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
816 value = params[3]; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
817 |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
818 if (param_count == 4) { |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
819 if (!strcmp(type, "PHH")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
820 msn_user_set_home_phone(session->user, msn_url_decode(value)); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
821 else if (!strcmp(type, "PHW")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
822 msn_user_set_work_phone(session->user, msn_url_decode(value)); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
823 else if (!strcmp(type, "PHM")) |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
824 msn_user_set_mobile_phone(session->user, msn_url_decode(value)); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
825 } |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
826 |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
827 return TRUE; |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
828 } |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
829 |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
830 static gboolean |
5309 | 831 __rea_cmd(MsnServConn *servconn, const char *command, const char **params, |
832 size_t param_count) | |
833 { | |
834 MsnSession *session = servconn->session; | |
835 struct gaim_connection *gc = session->account->gc; | |
836 char *friend; | |
837 | |
5479
175de59cd1c5
[gaim-migrate @ 5875]
Christian Hammond <chipx86@chipx86.com>
parents:
5457
diff
changeset
|
838 friend = msn_url_decode(params[3]); |
5309 | 839 |
5479
175de59cd1c5
[gaim-migrate @ 5875]
Christian Hammond <chipx86@chipx86.com>
parents:
5457
diff
changeset
|
840 gaim_debug(GAIM_DEBUG_INFO, "msn", "Setting friendly name to %s\n", |
175de59cd1c5
[gaim-migrate @ 5875]
Christian Hammond <chipx86@chipx86.com>
parents:
5457
diff
changeset
|
841 friend); |
5309 | 842 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
843 | |
844 return TRUE; | |
845 } | |
846 | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
847 static gboolean |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
848 __reg_cmd(MsnServConn *servconn, const char *command, const char **params, |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
849 size_t param_count) |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
850 { |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
851 MsnSession *session = servconn->session; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
852 gint *group_id; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
853 char *group_name; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
854 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
855 group_id = g_new(gint, 1); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
856 *group_id = atoi(params[2]); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
857 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
858 group_name = msn_url_decode(params[3]); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
859 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
860 gaim_debug(GAIM_DEBUG_INFO, "msn", "Renamed group %s to %s\n", |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
861 g_hash_table_lookup(session->group_names, group_id), |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
862 group_name); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
863 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
864 g_hash_table_replace(session->group_names, group_id, g_strdup(group_name)); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
865 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
866 g_hash_table_remove(session->group_ids, group_name); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
867 g_hash_table_insert(session->group_ids, group_name, group_id); |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
868 |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
869 return TRUE; |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
870 } |
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
871 |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
872 static gboolean |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
873 __rem_cmd(MsnServConn *servconn, const char *command, const char **params, |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
874 size_t param_count) |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
875 { |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
876 MsnSession *session = servconn->session; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
877 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
878 /* I hate this. */ |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
879 if (session->moving_buddy) { |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
880 struct gaim_connection *gc = session->account->gc; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
881 const char *passport = params[3]; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
882 char outparams[MSN_BUF_LEN]; |
5327
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
883 int *group_id; |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
884 |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
885 group_id = g_hash_table_lookup(session->group_ids, |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
886 session->dest_group_name); |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
887 |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
888 g_free(session->dest_group_name); |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
889 session->dest_group_name = NULL; |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
890 session->moving_buddy = FALSE; |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
891 |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
892 if (group_id == NULL) { |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
893 gaim_debug(GAIM_DEBUG_ERROR, "msn", |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
894 "Still don't have a group ID for %s while moving %s!\n", |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
895 session->dest_group_name, passport); |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
896 return TRUE; |
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
897 } |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
898 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
899 g_snprintf(outparams, sizeof(outparams), "FL %s %s %d", |
5327
b716ffc25d2d
[gaim-migrate @ 5700]
Christian Hammond <chipx86@chipx86.com>
parents:
5326
diff
changeset
|
900 passport, passport, *group_id); |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
901 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
902 if (!msn_servconn_send_command(session->notification_conn, |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
903 "ADD", outparams)) { |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
904 hide_login_progress(gc, _("Write error")); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
905 signoff(gc); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
906 } |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
907 } |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
908 |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
909 return TRUE; |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
910 } |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
911 |
5309 | 912 /************************************************************************** |
913 * Misc commands | |
914 **************************************************************************/ | |
915 static gboolean | |
916 __url_cmd(MsnServConn *servconn, const char *command, const char **params, | |
917 size_t param_count) | |
918 { | |
919 MsnSession *session = servconn->session; | |
920 struct gaim_connection *gc = session->account->gc; | |
921 const char *rru; | |
922 const char *url; | |
923 md5_state_t st; | |
924 md5_byte_t di[16]; | |
925 FILE *fd; | |
926 char buf[2048]; | |
927 char buf2[3]; | |
928 char sendbuf[64]; | |
929 int i; | |
930 | |
931 rru = params[1]; | |
932 url = params[2]; | |
933 | |
934 g_snprintf(buf, sizeof(buf), "%s%lu%s", | |
935 session->passport_info.mspauth, | |
936 time(NULL) - session->passport_info.sl, gc->password); | |
937 | |
938 md5_init(&st); | |
939 md5_append(&st, (const md5_byte_t *)buf, strlen(buf)); | |
940 md5_finish(&st, di); | |
941 | |
942 memset(sendbuf, 0, sizeof(sendbuf)); | |
943 | |
944 for (i = 0; i < 16; i++) { | |
945 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
946 strcat(sendbuf, buf2); | |
947 } | |
948 | |
949 if (session->passport_info.file != NULL) { | |
950 unlink(session->passport_info.file); | |
951 g_free(session->passport_info.file); | |
952 } | |
953 | |
954 if ((fd = gaim_mkstemp(&session->passport_info.file)) == NULL) { | |
955 gaim_debug(GAIM_DEBUG_ERROR, "msn", | |
956 "Error opening temp passport file: %s\n", | |
957 strerror(errno)); | |
958 } | |
959 else { | |
960 fputs("<html>\n" | |
961 "<head>\n" | |
962 "<noscript>\n" | |
963 "<meta http-equiv=\"Refresh\" content=\"0; " | |
964 "url=http://www.hotmail.com\">\n" | |
965 "</noscript>\n" | |
966 "</head>\n\n", | |
967 fd); | |
968 | |
969 fprintf(fd, "<body onload=\"document.pform.submit(); \">\n"); | |
970 fprintf(fd, "<form name=\"pform\" action=\"%s\" method=\"POST\">\n\n", | |
971 url); | |
972 fprintf(fd, "<input type=\"hidden\" name=\"mode\" value=\"ttl\">\n"); | |
973 fprintf(fd, "<input type=\"hidden\" name=\"login\" value=\"%s\">\n", | |
974 gc->username); | |
975 fprintf(fd, "<input type=\"hidden\" name=\"username\" value=\"%s\">\n", | |
976 gc->username); | |
977 fprintf(fd, "<input type=\"hidden\" name=\"sid\" value=\"%s\">\n", | |
978 session->passport_info.sid); | |
979 fprintf(fd, "<input type=\"hidden\" name=\"kv\" value=\"%s\">\n", | |
980 session->passport_info.kv); | |
981 fprintf(fd, "<input type=\"hidden\" name=\"id\" value=\"2\">\n"); | |
982 fprintf(fd, "<input type=\"hidden\" name=\"sl\" value=\"%ld\">\n", | |
983 time(NULL) - session->passport_info.sl); | |
984 fprintf(fd, "<input type=\"hidden\" name=\"rru\" value=\"%s\">\n", | |
985 rru); | |
986 fprintf(fd, "<input type=\"hidden\" name=\"auth\" value=\"%s\">\n", | |
987 session->passport_info.mspauth); | |
988 fprintf(fd, "<input type=\"hidden\" name=\"creds\" value=\"%s\">\n", | |
989 sendbuf); /* TODO Digest me (huh? -- ChipX86) */ | |
990 fprintf(fd, "<input type=\"hidden\" name=\"svc\" value=\"mail\">\n"); | |
991 fprintf(fd, "<input type=\"hiden\" name=\"js\" value=\"yes\">\n"); | |
992 fprintf(fd, "</form></body>\n"); | |
993 fprintf(fd, "</html>\n"); | |
994 | |
995 if (fclose(fd)) { | |
996 gaim_debug(GAIM_DEBUG_ERROR, "msn", | |
997 "Error closing temp passport file: %s\n", | |
998 strerror(errno)); | |
999 | |
1000 unlink(session->passport_info.file); | |
1001 g_free(session->passport_info.file); | |
1002 } | |
1003 else { | |
1004 /* | |
1005 * Renaming file with .html extension, so that the | |
1006 * win32 open_url will work. | |
1007 */ | |
1008 char *tmp; | |
1009 | |
1010 if ((tmp = g_strdup_printf("%s.html", | |
1011 session->passport_info.file)) != NULL) { | |
1012 | |
1013 if (rename(session->passport_info.file, tmp) == 0) { | |
1014 g_free(session->passport_info.file); | |
1015 session->passport_info.file = tmp; | |
1016 } | |
1017 else | |
1018 g_free(tmp); | |
1019 } | |
1020 } | |
1021 } | |
1022 | |
1023 return TRUE; | |
1024 } | |
1025 /************************************************************************** | |
1026 * Switchboards | |
1027 **************************************************************************/ | |
1028 static gboolean | |
1029 __rng_cmd(MsnServConn *servconn, const char *command, const char **params, | |
1030 size_t param_count) | |
1031 { | |
1032 MsnSession *session = servconn->session; | |
1033 MsnSwitchBoard *swboard; | |
1034 MsnUser *user; | |
1035 const char *session_id; | |
1036 char *host, *c; | |
1037 int port; | |
1038 | |
1039 session_id = params[0]; | |
1040 | |
1041 host = g_strdup(params[1]); | |
1042 | |
1043 if ((c = strchr(host, ':')) != NULL) { | |
1044 *c = '\0'; | |
1045 port = atoi(c + 1); | |
1046 } | |
1047 else | |
1048 port = 1863; | |
1049 | |
1050 swboard = msn_switchboard_new(session); | |
1051 | |
1052 user = msn_user_new(session, params[4], NULL); | |
1053 | |
1054 msn_switchboard_set_invited(swboard, TRUE); | |
1055 msn_switchboard_set_session_id(swboard, params[0]); | |
1056 msn_switchboard_set_auth_key(swboard, params[3]); | |
1057 msn_switchboard_set_user(swboard, user); | |
1058 | |
1059 if (!msn_switchboard_connect(swboard, host, port)) { | |
1060 gaim_debug(GAIM_DEBUG_ERROR, "msn", | |
1061 "Unable to connect to switchboard on %s, port %d\n", | |
1062 host, port); | |
1063 | |
1064 g_free(host); | |
1065 | |
1066 return FALSE; | |
1067 } | |
1068 | |
1069 g_free(host); | |
1070 | |
1071 return TRUE; | |
1072 } | |
1073 | |
1074 static gboolean | |
1075 __xfr_cmd(MsnServConn *servconn, const char *command, const char **params, | |
1076 size_t param_count) | |
1077 { | |
1078 MsnSession *session = servconn->session; | |
1079 MsnSwitchBoard *swboard; | |
1080 struct gaim_connection *gc = session->account->gc; | |
1081 char *host; | |
1082 char *c; | |
1083 int port; | |
1084 | |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1085 if (strcmp(params[1], "SB") && strcmp(params[1], "NS")) { |
5309 | 1086 hide_login_progress(gc, _("Got invalid XFR")); |
1087 signoff(gc); | |
1088 | |
1089 return FALSE; | |
1090 } | |
1091 | |
1092 host = g_strdup(params[2]); | |
1093 | |
1094 if ((c = strchr(host, ':')) != NULL) { | |
1095 *c = '\0'; | |
1096 port = atoi(c + 1); | |
1097 } | |
1098 else | |
1099 port = 1863; | |
1100 | |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1101 if (!strcmp(params[1], "SB")) { |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1102 swboard = msn_session_find_unused_switch(session); |
5309 | 1103 |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1104 if (swboard == NULL) { |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1105 gaim_debug(GAIM_DEBUG_ERROR, "msn", |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1106 "Received an XFR SB request when there's no unused " |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1107 "switchboards!\n"); |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1108 return FALSE; |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1109 } |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1110 |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1111 msn_switchboard_set_auth_key(swboard, params[4]); |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1112 |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1113 if (!msn_switchboard_connect(swboard, host, port)) { |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1114 gaim_debug(GAIM_DEBUG_ERROR, "msn", |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1115 "Unable to connect to switchboard on %s, port %d\n", |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1116 host, port); |
5309 | 1117 |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1118 g_free(host); |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1119 |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1120 return FALSE; |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1121 } |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1122 } |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1123 else if (!strcmp(params[1], "NS")) { |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1124 msn_servconn_destroy(session->notification_conn); |
5309 | 1125 |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1126 session->notification_conn = msn_notification_new(session, host, port); |
5309 | 1127 |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1128 if (!msn_servconn_connect(session->notification_conn)) { |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1129 hide_login_progress(gc, _("Unable to transfer to " |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1130 "notification server")); |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1131 signoff(gc); |
5309 | 1132 |
5385
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1133 return FALSE; |
150cf1615098
[gaim-migrate @ 5761]
Christian Hammond <chipx86@chipx86.com>
parents:
5375
diff
changeset
|
1134 } |
5309 | 1135 } |
1136 | |
1137 g_free(host); | |
1138 | |
1139 return TRUE; | |
1140 } | |
1141 | |
1142 /************************************************************************** | |
1143 * Message Types | |
1144 **************************************************************************/ | |
1145 static gboolean | |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1146 __profile_msg(MsnServConn *servconn, MsnMessage *msg) |
5309 | 1147 { |
1148 MsnSession *session = servconn->session; | |
1149 const char *value; | |
1150 | |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1151 if (strcmp(servconn->msg_passport, "Hotmail")) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1152 /* This isn't an official message. */ |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1153 return TRUE; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1154 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1155 |
5309 | 1156 if ((value = msn_message_get_attr(msg, "kv")) != NULL) |
1157 session->passport_info.kv = g_strdup(value); | |
1158 | |
1159 if ((value = msn_message_get_attr(msg, "sid")) != NULL) | |
1160 session->passport_info.sid = g_strdup(value); | |
1161 | |
1162 if ((value = msn_message_get_attr(msg, "MSPAuth")) != NULL) | |
1163 session->passport_info.mspauth = g_strdup(value); | |
1164 | |
1165 return TRUE; | |
1166 } | |
1167 | |
1168 static gboolean | |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1169 __initial_email_msg(MsnServConn *servconn, MsnMessage *msg) |
5309 | 1170 { |
1171 MsnSession *session = servconn->session; | |
1172 struct gaim_connection *gc = session->account->gc; | |
1173 GHashTable *table; | |
1174 const char *unread; | |
1175 | |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1176 if (strcmp(servconn->msg_passport, "Hotmail")) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1177 /* This isn't an official message. */ |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1178 return TRUE; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1179 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1180 |
5358
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1181 if (session->passport_info.file == NULL) { |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1182 msn_servconn_send_command(servconn, "URL", "INBOX"); |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1183 |
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1184 msn_servconn_queue_message(servconn, "URL", msg); |
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1185 |
5358
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1186 return TRUE; |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1187 } |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1188 |
5309 | 1189 table = msn_message_get_hashtable_from_body(msg); |
1190 | |
1191 unread = g_hash_table_lookup(table, "Inbox-Unread"); | |
1192 | |
1193 if (unread != NULL) | |
1194 connection_has_mail(gc, atoi(unread), NULL, NULL, | |
1195 session->passport_info.file); | |
1196 | |
1197 g_hash_table_destroy(table); | |
1198 | |
1199 return TRUE; | |
1200 } | |
1201 | |
1202 static gboolean | |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1203 __email_msg(MsnServConn *servconn, MsnMessage *msg) |
5309 | 1204 { |
1205 MsnSession *session = servconn->session; | |
1206 struct gaim_connection *gc = session->account->gc; | |
1207 GHashTable *table; | |
1208 const char *from, *subject; | |
1209 | |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1210 if (strcmp(servconn->msg_passport, "Hotmail")) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1211 /* This isn't an official message. */ |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1212 return TRUE; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1213 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1214 |
5358
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1215 if (session->passport_info.file == NULL) { |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1216 msn_servconn_send_command(servconn, "URL", "INBOX"); |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1217 |
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1218 msn_servconn_queue_message(servconn, "URL", msg); |
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1219 |
5358
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1220 return TRUE; |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1221 } |
91db34a45cbe
[gaim-migrate @ 5734]
Christian Hammond <chipx86@chipx86.com>
parents:
5353
diff
changeset
|
1222 |
5309 | 1223 table = msn_message_get_hashtable_from_body(msg); |
1224 | |
1225 from = g_hash_table_lookup(table, "From"); | |
1226 subject = g_hash_table_lookup(table, "Subject"); | |
1227 | |
1228 if (from == NULL || subject == NULL) { | |
1229 connection_has_mail(gc, 1, NULL, NULL, session->passport_info.file); | |
1230 } | |
1231 else { | |
1232 connection_has_mail(gc, -1, from, subject, | |
1233 session->passport_info.file); | |
1234 } | |
1235 | |
1236 g_hash_table_destroy(table); | |
1237 | |
1238 return TRUE; | |
1239 } | |
1240 | |
1241 static gboolean | |
5506
4f72b611f0ee
[gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents:
5498
diff
changeset
|
1242 __system_msg(MsnServConn *servconn, MsnMessage *msg) |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1243 { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1244 GHashTable *table; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1245 const char *type_s; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1246 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1247 if (strcmp(servconn->msg_passport, "Hotmail")) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1248 /* This isn't an official message. */ |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1249 return TRUE; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1250 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1251 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1252 table = msn_message_get_hashtable_from_body(msg); |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1253 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1254 if ((type_s = g_hash_table_lookup(table, "Type")) != NULL) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1255 int type = atoi(type_s); |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1256 char buf[MSN_BUF_LEN]; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1257 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1258 switch (type) { |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1259 case 1: |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1260 g_snprintf(buf, sizeof(buf), |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1261 _("The MSN server will shut down for maintenance " |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1262 "in %d minute(s). You will automatically be " |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1263 "signed out at that time. Please finish any " |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1264 "conversations in progress.\n\n" |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1265 "After the maintenance has been completed, you " |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1266 "will be able to successfully sign in."), |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1267 atoi(g_hash_table_lookup(table, "Arg1"))); |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1268 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1269 default: |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1270 break; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1271 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1272 |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5406
diff
changeset
|
1273 if (*buf != '\0') |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5406
diff
changeset
|
1274 gaim_notify_info(servconn->session->account->gc, NULL, buf, NULL); |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1275 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1276 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1277 g_hash_table_destroy(table); |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1278 |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1279 return TRUE; |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1280 } |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1281 static gboolean |
5309 | 1282 __connect_cb(gpointer data, gint source, GaimInputCondition cond) |
1283 { | |
1284 MsnServConn *notification = data; | |
1285 MsnSession *session = notification->session; | |
1286 struct gaim_connection *gc = session->account->gc; | |
1287 | |
1288 if (source == -1) { | |
1289 hide_login_progress(session->account->gc, _("Unable to connect")); | |
1290 signoff(session->account->gc); | |
1291 return FALSE; | |
1292 } | |
1293 | |
1294 if (notification->fd != source) | |
1295 notification->fd = source; | |
1296 | |
1297 if (!msn_servconn_send_command(notification, "VER", | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
1298 "MSNP7 MSNP6 MSNP5 MSNP4 CVR0")) { |
5309 | 1299 hide_login_progress(gc, _("Unable to write to server")); |
1300 signoff(gc); | |
1301 return FALSE; | |
1302 } | |
1303 | |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
1304 session->user = msn_user_new(session, gc->username, NULL); |
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
1305 |
5326
9737d5ce9dcd
[gaim-migrate @ 5699]
Christian Hammond <chipx86@chipx86.com>
parents:
5323
diff
changeset
|
1306 set_login_progress(session->account->gc, 4, _("Syncing with server")); |
5309 | 1307 |
1308 return TRUE; | |
1309 } | |
1310 | |
1311 static void | |
1312 __failed_read_cb(gpointer data, gint source, GaimInputCondition cond) | |
1313 { | |
1314 MsnServConn *notification = data; | |
1315 struct gaim_connection *gc; | |
1316 | |
1317 gc = notification->session->account->gc; | |
1318 | |
1319 hide_login_progress(gc, _("Error reading from server")); | |
1320 signoff(gc); | |
1321 } | |
1322 | |
1323 MsnServConn * | |
1324 msn_notification_new(MsnSession *session, const char *server, int port) | |
1325 { | |
1326 MsnServConn *notification; | |
1327 | |
1328 notification = msn_servconn_new(session); | |
1329 | |
1330 msn_servconn_set_server(notification, server, port); | |
1331 msn_servconn_set_connect_cb(notification, __connect_cb); | |
1332 msn_servconn_set_failed_read_cb(notification, __failed_read_cb); | |
1333 | |
1334 if (notification_commands == NULL) { | |
1335 /* Register the command callbacks. */ | |
1336 msn_servconn_register_command(notification, "ADD", __add_cmd); | |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
1337 msn_servconn_register_command(notification, "ADG", __adg_cmd); |
5309 | 1338 msn_servconn_register_command(notification, "BLP", __blp_cmd); |
5361
953aa05279f4
[gaim-migrate @ 5737]
Christian Hammond <chipx86@chipx86.com>
parents:
5358
diff
changeset
|
1339 msn_servconn_register_command(notification, "BPR", __bpr_cmd); |
5309 | 1340 msn_servconn_register_command(notification, "CHG", __blank_cmd); |
1341 msn_servconn_register_command(notification, "CHL", __chl_cmd); | |
1342 msn_servconn_register_command(notification, "FLN", __fln_cmd); | |
1343 msn_servconn_register_command(notification, "GTC", __blank_cmd); | |
1344 msn_servconn_register_command(notification, "ILN", __iln_cmd); | |
1345 msn_servconn_register_command(notification, "INF", __inf_cmd); | |
1346 msn_servconn_register_command(notification, "LSG", __lsg_cmd); | |
1347 msn_servconn_register_command(notification, "LST", __lst_cmd); | |
1348 msn_servconn_register_command(notification, "MSG", __msg_cmd); | |
1349 msn_servconn_register_command(notification, "NLN", __nln_cmd); | |
1350 msn_servconn_register_command(notification, "OUT", __out_cmd); | |
5363
ebebc833cf77
[gaim-migrate @ 5739]
Christian Hammond <chipx86@chipx86.com>
parents:
5361
diff
changeset
|
1351 msn_servconn_register_command(notification, "PRP", __prp_cmd); |
5309 | 1352 msn_servconn_register_command(notification, "QNG", __blank_cmd); |
1353 msn_servconn_register_command(notification, "QRY", __blank_cmd); | |
1354 msn_servconn_register_command(notification, "REA", __rea_cmd); | |
5318
bd98232872a3
[gaim-migrate @ 5690]
Christian Hammond <chipx86@chipx86.com>
parents:
5312
diff
changeset
|
1355 msn_servconn_register_command(notification, "REG", __reg_cmd); |
5322
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
1356 msn_servconn_register_command(notification, "REM", __rem_cmd); |
a4d017bee1de
[gaim-migrate @ 5694]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
1357 msn_servconn_register_command(notification, "RMG", __blank_cmd); |
5309 | 1358 msn_servconn_register_command(notification, "RNG", __rng_cmd); |
1359 msn_servconn_register_command(notification, "SYN", __blank_cmd); | |
1360 msn_servconn_register_command(notification, "URL", __url_cmd); | |
1361 msn_servconn_register_command(notification, "USR", __usr_cmd); | |
1362 msn_servconn_register_command(notification, "VER", __ver_cmd); | |
1363 msn_servconn_register_command(notification, "XFR", __xfr_cmd); | |
1364 msn_servconn_register_command(notification, "_unknown_", __unknown_cmd); | |
1365 | |
1366 /* Register the message type callbacks. */ | |
1367 msn_servconn_register_msg_type(notification, "text/x-msmsgsprofile", | |
1368 __profile_msg); | |
1369 msn_servconn_register_msg_type(notification, | |
1370 "text/x-msmsgsinitialemailnotification", | |
1371 __initial_email_msg); | |
1372 msn_servconn_register_msg_type(notification, | |
1373 "text/x-msmsgsemailnotification", | |
1374 __email_msg); | |
5333
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1375 msn_servconn_register_msg_type(notification, |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1376 "application/x-msmsgssystemmessage", |
bbbf616bd924
[gaim-migrate @ 5708]
Christian Hammond <chipx86@chipx86.com>
parents:
5327
diff
changeset
|
1377 __system_msg); |
5309 | 1378 |
1379 /* Save these for future use. */ | |
1380 notification_commands = notification->commands; | |
1381 notification_msg_types = notification->msg_types; | |
1382 } | |
1383 else { | |
1384 g_hash_table_destroy(notification->commands); | |
1385 g_hash_table_destroy(notification->msg_types); | |
1386 | |
1387 notification->commands = notification_commands; | |
1388 notification->msg_types = notification_msg_types; | |
1389 } | |
1390 | |
1391 return notification; | |
1392 } |