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