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