Mercurial > pidgin
annotate src/protocols/msn/switchboard.c @ 13366:0758db6d46ac
[gaim-migrate @ 15739]
I don't like this null. It may not matter.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 01 Mar 2006 07:43:54 +0000 |
parents | 403c3a8287f7 |
children | 90d0a473e7ff |
rev | line source |
---|---|
4542 | 1 /** |
2 * @file switchboard.c MSN switchboard functions | |
3 * | |
4 * gaim | |
5 * | |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
6 * Gaim is the legal property of its developers, whose names are too numerous |
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
7 * to list here. Please refer to the COPYRIGHT file distributed with this |
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
8 * source distribution. |
6668
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
9 * |
4542 | 10 * This program is free software; you can redistribute it and/or modify |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
8207
aa44049e8891
[gaim-migrate @ 8930]
Christian Hammond <chipx86@chipx86.com>
parents:
7639
diff
changeset
|
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
4542 | 23 */ |
24 #include "msn.h" | |
5626
6275ac113622
[gaim-migrate @ 6033]
Christian Hammond <chipx86@chipx86.com>
parents:
5566
diff
changeset
|
25 #include "prefs.h" |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
26 #include "switchboard.h" |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
27 #include "notification.h" |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
28 #include "utils.h" |
4542 | 29 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
30 #include "error.h" |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
31 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
32 static MsnTable *cbs_table; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
33 |
10345 | 34 static void msg_error_helper(MsnCmdProc *cmdproc, MsnMessage *msg, |
35 MsnMsgErrorType error); | |
36 | |
37 /************************************************************************** | |
10481 | 38 * Main |
10345 | 39 **************************************************************************/ |
10481 | 40 |
10345 | 41 MsnSwitchBoard * |
42 msn_switchboard_new(MsnSession *session) | |
43 { | |
44 MsnSwitchBoard *swboard; | |
45 MsnServConn *servconn; | |
46 | |
47 g_return_val_if_fail(session != NULL, NULL); | |
48 | |
49 swboard = g_new0(MsnSwitchBoard, 1); | |
50 | |
51 swboard->session = session; | |
10481 | 52 swboard->servconn = servconn = msn_servconn_new(session, MSN_SERVCONN_SB); |
10463 | 53 swboard->cmdproc = servconn->cmdproc; |
10345 | 54 |
10481 | 55 swboard->msg_queue = g_queue_new(); |
10345 | 56 swboard->empty = TRUE; |
57 | |
10463 | 58 swboard->cmdproc->data = swboard; |
59 swboard->cmdproc->cbs_table = cbs_table; | |
10345 | 60 |
61 session->switches = g_list_append(session->switches, swboard); | |
62 | |
63 return swboard; | |
64 } | |
65 | |
66 void | |
67 msn_switchboard_destroy(MsnSwitchBoard *swboard) | |
68 { | |
69 MsnSession *session; | |
70 MsnMessage *msg; | |
71 GList *l; | |
72 | |
11321 | 73 #ifdef MSN_DEBUG_SB |
10773 | 74 gaim_debug_info("msn", "switchboard_destroy: swboard(%p)\n", swboard); |
75 #endif | |
76 | |
10345 | 77 g_return_if_fail(swboard != NULL); |
78 | |
10773 | 79 if (swboard->destroying) |
80 return; | |
81 | |
82 swboard->destroying = TRUE; | |
83 | |
10345 | 84 /* If it linked us is because its looking for trouble */ |
85 if (swboard->slplink != NULL) | |
86 msn_slplink_destroy(swboard->slplink); | |
87 | |
88 /* Destroy the message queue */ | |
10481 | 89 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL) |
10345 | 90 { |
91 if (swboard->error != MSN_SB_ERROR_NONE) | |
92 { | |
93 /* The messages could not be sent due to a switchboard error */ | |
10463 | 94 msg_error_helper(swboard->cmdproc, msg, |
10345 | 95 MSN_MSG_ERROR_SB); |
96 } | |
10403 | 97 msn_message_unref(msg); |
10345 | 98 } |
99 | |
10481 | 100 g_queue_free(swboard->msg_queue); |
10345 | 101 |
12236 | 102 /* msg_error_helper will both remove the msg from ack_list and |
103 unref it, so we don't need to do either here */ | |
104 while ((l = swboard->ack_list) != NULL) | |
105 msg_error_helper(swboard->cmdproc, l->data, MSN_MSG_ERROR_SB); | |
10403 | 106 |
10345 | 107 if (swboard->im_user != NULL) |
108 g_free(swboard->im_user); | |
109 | |
110 if (swboard->auth_key != NULL) | |
111 g_free(swboard->auth_key); | |
112 | |
113 if (swboard->session_id != NULL) | |
114 g_free(swboard->session_id); | |
115 | |
116 for (l = swboard->users; l != NULL; l = l->next) | |
117 g_free(l->data); | |
118 | |
119 session = swboard->session; | |
120 session->switches = g_list_remove(session->switches, swboard); | |
121 | |
10481 | 122 #if 0 |
123 /* This should never happen or we are in trouble. */ | |
10345 | 124 if (swboard->servconn != NULL) |
125 msn_servconn_destroy(swboard->servconn); | |
10481 | 126 #endif |
127 | |
128 swboard->cmdproc->data = NULL; | |
129 | |
130 msn_servconn_set_disconnect_cb(swboard->servconn, NULL); | |
131 | |
132 msn_servconn_destroy(swboard->servconn); | |
10345 | 133 |
134 g_free(swboard); | |
135 } | |
136 | |
137 void | |
138 msn_switchboard_set_auth_key(MsnSwitchBoard *swboard, const char *key) | |
139 { | |
140 g_return_if_fail(swboard != NULL); | |
141 g_return_if_fail(key != NULL); | |
142 | |
143 swboard->auth_key = g_strdup(key); | |
144 } | |
145 | |
146 const char * | |
147 msn_switchboard_get_auth_key(MsnSwitchBoard *swboard) | |
148 { | |
149 g_return_val_if_fail(swboard != NULL, NULL); | |
150 | |
151 return swboard->auth_key; | |
152 } | |
153 | |
154 void | |
155 msn_switchboard_set_session_id(MsnSwitchBoard *swboard, const char *id) | |
156 { | |
157 g_return_if_fail(swboard != NULL); | |
158 g_return_if_fail(id != NULL); | |
159 | |
160 if (swboard->session_id != NULL) | |
161 g_free(swboard->session_id); | |
162 | |
163 swboard->session_id = g_strdup(id); | |
164 } | |
165 | |
166 const char * | |
167 msn_switchboard_get_session_id(MsnSwitchBoard *swboard) | |
168 { | |
169 g_return_val_if_fail(swboard != NULL, NULL); | |
170 | |
171 return swboard->session_id; | |
172 } | |
173 | |
174 void | |
175 msn_switchboard_set_invited(MsnSwitchBoard *swboard, gboolean invited) | |
176 { | |
177 g_return_if_fail(swboard != NULL); | |
178 | |
179 swboard->invited = invited; | |
180 } | |
181 | |
182 gboolean | |
183 msn_switchboard_is_invited(MsnSwitchBoard *swboard) | |
184 { | |
185 g_return_val_if_fail(swboard != NULL, FALSE); | |
186 | |
187 return swboard->invited; | |
188 } | |
10225 | 189 |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
190 /************************************************************************** |
10481 | 191 * Utility |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
192 **************************************************************************/ |
10481 | 193 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
194 static void |
5793
952710ac6635
[gaim-migrate @ 6218]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
195 send_clientcaps(MsnSwitchBoard *swboard) |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
196 { |
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
197 MsnMessage *msg; |
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
198 |
10225 | 199 msg = msn_message_new(MSN_MSG_CAPS); |
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5454
diff
changeset
|
200 msn_message_set_content_type(msg, "text/x-clientcaps"); |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
201 msn_message_set_flag(msg, 'U'); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
202 msn_message_set_bin_data(msg, MSN_CLIENTINFO, strlen(MSN_CLIENTINFO)); |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
203 |
10481 | 204 msn_switchboard_send_msg(swboard, msg, TRUE); |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
205 |
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
206 msn_message_destroy(msg); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
207 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
208 |
12323
fc464a0abccc
[gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents:
12236
diff
changeset
|
209 static void |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
210 msn_switchboard_add_user(MsnSwitchBoard *swboard, const char *user) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
211 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
212 MsnCmdProc *cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
213 GaimAccount *account; |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
214 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
215 g_return_if_fail(swboard != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
216 |
10463 | 217 cmdproc = swboard->cmdproc; |
218 account = cmdproc->session->account; | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
219 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
220 swboard->users = g_list_prepend(swboard->users, g_strdup(user)); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
221 swboard->current_users++; |
10346 | 222 swboard->empty = FALSE; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
223 |
10773 | 224 #ifdef MSN_DEBUG_CHAT |
225 gaim_debug_info("msn", "user=[%s], total=%d\n", user, | |
226 swboard->current_users); | |
227 #endif | |
228 | |
10806 | 229 if (!(swboard->flag & MSN_SB_FLAG_IM) && (swboard->conv != NULL)) |
10773 | 230 { |
231 /* This is a helper switchboard. */ | |
10806 | 232 gaim_debug_error("msn", "switchboard_add_user: conv != NULL\n"); |
10773 | 233 return; |
234 } | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
235 |
10345 | 236 if ((swboard->conv != NULL) && |
11338 | 237 (gaim_conversation_get_type(swboard->conv) == GAIM_CONV_TYPE_CHAT)) |
9363
997c28571364
[gaim-migrate @ 10171]
Christian Hammond <chipx86@chipx86.com>
parents:
9218
diff
changeset
|
238 { |
10345 | 239 gaim_conv_chat_add_user(GAIM_CONV_CHAT(swboard->conv), user, NULL, |
240 GAIM_CBFLAGS_NONE, TRUE); | |
9363
997c28571364
[gaim-migrate @ 10171]
Christian Hammond <chipx86@chipx86.com>
parents:
9218
diff
changeset
|
241 } |
997c28571364
[gaim-migrate @ 10171]
Christian Hammond <chipx86@chipx86.com>
parents:
9218
diff
changeset
|
242 else if (swboard->current_users > 1 || swboard->total_users > 1) |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
243 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
244 if (swboard->conv == NULL || |
11338 | 245 gaim_conversation_get_type(swboard->conv) != GAIM_CONV_TYPE_CHAT) |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
246 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
247 GList *l; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
248 |
10773 | 249 #ifdef MSN_DEBUG_CHAT |
250 gaim_debug_info("msn", "[chat] Switching to chat.\n"); | |
251 #endif | |
252 | |
10533 | 253 #if 0 |
254 /* this is bad - it causes msn_switchboard_close to be called on the | |
255 * switchboard we're in the middle of using :( */ | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
256 if (swboard->conv != NULL) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
257 gaim_conversation_destroy(swboard->conv); |
10533 | 258 #endif |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
259 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
260 cmdproc->session->conv_seq++; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
261 swboard->chat_id = cmdproc->session->conv_seq; |
10806 | 262 swboard->flag |= MSN_SB_FLAG_IM; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
263 swboard->conv = serv_got_joined_chat(account->gc, |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
264 swboard->chat_id, |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
265 "MSN Chat"); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
266 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
267 for (l = swboard->users; l != NULL; l = l->next) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
268 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
269 const char *tmp_user; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
270 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
271 tmp_user = l->data; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
272 |
10773 | 273 #ifdef MSN_DEBUG_CHAT |
274 gaim_debug_info("msn", "[chat] Adding [%s].\n", tmp_user); | |
275 #endif | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
276 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
277 gaim_conv_chat_add_user(GAIM_CONV_CHAT(swboard->conv), |
9846 | 278 tmp_user, NULL, GAIM_CBFLAGS_NONE, TRUE); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
279 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
280 |
10773 | 281 #ifdef MSN_DEBUG_CHAT |
282 gaim_debug_info("msn", "[chat] We add ourselves.\n"); | |
283 #endif | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
284 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
285 gaim_conv_chat_add_user(GAIM_CONV_CHAT(swboard->conv), |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
286 gaim_account_get_username(account), |
9846 | 287 NULL, GAIM_CBFLAGS_NONE, TRUE); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
288 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
289 g_free(swboard->im_user); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
290 swboard->im_user = NULL; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
291 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
292 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
293 else if (swboard->conv == NULL) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
294 { |
11338 | 295 /* XXX - I think this should probably be GAIM_CONV_TYPE_CHAT, but I'm hedging */ |
296 swboard->conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_ANY, | |
10246 | 297 user, account); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
298 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
299 else |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
300 { |
10773 | 301 gaim_debug_warning("msn", "switchboard_add_user: This should not happen!\n"); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
302 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
303 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
304 |
12323
fc464a0abccc
[gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents:
12236
diff
changeset
|
305 static GaimConversation * |
10225 | 306 msn_switchboard_get_conv(MsnSwitchBoard *swboard) |
307 { | |
308 GaimAccount *account; | |
309 | |
310 g_return_val_if_fail(swboard != NULL, NULL); | |
311 | |
312 if (swboard->conv != NULL) | |
313 return swboard->conv; | |
314 | |
10346 | 315 gaim_debug_error("msn", "Switchboard with unassigned conversation\n"); |
10345 | 316 |
10225 | 317 account = swboard->session->account; |
318 | |
11338 | 319 /* XXX - I think this should probably be GAIM_CONV_TYPE_IM, but I'm hedging */ |
320 return gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, | |
10246 | 321 swboard->im_user, account); |
10225 | 322 } |
323 | |
12323
fc464a0abccc
[gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents:
12236
diff
changeset
|
324 static void |
10225 | 325 msn_switchboard_report_user(MsnSwitchBoard *swboard, GaimMessageFlags flags, const char *msg) |
326 { | |
327 GaimConversation *conv; | |
328 | |
329 g_return_if_fail(swboard != NULL); | |
330 g_return_if_fail(msg != NULL); | |
331 | |
332 if ((conv = msn_switchboard_get_conv(swboard)) != NULL) | |
333 { | |
334 gaim_conversation_write(conv, NULL, msg, flags, time(NULL)); | |
335 } | |
336 } | |
337 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
338 static void |
10345 | 339 swboard_error_helper(MsnSwitchBoard *swboard, int reason, const char *passport) |
340 { | |
10451 | 341 g_return_if_fail(swboard != NULL); |
342 | |
13245 | 343 gaim_debug_warning("msg", "Error: Unable to call the user %s for reason %i\n", |
344 passport ? passport : "(null)", reason); | |
10345 | 345 |
10533 | 346 /* TODO: if current_users > 0, this is probably a chat and an invite failed, |
347 * we should report that in the chat or something */ | |
348 if (swboard->current_users == 0) | |
10345 | 349 { |
350 swboard->error = reason; | |
10463 | 351 msn_switchboard_close(swboard); |
10345 | 352 } |
353 } | |
354 | |
355 static void | |
356 cal_error_helper(MsnTransaction *trans, int reason) | |
357 { | |
358 MsnSwitchBoard *swboard; | |
359 const char *passport; | |
360 char **params; | |
361 | |
362 params = g_strsplit(trans->params, " ", 0); | |
363 | |
364 passport = params[0]; | |
365 | |
366 swboard = trans->data; | |
367 | |
13125 | 368 gaim_debug_warning("msn", "cal_error_helper: command %s failed for reason %i\n",trans->command,reason); |
369 | |
10345 | 370 swboard_error_helper(swboard, reason, passport); |
371 | |
372 g_strfreev(params); | |
373 } | |
374 | |
375 static void | |
376 msg_error_helper(MsnCmdProc *cmdproc, MsnMessage *msg, MsnMsgErrorType error) | |
377 { | |
10403 | 378 MsnSwitchBoard *swboard; |
379 | |
10345 | 380 g_return_if_fail(cmdproc != NULL); |
381 g_return_if_fail(msg != NULL); | |
382 | |
10403 | 383 if ((error != MSN_MSG_ERROR_SB) && (msg->nak_cb != NULL)) |
10345 | 384 msg->nak_cb(msg, msg->ack_data); |
385 | |
10463 | 386 swboard = cmdproc->data; |
10403 | 387 |
10773 | 388 /* This is not good, and should be fixed somewhere else. */ |
389 g_return_if_fail(swboard != NULL); | |
390 | |
10345 | 391 if (msg->type == MSN_MSG_TEXT) |
392 { | |
10504 | 393 const char *format, *str_reason; |
10346 | 394 char *body_str, *body_enc, *pre, *post; |
10345 | 395 |
396 #if 0 | |
397 if (swboard->conv == NULL) | |
398 { | |
10346 | 399 if (msg->ack_ref) |
10403 | 400 msn_message_unref(msg); |
10346 | 401 |
10345 | 402 return; |
403 } | |
404 #endif | |
405 | |
10346 | 406 if (error == MSN_MSG_ERROR_TIMEOUT) |
10345 | 407 { |
408 str_reason = _("Message may have not been sent " | |
10451 | 409 "because a timeout occurred:"); |
10345 | 410 } |
10346 | 411 else if (error == MSN_MSG_ERROR_SB) |
10345 | 412 { |
413 switch (swboard->error) | |
414 { | |
415 case MSN_SB_ERROR_OFFLINE: | |
416 str_reason = _("Message could not be sent, " | |
10346 | 417 "not allowed while invisible:"); |
10345 | 418 break; |
419 case MSN_SB_ERROR_USER_OFFLINE: | |
420 str_reason = _("Message could not be sent " | |
10346 | 421 "because the user is offline:"); |
10345 | 422 break; |
423 case MSN_SB_ERROR_CONNECTION: | |
424 str_reason = _("Message could not be sent " | |
10391 | 425 "because a connection error occurred:"); |
10345 | 426 break; |
13125 | 427 case MSN_SB_ERROR_TOO_FAST: |
428 str_reason = _("Message could not be sent " | |
429 "because we are sending too quickly:"); | |
430 break; | |
10345 | 431 default: |
432 str_reason = _("Message could not be sent " | |
433 "because an error with " | |
10391 | 434 "the switchboard occurred:"); |
10345 | 435 break; |
436 } | |
437 } | |
438 else | |
439 { | |
440 str_reason = _("Message may have not been sent " | |
10391 | 441 "because an unknown error occurred:"); |
10345 | 442 } |
443 | |
10346 | 444 body_str = msn_message_to_string(msg); |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10621
diff
changeset
|
445 body_enc = g_markup_escape_text(body_str, -1); |
10346 | 446 g_free(body_str); |
447 | |
448 format = msn_message_get_attr(msg, "X-MMS-IM-Format"); | |
449 msn_parse_format(format, &pre, &post); | |
10568 | 450 body_str = g_strdup_printf("%s%s%s", pre ? pre : "", |
451 body_enc ? body_enc : "", post ? post : ""); | |
10346 | 452 g_free(body_enc); |
453 g_free(pre); | |
454 g_free(post); | |
10345 | 455 |
10403 | 456 msn_switchboard_report_user(swboard, GAIM_MESSAGE_ERROR, |
457 str_reason); | |
458 msn_switchboard_report_user(swboard, GAIM_MESSAGE_RAW, | |
459 body_str); | |
10345 | 460 |
10346 | 461 g_free(body_str); |
10345 | 462 } |
463 | |
10403 | 464 /* If a timeout occures we will want the msg around just in case we |
465 * receive the ACK after the timeout. */ | |
466 if (msg->ack_ref && error != MSN_MSG_ERROR_TIMEOUT) | |
467 { | |
468 swboard->ack_list = g_list_remove(swboard->ack_list, msg); | |
10346 | 469 msn_message_unref(msg); |
10403 | 470 } |
10345 | 471 } |
472 | |
473 /************************************************************************** | |
10481 | 474 * Message Stuff |
475 **************************************************************************/ | |
476 | |
477 /** Called when a message times out. */ | |
478 static void | |
479 msg_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans) | |
480 { | |
481 MsnMessage *msg; | |
482 | |
483 msg = trans->data; | |
484 | |
485 msg_error_helper(cmdproc, msg, MSN_MSG_ERROR_TIMEOUT); | |
486 } | |
487 | |
488 /** Called when we receive an error of a message. */ | |
489 static void | |
490 msg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
491 { | |
492 msg_error_helper(cmdproc, trans->data, MSN_MSG_ERROR_UNKNOWN); | |
493 } | |
494 | |
495 #if 0 | |
496 /** Called when we receive an ack of a special message. */ | |
497 static void | |
498 msg_ack(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
499 { | |
500 MsnMessage *msg; | |
501 | |
502 msg = cmd->trans->data; | |
503 | |
504 if (msg->ack_cb != NULL) | |
505 msg->ack_cb(msg->ack_data); | |
506 | |
507 msn_message_unref(msg); | |
508 } | |
509 | |
510 /** Called when we receive a nak of a special message. */ | |
511 static void | |
512 msg_nak(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
513 { | |
514 MsnMessage *msg; | |
515 | |
516 msg = cmd->trans->data; | |
517 | |
518 msn_message_unref(msg); | |
519 } | |
520 #endif | |
521 | |
522 static void | |
523 release_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
524 { | |
525 MsnCmdProc *cmdproc; | |
526 MsnTransaction *trans; | |
527 char *payload; | |
528 gsize payload_len; | |
529 | |
530 g_return_if_fail(swboard != NULL); | |
531 g_return_if_fail(msg != NULL); | |
532 | |
533 cmdproc = swboard->cmdproc; | |
534 | |
535 payload = msn_message_gen_payload(msg, &payload_len); | |
536 | |
11321 | 537 #ifdef MSN_DEBUG_SB |
538 msn_message_show_readable(msg, "SB SEND", FALSE); | |
539 #endif | |
10481 | 540 |
541 trans = msn_transaction_new(cmdproc, "MSG", "%c %d", | |
542 msn_message_get_flag(msg), payload_len); | |
543 | |
544 /* Data for callbacks */ | |
545 msn_transaction_set_data(trans, msg); | |
546 | |
547 if (msg->type == MSN_MSG_TEXT) | |
548 { | |
549 msg->ack_ref = TRUE; | |
550 msn_message_ref(msg); | |
551 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
552 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
553 } | |
554 else if (msg->type == MSN_MSG_SLP) | |
555 { | |
556 msg->ack_ref = TRUE; | |
557 msn_message_ref(msg); | |
558 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
559 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
560 #if 0 | |
561 if (msg->ack_cb != NULL) | |
562 { | |
563 msn_transaction_add_cb(trans, "ACK", msg_ack); | |
564 msn_transaction_add_cb(trans, "NAK", msg_nak); | |
565 } | |
566 #endif | |
567 } | |
568 | |
569 trans->payload = payload; | |
570 trans->payload_len = payload_len; | |
571 | |
572 msg->trans = trans; | |
573 | |
574 msn_cmdproc_send_trans(cmdproc, trans); | |
575 } | |
576 | |
577 static void | |
578 queue_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
579 { | |
580 g_return_if_fail(swboard != NULL); | |
581 g_return_if_fail(msg != NULL); | |
582 | |
583 gaim_debug_info("msn", "Appending message to queue.\n"); | |
584 | |
585 g_queue_push_tail(swboard->msg_queue, msg); | |
586 | |
587 msn_message_ref(msg); | |
588 } | |
589 | |
590 static void | |
591 process_queue(MsnSwitchBoard *swboard) | |
592 { | |
593 MsnMessage *msg; | |
594 | |
595 g_return_if_fail(swboard != NULL); | |
596 | |
597 gaim_debug_info("msn", "Processing queue\n"); | |
598 | |
599 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL) | |
600 { | |
601 gaim_debug_info("msn", "Sending message\n"); | |
602 release_msg(swboard, msg); | |
603 msn_message_unref(msg); | |
604 } | |
605 } | |
606 | |
607 gboolean | |
608 msn_switchboard_can_send(MsnSwitchBoard *swboard) | |
609 { | |
610 g_return_val_if_fail(swboard != NULL, FALSE); | |
611 | |
612 if (swboard->empty || !g_queue_is_empty(swboard->msg_queue)) | |
613 return FALSE; | |
614 | |
615 return TRUE; | |
616 } | |
617 | |
618 void | |
619 msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg, | |
620 gboolean queue) | |
621 { | |
622 g_return_if_fail(swboard != NULL); | |
623 g_return_if_fail(msg != NULL); | |
624 | |
625 if (msn_switchboard_can_send(swboard)) | |
626 release_msg(swboard, msg); | |
627 else if (queue) | |
628 queue_msg(swboard, msg); | |
629 } | |
630 | |
631 /************************************************************************** | |
10345 | 632 * Switchboard Commands |
633 **************************************************************************/ | |
10481 | 634 |
10345 | 635 static void |
636 ans_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
637 { | |
638 MsnSwitchBoard *swboard; | |
639 | |
10463 | 640 swboard = cmdproc->data; |
10345 | 641 swboard->ready = TRUE; |
642 } | |
643 | |
644 static void | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
645 bye_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
646 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
647 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
648 const char *user; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
649 |
10463 | 650 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
651 user = cmd->params[0]; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
652 |
11321 | 653 if (!(swboard->flag & MSN_SB_FLAG_IM) && (swboard->conv != NULL)) |
10773 | 654 gaim_debug_error("msn_switchboard", "bye_cmd: helper bug\n"); |
655 | |
10345 | 656 if (swboard->conv == NULL) |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
657 { |
10345 | 658 /* This is a helper switchboard */ |
10434 | 659 msn_switchboard_destroy(swboard); |
10345 | 660 } |
10533 | 661 else if ((swboard->current_users > 1) || |
11338 | 662 (gaim_conversation_get_type(swboard->conv) == GAIM_CONV_TYPE_CHAT)) |
10345 | 663 { |
664 /* This is a switchboard used for a chat */ | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
665 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(swboard->conv), user, NULL); |
10533 | 666 swboard->current_users--; |
667 if (swboard->current_users == 0) | |
668 msn_switchboard_destroy(swboard); | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
669 } |
8372
bd16ed85cfc2
[gaim-migrate @ 9099]
Christian Hammond <chipx86@chipx86.com>
parents:
8207
diff
changeset
|
670 else |
bd16ed85cfc2
[gaim-migrate @ 9099]
Christian Hammond <chipx86@chipx86.com>
parents:
8207
diff
changeset
|
671 { |
10345 | 672 /* This is a switchboard used for a im session */ |
10434 | 673 msn_switchboard_destroy(swboard); |
4542 | 674 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
675 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
676 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
677 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
678 iro_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
679 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
680 GaimAccount *account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
681 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
682 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
683 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
684 account = cmdproc->session->account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
685 gc = account->gc; |
10463 | 686 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
687 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
688 swboard->total_users = atoi(cmd->params[2]); |
6026
01dd6b652c22
[gaim-migrate @ 6476]
Christian Hammond <chipx86@chipx86.com>
parents:
6025
diff
changeset
|
689 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
690 msn_switchboard_add_user(swboard, cmd->params[3]); |
4542 | 691 } |
692 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
693 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
694 joi_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
4542 | 695 { |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
696 MsnSession *session; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
697 GaimAccount *account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
698 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
699 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
700 const char *passport; |
4542 | 701 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
702 passport = cmd->params[0]; |
4542 | 703 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
704 session = cmdproc->session; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
705 account = session->account; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
706 gc = account->gc; |
10463 | 707 swboard = cmdproc->data; |
6026
01dd6b652c22
[gaim-migrate @ 6476]
Christian Hammond <chipx86@chipx86.com>
parents:
6025
diff
changeset
|
708 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
709 msn_switchboard_add_user(swboard, passport); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
710 |
10481 | 711 process_queue(swboard); |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
712 |
10463 | 713 if (!session->http_method) |
714 send_clientcaps(swboard); | |
10403 | 715 |
716 if (swboard->closed) | |
717 msn_switchboard_close(swboard); | |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
718 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
719 |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
720 static void |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
721 msg_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len) |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
722 { |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
723 MsnMessage *msg; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
724 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
725 msg = msn_message_new_from_cmd(cmdproc->session, cmd); |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
726 |
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
727 msn_message_parse_payload(msg, payload, len); |
11321 | 728 #ifdef MSN_DEBUG_SB |
729 msn_message_show_readable(msg, "SB RECV", FALSE); | |
730 #endif | |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
731 |
10284 | 732 if (msg->remote_user != NULL) |
733 g_free (msg->remote_user); | |
734 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
735 msg->remote_user = g_strdup(cmd->params[0]); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
736 msn_cmdproc_process_msg(cmdproc, msg); |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
737 |
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
738 msn_message_destroy(msg); |
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
739 } |
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
740 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
741 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
742 msg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
743 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
744 cmdproc->servconn->payload_len = atoi(cmd->params[2]); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
745 cmdproc->last_cmd->payload_cb = msg_cmd_post; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
746 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
747 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
748 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
749 nak_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
750 { |
10345 | 751 MsnMessage *msg; |
752 | |
753 msg = cmd->trans->data; | |
754 g_return_if_fail(msg != NULL); | |
755 | |
756 msg_error_helper(cmdproc, msg, MSN_MSG_ERROR_NAK); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
757 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
758 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
759 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
760 ack_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
761 { |
10403 | 762 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
763 MsnMessage *msg; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
764 |
10345 | 765 msg = cmd->trans->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
766 |
10345 | 767 if (msg->ack_cb != NULL) |
768 msg->ack_cb(msg, msg->ack_data); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
769 |
10463 | 770 swboard = cmdproc->data; |
10403 | 771 swboard->ack_list = g_list_remove(swboard->ack_list, msg); |
10345 | 772 msn_message_unref(msg); |
4542 | 773 } |
774 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
775 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
776 out_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
777 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
778 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
779 MsnSwitchBoard *swboard; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
780 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
781 gc = cmdproc->session->account->gc; |
10463 | 782 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
783 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
784 if (swboard->current_users > 1) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
785 serv_got_chat_left(gc, swboard->chat_id); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
786 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
787 msn_switchboard_disconnect(swboard); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
788 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
789 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
790 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
791 usr_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
4542 | 792 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
793 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
794 |
10463 | 795 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
796 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
797 #if 0 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
798 GList *l; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
799 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
800 for (l = swboard->users; l != NULL; l = l->next) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
801 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
802 const char *user; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
803 user = l->data; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
804 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
805 msn_cmdproc_send(cmdproc, "CAL", "%s", user); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
806 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
807 #endif |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
808 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
809 swboard->ready = TRUE; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
810 msn_cmdproc_process_queue(cmdproc); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
811 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
812 |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
813 /************************************************************************** |
10345 | 814 * Message Handlers |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
815 **************************************************************************/ |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
816 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
817 plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
818 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
819 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
820 MsnSwitchBoard *swboard; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
821 const char *body; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
822 char *body_str; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
823 char *body_enc; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
824 char *body_final; |
10112 | 825 size_t body_len; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
826 const char *passport; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
827 const char *value; |
4542 | 828 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
829 gc = cmdproc->session->account->gc; |
10463 | 830 swboard = cmdproc->data; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
831 |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
832 body = msn_message_get_bin_data(msg, &body_len); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
833 body_str = g_strndup(body, body_len); |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10621
diff
changeset
|
834 body_enc = g_markup_escape_text(body_str, -1); |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
835 g_free(body_str); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
836 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
837 passport = msg->remote_user; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
838 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
839 if (!strcmp(passport, "messenger@microsoft.com") && |
6668
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
840 strstr(body, "immediate security update")) |
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
841 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
842 return; |
6668
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
843 } |
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
844 |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
845 #if 0 |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
846 if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL) |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
847 { |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
848 gaim_debug_misc("msn", "User-Agent = '%s'\n", value); |
4542 | 849 } |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
850 #endif |
4542 | 851 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
852 if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
853 { |
10568 | 854 char *pre, *post; |
6358
8ba58b296cc1
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6148
diff
changeset
|
855 |
10568 | 856 msn_parse_format(value, &pre, &post); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
857 |
10568 | 858 body_final = g_strdup_printf("%s%s%s", pre ? pre : "", |
859 body_enc ? body_enc : "", post ? post : ""); | |
6358
8ba58b296cc1
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6148
diff
changeset
|
860 |
10568 | 861 g_free(pre); |
862 g_free(post); | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
863 g_free(body_enc); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
864 } |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
865 else |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
866 { |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
867 body_final = body_enc; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
868 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
869 |
10773 | 870 swboard->flag |= MSN_SB_FLAG_IM; |
871 | |
10533 | 872 if (swboard->current_users > 1 || |
873 ((swboard->conv != NULL) && | |
11338 | 874 gaim_conversation_get_type(swboard->conv) == GAIM_CONV_TYPE_CHAT)) |
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8442
diff
changeset
|
875 { |
10773 | 876 /* If current_users is always ok as it should then there is no need to |
877 * check if this is a chat. */ | |
878 if (swboard->current_users <= 1) | |
879 gaim_debug_misc("msn", "plain_msg: current_users(%d)\n", | |
880 swboard->current_users); | |
881 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
882 serv_got_chat_in(gc, swboard->chat_id, passport, 0, body_final, |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
883 time(NULL)); |
10533 | 884 if (swboard->conv == NULL) |
10773 | 885 { |
10533 | 886 swboard->conv = gaim_find_chat(gc, swboard->chat_id); |
10773 | 887 swboard->flag |= MSN_SB_FLAG_IM; |
888 } | |
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8442
diff
changeset
|
889 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
890 else |
10533 | 891 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
892 serv_got_im(gc, passport, body_final, 0, time(NULL)); |
10533 | 893 if (swboard->conv == NULL) |
10773 | 894 { |
11338 | 895 swboard->conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, |
10533 | 896 passport, gaim_connection_get_account(gc)); |
10773 | 897 swboard->flag |= MSN_SB_FLAG_IM; |
898 } | |
10533 | 899 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
900 |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
901 g_free(body_final); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
902 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
903 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
904 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
905 control_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
906 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
907 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
908 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
909 const char *value; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
910 char *passport; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
911 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
912 gc = cmdproc->session->account->gc; |
10463 | 913 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
914 passport = msg->remote_user; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
915 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
916 if (swboard->current_users == 1 && |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
917 (value = msn_message_get_attr(msg, "TypingUser")) != NULL) |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
918 { |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
919 serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5793
diff
changeset
|
920 GAIM_TYPING); |
4542 | 921 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
922 } |
4542 | 923 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
924 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
925 clientcaps_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
926 { |
6845
5de4d9a4e0e2
[gaim-migrate @ 7390]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
927 #if 0 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
928 MsnSession *session; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
929 MsnSwitchBoard *swboard; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
930 MsnUser *user; |
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5454
diff
changeset
|
931 GHashTable *clientcaps; |
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5342
diff
changeset
|
932 const char *value; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
933 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
934 char *passport = msg->sender; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
935 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
936 session = cmdproc->session; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
937 swboard = cmdproc->servconn->swboard; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
938 |
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5454
diff
changeset
|
939 clientcaps = msn_message_get_hashtable_from_body(msg); |
6845
5de4d9a4e0e2
[gaim-migrate @ 7390]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
940 #endif |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
941 } |
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
942 |
11897 | 943 static void |
11321 | 944 nudge_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
945 { | |
946 MsnSwitchBoard *swboard; | |
947 char *username, *str; | |
948 GaimAccount *account; | |
949 GaimBuddy *buddy; | |
950 const char *user; | |
951 | |
952 swboard = cmdproc->data; | |
953 account = cmdproc->session->account; | |
954 user = msg->remote_user; | |
955 | |
956 if ((buddy = gaim_find_buddy(account, user)) != NULL) | |
957 username = g_markup_escape_text(gaim_buddy_get_alias(buddy), -1); | |
958 else | |
959 username = g_markup_escape_text(user, -1); | |
960 | |
961 str = g_strdup_printf(_("%s just sent you a Nudge!"), username); | |
962 g_free(username); | |
963 msn_switchboard_report_user(swboard, GAIM_MESSAGE_SYSTEM, str); | |
964 g_free(str); | |
965 } | |
966 | |
10345 | 967 /************************************************************************** |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
968 * Connect stuff |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
969 **************************************************************************/ |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
970 static void |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
971 connect_cb(MsnServConn *servconn) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
972 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
973 MsnSwitchBoard *swboard; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
974 MsnCmdProc *cmdproc; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
975 GaimAccount *account; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
976 |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
977 cmdproc = servconn->cmdproc; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
978 g_return_if_fail(cmdproc != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
979 |
10463 | 980 account = cmdproc->session->account; |
981 swboard = cmdproc->data; | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
982 g_return_if_fail(swboard != NULL); |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
983 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
984 if (msn_switchboard_is_invited(swboard)) |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
985 { |
10346 | 986 swboard->empty = FALSE; |
987 | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
988 msn_cmdproc_send(cmdproc, "ANS", "%s %s %s", |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
989 gaim_account_get_username(account), |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
990 swboard->auth_key, swboard->session_id); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
991 } |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
992 else |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
993 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
994 msn_cmdproc_send(cmdproc, "USR", "%s %s", |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
995 gaim_account_get_username(account), |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
996 swboard->auth_key); |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
997 } |
4542 | 998 } |
999 | |
1000 static void | |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
1001 disconnect_cb(MsnServConn *servconn) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1002 { |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
1003 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1004 |
10463 | 1005 swboard = servconn->cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1006 g_return_if_fail(swboard != NULL); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1007 |
10481 | 1008 msn_servconn_set_disconnect_cb(swboard->servconn, NULL); |
1009 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1010 msn_switchboard_destroy(swboard); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1011 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1012 |
10345 | 1013 gboolean |
1014 msn_switchboard_connect(MsnSwitchBoard *swboard, const char *host, int port) | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1015 { |
10345 | 1016 g_return_val_if_fail(swboard != NULL, FALSE); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1017 |
10345 | 1018 msn_servconn_set_connect_cb(swboard->servconn, connect_cb); |
10434 | 1019 msn_servconn_set_disconnect_cb(swboard->servconn, disconnect_cb); |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
1020 |
10345 | 1021 return msn_servconn_connect(swboard->servconn, host, port); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1022 } |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1023 |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1024 void |
10345 | 1025 msn_switchboard_disconnect(MsnSwitchBoard *swboard) |
4542 | 1026 { |
10345 | 1027 g_return_if_fail(swboard != NULL); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1028 |
10345 | 1029 msn_servconn_disconnect(swboard->servconn); |
4542 | 1030 } |
1031 | |
10345 | 1032 /************************************************************************** |
1033 * Call stuff | |
1034 **************************************************************************/ | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1035 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1036 got_cal(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1037 { |
10403 | 1038 #if 0 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1039 MsnSwitchBoard *swboard; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1040 const char *user; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1041 |
10463 | 1042 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1043 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1044 user = cmd->params[0]; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1045 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1046 msn_switchboard_add_user(swboard, user); |
10403 | 1047 #endif |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1048 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1049 |
10225 | 1050 static void |
1051 cal_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans) | |
1052 { | |
13125 | 1053 gaim_debug_warning("msn", "cal_timeout: command %s timed out\n", trans->command); |
1054 | |
10225 | 1055 cal_error_helper(trans, MSN_SB_ERROR_UNKNOWN); |
1056 } | |
1057 | |
1058 static void | |
1059 cal_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
1060 { | |
1061 int reason = MSN_SB_ERROR_UNKNOWN; | |
1062 | |
10451 | 1063 if (error == 215) |
1064 { | |
1065 gaim_debug_info("msn", "Invited user already in switchboard\n"); | |
1066 return; | |
1067 } | |
1068 else if (error == 217) | |
1069 { | |
10225 | 1070 reason = MSN_SB_ERROR_USER_OFFLINE; |
10451 | 1071 } |
10225 | 1072 |
13125 | 1073 gaim_debug_warning("msn", "cal_error: command %s gave error %i\n", trans->command, error); |
1074 | |
10225 | 1075 cal_error_helper(trans, reason); |
1076 } | |
1077 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1078 void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1079 msn_switchboard_request_add_user(MsnSwitchBoard *swboard, const char *user) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1080 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1081 MsnTransaction *trans; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1082 MsnCmdProc *cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1083 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1084 g_return_if_fail(swboard != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1085 |
10463 | 1086 cmdproc = swboard->cmdproc; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1087 |
10225 | 1088 trans = msn_transaction_new(cmdproc, "CAL", "%s", user); |
10403 | 1089 /* this doesn't do anything, but users seem to think that |
1090 * 'Unhandled command' is some kind of error, so we don't report it */ | |
1091 msn_transaction_add_cb(trans, "CAL", got_cal); | |
10225 | 1092 |
1093 msn_transaction_set_data(trans, swboard); | |
1094 msn_transaction_set_timeout_cb(trans, cal_timeout); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1095 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1096 if (swboard->ready) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1097 msn_cmdproc_send_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1098 else |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1099 msn_cmdproc_queue_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1100 } |
4542 | 1101 |
10345 | 1102 /************************************************************************** |
1103 * Create & Transfer stuff | |
1104 **************************************************************************/ | |
10481 | 1105 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1106 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1107 got_swboard(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1108 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1109 MsnSwitchBoard *swboard; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1110 char *host; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1111 int port; |
9218 | 1112 swboard = cmd->trans->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1113 |
10403 | 1114 if (g_list_find(cmdproc->session->switches, swboard) == NULL) |
1115 /* The conversation window was closed. */ | |
1116 return; | |
1117 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1118 msn_switchboard_set_auth_key(swboard, cmd->params[4]); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1119 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1120 msn_parse_socket(cmd->params[2], &host, &port); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1121 |
10568 | 1122 if (!msn_switchboard_connect(swboard, host, port)) |
1123 msn_switchboard_destroy(swboard); | |
10093 | 1124 |
1125 g_free(host); | |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1126 } |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1127 |
10225 | 1128 static void |
1129 xfr_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
1130 { | |
1131 MsnSwitchBoard *swboard; | |
1132 int reason = MSN_SB_ERROR_UNKNOWN; | |
1133 | |
1134 if (error == 913) | |
1135 reason = MSN_SB_ERROR_OFFLINE; | |
13125 | 1136 else if (error == 800) |
1137 reason = MSN_SB_ERROR_TOO_FAST; | |
10225 | 1138 |
1139 swboard = trans->data; | |
1140 | |
13125 | 1141 gaim_debug_info("msn", "xfr_error %i for %s: trans %x, command %s, reason %i\n", |
13243
70809b5c5f86
[gaim-migrate @ 15609]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13125
diff
changeset
|
1142 error, (swboard->im_user ? swboard->im_user : "(null)"), trans, |
70809b5c5f86
[gaim-migrate @ 15609]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13125
diff
changeset
|
1143 (trans->command ? trans->command : "(null)"), reason); |
13125 | 1144 |
10225 | 1145 swboard_error_helper(swboard, reason, swboard->im_user); |
1146 } | |
1147 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1148 void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1149 msn_switchboard_request(MsnSwitchBoard *swboard) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1150 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1151 MsnCmdProc *cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1152 MsnTransaction *trans; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1153 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1154 g_return_if_fail(swboard != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1155 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1156 cmdproc = swboard->session->notification->cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1157 |
10225 | 1158 trans = msn_transaction_new(cmdproc, "XFR", "%s", "SB"); |
1159 msn_transaction_add_cb(trans, "XFR", got_swboard); | |
10403 | 1160 |
10225 | 1161 msn_transaction_set_data(trans, swboard); |
1162 msn_transaction_set_error_cb(trans, xfr_error); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1163 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1164 msn_cmdproc_send_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1165 } |
10345 | 1166 |
10403 | 1167 void |
1168 msn_switchboard_close(MsnSwitchBoard *swboard) | |
1169 { | |
1170 g_return_if_fail(swboard != NULL); | |
1171 | |
10481 | 1172 if (swboard->error != MSN_SB_ERROR_NONE) |
1173 { | |
1174 msn_switchboard_destroy(swboard); | |
1175 } | |
1176 else if (g_queue_is_empty(swboard->msg_queue) || | |
1177 !swboard->session->connected) | |
10403 | 1178 { |
1179 MsnCmdProc *cmdproc; | |
10463 | 1180 cmdproc = swboard->cmdproc; |
10403 | 1181 msn_cmdproc_send_quick(cmdproc, "OUT", NULL, NULL); |
1182 | |
1183 msn_switchboard_destroy(swboard); | |
1184 } | |
1185 else | |
10481 | 1186 { |
10403 | 1187 swboard->closed = TRUE; |
10481 | 1188 } |
10403 | 1189 } |
1190 | |
10773 | 1191 gboolean |
1192 msn_switchboard_release(MsnSwitchBoard *swboard, MsnSBFlag flag) | |
1193 { | |
1194 g_return_val_if_fail(swboard != NULL, FALSE); | |
1195 | |
1196 swboard->flag &= ~flag; | |
1197 | |
1198 if (flag == MSN_SB_FLAG_IM) | |
1199 /* Forget any conversation that used to be associated with this | |
1200 * swboard. */ | |
1201 swboard->conv = NULL; | |
1202 | |
1203 if (swboard->flag == 0) | |
1204 { | |
1205 msn_switchboard_close(swboard); | |
1206 return TRUE; | |
1207 } | |
1208 | |
1209 return FALSE; | |
1210 } | |
1211 | |
10345 | 1212 /************************************************************************** |
1213 * Init stuff | |
1214 **************************************************************************/ | |
10481 | 1215 |
10345 | 1216 void |
1217 msn_switchboard_init(void) | |
1218 { | |
1219 cbs_table = msn_table_new(); | |
1220 | |
1221 msn_table_add_cmd(cbs_table, "ANS", "ANS", ans_cmd); | |
1222 msn_table_add_cmd(cbs_table, "ANS", "IRO", iro_cmd); | |
1223 | |
1224 msn_table_add_cmd(cbs_table, "MSG", "ACK", ack_cmd); | |
1225 msn_table_add_cmd(cbs_table, "MSG", "NAK", nak_cmd); | |
1226 | |
1227 msn_table_add_cmd(cbs_table, "USR", "USR", usr_cmd); | |
1228 | |
1229 msn_table_add_cmd(cbs_table, NULL, "MSG", msg_cmd); | |
1230 msn_table_add_cmd(cbs_table, NULL, "JOI", joi_cmd); | |
1231 msn_table_add_cmd(cbs_table, NULL, "BYE", bye_cmd); | |
1232 msn_table_add_cmd(cbs_table, NULL, "OUT", out_cmd); | |
1233 | |
1234 #if 0 | |
1235 /* They might skip the history */ | |
1236 msn_table_add_cmd(cbs_table, NULL, "ACK", NULL); | |
1237 #endif | |
1238 | |
1239 msn_table_add_error(cbs_table, "MSG", msg_error); | |
1240 msn_table_add_error(cbs_table, "CAL", cal_error); | |
1241 | |
1242 /* Register the message type callbacks. */ | |
1243 msn_table_add_msg_type(cbs_table, "text/plain", | |
1244 plain_msg); | |
1245 msn_table_add_msg_type(cbs_table, "text/x-msmsgscontrol", | |
1246 control_msg); | |
1247 msn_table_add_msg_type(cbs_table, "text/x-clientcaps", | |
1248 clientcaps_msg); | |
1249 msn_table_add_msg_type(cbs_table, "text/x-clientinfo", | |
1250 clientcaps_msg); | |
1251 msn_table_add_msg_type(cbs_table, "application/x-msnmsgrp2p", | |
1252 msn_p2p_msg); | |
1253 msn_table_add_msg_type(cbs_table, "text/x-mms-emoticon", | |
1254 msn_emoticon_msg); | |
11518 | 1255 msn_table_add_msg_type(cbs_table, "text/x-mms-animemoticon", |
1256 msn_emoticon_msg); | |
11321 | 1257 msn_table_add_msg_type(cbs_table, "text/x-msnmsgr-datacast", |
1258 nudge_msg); | |
10345 | 1259 #if 0 |
1260 msn_table_add_msg_type(cbs_table, "text/x-msmmsginvite", | |
1261 msn_invite_msg); | |
1262 #endif | |
1263 } | |
1264 | |
1265 void | |
1266 msn_switchboard_end(void) | |
1267 { | |
1268 msn_table_destroy(cbs_table); | |
1269 } |