Mercurial > pidgin.yaz
annotate src/protocols/msn/switchboard.c @ 13598:41e40b323dc3
[gaim-migrate @ 15984]
Previously our file transfer dialog showed "time elapsed" as the current
time minus the time when the transfer was added to the ft dialog.
When sending a file, the transfer is added when you offer the file to
the remote user, not when the transfer actually starts. This meant the
"time elapsed" was longer than it should have been, which threw off the
transfer rate.
This should fix that.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 09 Apr 2006 17:38:38 +0000 |
parents | 90d0a473e7ff |
children | 3cfdf1653a64 |
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 { |
13449 | 295 swboard->conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, |
10246 | 296 user, account); |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
297 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
298 else |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
299 { |
10773 | 300 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
|
301 } |
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 |
12323
fc464a0abccc
[gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents:
12236
diff
changeset
|
304 static GaimConversation * |
10225 | 305 msn_switchboard_get_conv(MsnSwitchBoard *swboard) |
306 { | |
307 GaimAccount *account; | |
308 | |
309 g_return_val_if_fail(swboard != NULL, NULL); | |
310 | |
311 if (swboard->conv != NULL) | |
312 return swboard->conv; | |
313 | |
10346 | 314 gaim_debug_error("msn", "Switchboard with unassigned conversation\n"); |
10345 | 315 |
10225 | 316 account = swboard->session->account; |
317 | |
13449 | 318 return (swboard->conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, |
319 account, swboard->im_user)); | |
10225 | 320 } |
321 | |
12323
fc464a0abccc
[gaim-migrate @ 14627]
Richard Laager <rlaager@wiktel.com>
parents:
12236
diff
changeset
|
322 static void |
10225 | 323 msn_switchboard_report_user(MsnSwitchBoard *swboard, GaimMessageFlags flags, const char *msg) |
324 { | |
325 GaimConversation *conv; | |
326 | |
327 g_return_if_fail(swboard != NULL); | |
328 g_return_if_fail(msg != NULL); | |
329 | |
330 if ((conv = msn_switchboard_get_conv(swboard)) != NULL) | |
331 { | |
332 gaim_conversation_write(conv, NULL, msg, flags, time(NULL)); | |
333 } | |
334 } | |
335 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
336 static void |
10345 | 337 swboard_error_helper(MsnSwitchBoard *swboard, int reason, const char *passport) |
338 { | |
10451 | 339 g_return_if_fail(swboard != NULL); |
340 | |
13245 | 341 gaim_debug_warning("msg", "Error: Unable to call the user %s for reason %i\n", |
342 passport ? passport : "(null)", reason); | |
10345 | 343 |
10533 | 344 /* TODO: if current_users > 0, this is probably a chat and an invite failed, |
345 * we should report that in the chat or something */ | |
346 if (swboard->current_users == 0) | |
10345 | 347 { |
348 swboard->error = reason; | |
10463 | 349 msn_switchboard_close(swboard); |
10345 | 350 } |
351 } | |
352 | |
353 static void | |
354 cal_error_helper(MsnTransaction *trans, int reason) | |
355 { | |
356 MsnSwitchBoard *swboard; | |
357 const char *passport; | |
358 char **params; | |
359 | |
360 params = g_strsplit(trans->params, " ", 0); | |
361 | |
362 passport = params[0]; | |
363 | |
364 swboard = trans->data; | |
365 | |
13125 | 366 gaim_debug_warning("msn", "cal_error_helper: command %s failed for reason %i\n",trans->command,reason); |
367 | |
10345 | 368 swboard_error_helper(swboard, reason, passport); |
369 | |
370 g_strfreev(params); | |
371 } | |
372 | |
373 static void | |
374 msg_error_helper(MsnCmdProc *cmdproc, MsnMessage *msg, MsnMsgErrorType error) | |
375 { | |
10403 | 376 MsnSwitchBoard *swboard; |
377 | |
10345 | 378 g_return_if_fail(cmdproc != NULL); |
379 g_return_if_fail(msg != NULL); | |
380 | |
10403 | 381 if ((error != MSN_MSG_ERROR_SB) && (msg->nak_cb != NULL)) |
10345 | 382 msg->nak_cb(msg, msg->ack_data); |
383 | |
10463 | 384 swboard = cmdproc->data; |
10403 | 385 |
10773 | 386 /* This is not good, and should be fixed somewhere else. */ |
387 g_return_if_fail(swboard != NULL); | |
388 | |
10345 | 389 if (msg->type == MSN_MSG_TEXT) |
390 { | |
10504 | 391 const char *format, *str_reason; |
10346 | 392 char *body_str, *body_enc, *pre, *post; |
10345 | 393 |
394 #if 0 | |
395 if (swboard->conv == NULL) | |
396 { | |
10346 | 397 if (msg->ack_ref) |
10403 | 398 msn_message_unref(msg); |
10346 | 399 |
10345 | 400 return; |
401 } | |
402 #endif | |
403 | |
10346 | 404 if (error == MSN_MSG_ERROR_TIMEOUT) |
10345 | 405 { |
406 str_reason = _("Message may have not been sent " | |
10451 | 407 "because a timeout occurred:"); |
10345 | 408 } |
10346 | 409 else if (error == MSN_MSG_ERROR_SB) |
10345 | 410 { |
411 switch (swboard->error) | |
412 { | |
413 case MSN_SB_ERROR_OFFLINE: | |
414 str_reason = _("Message could not be sent, " | |
10346 | 415 "not allowed while invisible:"); |
10345 | 416 break; |
417 case MSN_SB_ERROR_USER_OFFLINE: | |
418 str_reason = _("Message could not be sent " | |
10346 | 419 "because the user is offline:"); |
10345 | 420 break; |
421 case MSN_SB_ERROR_CONNECTION: | |
422 str_reason = _("Message could not be sent " | |
10391 | 423 "because a connection error occurred:"); |
10345 | 424 break; |
13125 | 425 case MSN_SB_ERROR_TOO_FAST: |
426 str_reason = _("Message could not be sent " | |
427 "because we are sending too quickly:"); | |
428 break; | |
10345 | 429 default: |
430 str_reason = _("Message could not be sent " | |
431 "because an error with " | |
10391 | 432 "the switchboard occurred:"); |
10345 | 433 break; |
434 } | |
435 } | |
436 else | |
437 { | |
438 str_reason = _("Message may have not been sent " | |
10391 | 439 "because an unknown error occurred:"); |
10345 | 440 } |
441 | |
10346 | 442 body_str = msn_message_to_string(msg); |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10621
diff
changeset
|
443 body_enc = g_markup_escape_text(body_str, -1); |
10346 | 444 g_free(body_str); |
445 | |
446 format = msn_message_get_attr(msg, "X-MMS-IM-Format"); | |
447 msn_parse_format(format, &pre, &post); | |
10568 | 448 body_str = g_strdup_printf("%s%s%s", pre ? pre : "", |
449 body_enc ? body_enc : "", post ? post : ""); | |
10346 | 450 g_free(body_enc); |
451 g_free(pre); | |
452 g_free(post); | |
10345 | 453 |
10403 | 454 msn_switchboard_report_user(swboard, GAIM_MESSAGE_ERROR, |
455 str_reason); | |
456 msn_switchboard_report_user(swboard, GAIM_MESSAGE_RAW, | |
457 body_str); | |
10345 | 458 |
10346 | 459 g_free(body_str); |
10345 | 460 } |
461 | |
10403 | 462 /* If a timeout occures we will want the msg around just in case we |
463 * receive the ACK after the timeout. */ | |
464 if (msg->ack_ref && error != MSN_MSG_ERROR_TIMEOUT) | |
465 { | |
466 swboard->ack_list = g_list_remove(swboard->ack_list, msg); | |
10346 | 467 msn_message_unref(msg); |
10403 | 468 } |
10345 | 469 } |
470 | |
471 /************************************************************************** | |
10481 | 472 * Message Stuff |
473 **************************************************************************/ | |
474 | |
475 /** Called when a message times out. */ | |
476 static void | |
477 msg_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans) | |
478 { | |
479 MsnMessage *msg; | |
480 | |
481 msg = trans->data; | |
482 | |
483 msg_error_helper(cmdproc, msg, MSN_MSG_ERROR_TIMEOUT); | |
484 } | |
485 | |
486 /** Called when we receive an error of a message. */ | |
487 static void | |
488 msg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
489 { | |
490 msg_error_helper(cmdproc, trans->data, MSN_MSG_ERROR_UNKNOWN); | |
491 } | |
492 | |
493 #if 0 | |
494 /** Called when we receive an ack of a special message. */ | |
495 static void | |
496 msg_ack(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
497 { | |
498 MsnMessage *msg; | |
499 | |
500 msg = cmd->trans->data; | |
501 | |
502 if (msg->ack_cb != NULL) | |
503 msg->ack_cb(msg->ack_data); | |
504 | |
505 msn_message_unref(msg); | |
506 } | |
507 | |
508 /** Called when we receive a nak of a special message. */ | |
509 static void | |
510 msg_nak(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
511 { | |
512 MsnMessage *msg; | |
513 | |
514 msg = cmd->trans->data; | |
515 | |
516 msn_message_unref(msg); | |
517 } | |
518 #endif | |
519 | |
520 static void | |
521 release_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
522 { | |
523 MsnCmdProc *cmdproc; | |
524 MsnTransaction *trans; | |
525 char *payload; | |
526 gsize payload_len; | |
527 | |
528 g_return_if_fail(swboard != NULL); | |
529 g_return_if_fail(msg != NULL); | |
530 | |
531 cmdproc = swboard->cmdproc; | |
532 | |
533 payload = msn_message_gen_payload(msg, &payload_len); | |
534 | |
11321 | 535 #ifdef MSN_DEBUG_SB |
536 msn_message_show_readable(msg, "SB SEND", FALSE); | |
537 #endif | |
10481 | 538 |
539 trans = msn_transaction_new(cmdproc, "MSG", "%c %d", | |
540 msn_message_get_flag(msg), payload_len); | |
541 | |
542 /* Data for callbacks */ | |
543 msn_transaction_set_data(trans, msg); | |
544 | |
545 if (msg->type == MSN_MSG_TEXT) | |
546 { | |
547 msg->ack_ref = TRUE; | |
548 msn_message_ref(msg); | |
549 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
550 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
551 } | |
552 else if (msg->type == MSN_MSG_SLP) | |
553 { | |
554 msg->ack_ref = TRUE; | |
555 msn_message_ref(msg); | |
556 swboard->ack_list = g_list_append(swboard->ack_list, msg); | |
557 msn_transaction_set_timeout_cb(trans, msg_timeout); | |
558 #if 0 | |
559 if (msg->ack_cb != NULL) | |
560 { | |
561 msn_transaction_add_cb(trans, "ACK", msg_ack); | |
562 msn_transaction_add_cb(trans, "NAK", msg_nak); | |
563 } | |
564 #endif | |
565 } | |
566 | |
567 trans->payload = payload; | |
568 trans->payload_len = payload_len; | |
569 | |
570 msg->trans = trans; | |
571 | |
572 msn_cmdproc_send_trans(cmdproc, trans); | |
573 } | |
574 | |
575 static void | |
576 queue_msg(MsnSwitchBoard *swboard, MsnMessage *msg) | |
577 { | |
578 g_return_if_fail(swboard != NULL); | |
579 g_return_if_fail(msg != NULL); | |
580 | |
581 gaim_debug_info("msn", "Appending message to queue.\n"); | |
582 | |
583 g_queue_push_tail(swboard->msg_queue, msg); | |
584 | |
585 msn_message_ref(msg); | |
586 } | |
587 | |
588 static void | |
589 process_queue(MsnSwitchBoard *swboard) | |
590 { | |
591 MsnMessage *msg; | |
592 | |
593 g_return_if_fail(swboard != NULL); | |
594 | |
595 gaim_debug_info("msn", "Processing queue\n"); | |
596 | |
597 while ((msg = g_queue_pop_head(swboard->msg_queue)) != NULL) | |
598 { | |
599 gaim_debug_info("msn", "Sending message\n"); | |
600 release_msg(swboard, msg); | |
601 msn_message_unref(msg); | |
602 } | |
603 } | |
604 | |
605 gboolean | |
606 msn_switchboard_can_send(MsnSwitchBoard *swboard) | |
607 { | |
608 g_return_val_if_fail(swboard != NULL, FALSE); | |
609 | |
610 if (swboard->empty || !g_queue_is_empty(swboard->msg_queue)) | |
611 return FALSE; | |
612 | |
613 return TRUE; | |
614 } | |
615 | |
616 void | |
617 msn_switchboard_send_msg(MsnSwitchBoard *swboard, MsnMessage *msg, | |
618 gboolean queue) | |
619 { | |
620 g_return_if_fail(swboard != NULL); | |
621 g_return_if_fail(msg != NULL); | |
622 | |
623 if (msn_switchboard_can_send(swboard)) | |
624 release_msg(swboard, msg); | |
625 else if (queue) | |
626 queue_msg(swboard, msg); | |
627 } | |
628 | |
629 /************************************************************************** | |
10345 | 630 * Switchboard Commands |
631 **************************************************************************/ | |
10481 | 632 |
10345 | 633 static void |
634 ans_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) | |
635 { | |
636 MsnSwitchBoard *swboard; | |
637 | |
10463 | 638 swboard = cmdproc->data; |
10345 | 639 swboard->ready = TRUE; |
640 } | |
641 | |
642 static void | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
643 bye_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
644 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
645 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
646 const char *user; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
647 |
10463 | 648 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
649 user = cmd->params[0]; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
650 |
11321 | 651 if (!(swboard->flag & MSN_SB_FLAG_IM) && (swboard->conv != NULL)) |
10773 | 652 gaim_debug_error("msn_switchboard", "bye_cmd: helper bug\n"); |
653 | |
10345 | 654 if (swboard->conv == NULL) |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
655 { |
10345 | 656 /* This is a helper switchboard */ |
10434 | 657 msn_switchboard_destroy(swboard); |
10345 | 658 } |
10533 | 659 else if ((swboard->current_users > 1) || |
11338 | 660 (gaim_conversation_get_type(swboard->conv) == GAIM_CONV_TYPE_CHAT)) |
10345 | 661 { |
662 /* This is a switchboard used for a chat */ | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
663 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(swboard->conv), user, NULL); |
10533 | 664 swboard->current_users--; |
665 if (swboard->current_users == 0) | |
666 msn_switchboard_destroy(swboard); | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
667 } |
8372
bd16ed85cfc2
[gaim-migrate @ 9099]
Christian Hammond <chipx86@chipx86.com>
parents:
8207
diff
changeset
|
668 else |
bd16ed85cfc2
[gaim-migrate @ 9099]
Christian Hammond <chipx86@chipx86.com>
parents:
8207
diff
changeset
|
669 { |
10345 | 670 /* This is a switchboard used for a im session */ |
10434 | 671 msn_switchboard_destroy(swboard); |
4542 | 672 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
673 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
674 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
675 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
676 iro_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
677 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
678 GaimAccount *account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
679 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
680 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
681 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
682 account = cmdproc->session->account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
683 gc = account->gc; |
10463 | 684 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
685 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
686 swboard->total_users = atoi(cmd->params[2]); |
6026
01dd6b652c22
[gaim-migrate @ 6476]
Christian Hammond <chipx86@chipx86.com>
parents:
6025
diff
changeset
|
687 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
688 msn_switchboard_add_user(swboard, cmd->params[3]); |
4542 | 689 } |
690 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
691 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
692 joi_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
4542 | 693 { |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
694 MsnSession *session; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
695 GaimAccount *account; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
696 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
697 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
698 const char *passport; |
4542 | 699 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
700 passport = cmd->params[0]; |
4542 | 701 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
702 session = cmdproc->session; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
703 account = session->account; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
704 gc = account->gc; |
10463 | 705 swboard = cmdproc->data; |
6026
01dd6b652c22
[gaim-migrate @ 6476]
Christian Hammond <chipx86@chipx86.com>
parents:
6025
diff
changeset
|
706 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
707 msn_switchboard_add_user(swboard, passport); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
708 |
10481 | 709 process_queue(swboard); |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
710 |
10463 | 711 if (!session->http_method) |
712 send_clientcaps(swboard); | |
10403 | 713 |
714 if (swboard->closed) | |
715 msn_switchboard_close(swboard); | |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
716 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
717 |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
718 static void |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
719 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
|
720 { |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
721 MsnMessage *msg; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
722 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
723 msg = msn_message_new_from_cmd(cmdproc->session, cmd); |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
724 |
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
725 msn_message_parse_payload(msg, payload, len); |
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 |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
747 nak_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
748 { |
10345 | 749 MsnMessage *msg; |
750 | |
751 msg = cmd->trans->data; | |
752 g_return_if_fail(msg != NULL); | |
753 | |
754 msg_error_helper(cmdproc, msg, MSN_MSG_ERROR_NAK); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
755 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
756 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
757 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
758 ack_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
759 { |
10403 | 760 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
761 MsnMessage *msg; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
762 |
10345 | 763 msg = cmd->trans->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
764 |
10345 | 765 if (msg->ack_cb != NULL) |
766 msg->ack_cb(msg, msg->ack_data); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
767 |
10463 | 768 swboard = cmdproc->data; |
10403 | 769 swboard->ack_list = g_list_remove(swboard->ack_list, msg); |
10345 | 770 msn_message_unref(msg); |
4542 | 771 } |
772 | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
773 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
774 out_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
775 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
776 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
777 MsnSwitchBoard *swboard; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
778 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
779 gc = cmdproc->session->account->gc; |
10463 | 780 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
781 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
782 if (swboard->current_users > 1) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
783 serv_got_chat_left(gc, swboard->chat_id); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
784 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
785 msn_switchboard_disconnect(swboard); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
786 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
787 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
788 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
789 usr_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
4542 | 790 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
791 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
792 |
10463 | 793 swboard = cmdproc->data; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
794 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
795 #if 0 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
796 GList *l; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
797 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
798 for (l = swboard->users; l != NULL; l = l->next) |
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 const char *user; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
801 user = l->data; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
802 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
803 msn_cmdproc_send(cmdproc, "CAL", "%s", user); |
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 #endif |
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 swboard->ready = TRUE; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
808 msn_cmdproc_process_queue(cmdproc); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
809 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
810 |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
811 /************************************************************************** |
10345 | 812 * Message Handlers |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
813 **************************************************************************/ |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
814 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
815 plain_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
816 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
817 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
818 MsnSwitchBoard *swboard; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
819 const char *body; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
820 char *body_str; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
821 char *body_enc; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
822 char *body_final; |
10112 | 823 size_t body_len; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
824 const char *passport; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
825 const char *value; |
4542 | 826 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
827 gc = cmdproc->session->account->gc; |
10463 | 828 swboard = cmdproc->data; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
829 |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
830 body = msn_message_get_bin_data(msg, &body_len); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
831 body_str = g_strndup(body, body_len); |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10621
diff
changeset
|
832 body_enc = g_markup_escape_text(body_str, -1); |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
833 g_free(body_str); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
834 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
835 passport = msg->remote_user; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
836 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
837 if (!strcmp(passport, "messenger@microsoft.com") && |
6668
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
838 strstr(body, "immediate security update")) |
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
839 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
840 return; |
6668
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
841 } |
7e8a70c531a7
[gaim-migrate @ 7193]
Christian Hammond <chipx86@chipx86.com>
parents:
6640
diff
changeset
|
842 |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
843 #if 0 |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
844 if ((value = msn_message_get_attr(msg, "User-Agent")) != NULL) |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
845 { |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
846 gaim_debug_misc("msn", "User-Agent = '%s'\n", value); |
4542 | 847 } |
8646
1e211dde3cae
[gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents:
8583
diff
changeset
|
848 #endif |
4542 | 849 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
850 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
|
851 { |
10568 | 852 char *pre, *post; |
6358
8ba58b296cc1
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6148
diff
changeset
|
853 |
10568 | 854 msn_parse_format(value, &pre, &post); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
855 |
10568 | 856 body_final = g_strdup_printf("%s%s%s", pre ? pre : "", |
857 body_enc ? body_enc : "", post ? post : ""); | |
6358
8ba58b296cc1
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6148
diff
changeset
|
858 |
10568 | 859 g_free(pre); |
860 g_free(post); | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
861 g_free(body_enc); |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
862 } |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
863 else |
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 body_final = body_enc; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
866 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
867 |
10773 | 868 swboard->flag |= MSN_SB_FLAG_IM; |
869 | |
10533 | 870 if (swboard->current_users > 1 || |
871 ((swboard->conv != NULL) && | |
11338 | 872 gaim_conversation_get_type(swboard->conv) == GAIM_CONV_TYPE_CHAT)) |
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8442
diff
changeset
|
873 { |
10773 | 874 /* If current_users is always ok as it should then there is no need to |
875 * check if this is a chat. */ | |
876 if (swboard->current_users <= 1) | |
877 gaim_debug_misc("msn", "plain_msg: current_users(%d)\n", | |
878 swboard->current_users); | |
879 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
880 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
|
881 time(NULL)); |
10533 | 882 if (swboard->conv == NULL) |
10773 | 883 { |
10533 | 884 swboard->conv = gaim_find_chat(gc, swboard->chat_id); |
10773 | 885 swboard->flag |= MSN_SB_FLAG_IM; |
886 } | |
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8442
diff
changeset
|
887 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
888 else |
10533 | 889 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
890 serv_got_im(gc, passport, body_final, 0, time(NULL)); |
10533 | 891 if (swboard->conv == NULL) |
10773 | 892 { |
11338 | 893 swboard->conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, |
10533 | 894 passport, gaim_connection_get_account(gc)); |
10773 | 895 swboard->flag |= MSN_SB_FLAG_IM; |
896 } | |
10533 | 897 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
898 |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
899 g_free(body_final); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
900 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
901 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
902 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
903 control_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
904 { |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
905 GaimConnection *gc; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
906 MsnSwitchBoard *swboard; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
907 const char *value; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
908 char *passport; |
5309
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 gc = cmdproc->session->account->gc; |
10463 | 911 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
912 passport = msg->remote_user; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
913 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
914 if (swboard->current_users == 1 && |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
915 (value = msn_message_get_attr(msg, "TypingUser")) != NULL) |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
916 { |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
917 serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5793
diff
changeset
|
918 GAIM_TYPING); |
4542 | 919 } |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
920 } |
4542 | 921 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
922 static void |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
923 clientcaps_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
924 { |
6845
5de4d9a4e0e2
[gaim-migrate @ 7390]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
925 #if 0 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
926 MsnSession *session; |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
927 MsnSwitchBoard *swboard; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
928 MsnUser *user; |
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5454
diff
changeset
|
929 GHashTable *clientcaps; |
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5342
diff
changeset
|
930 const char *value; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
931 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
932 char *passport = msg->sender; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
933 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
934 session = cmdproc->session; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
935 swboard = cmdproc->servconn->swboard; |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
936 |
5475
ad9887c91a59
[gaim-migrate @ 5871]
Christian Hammond <chipx86@chipx86.com>
parents:
5454
diff
changeset
|
937 clientcaps = msn_message_get_hashtable_from_body(msg); |
6845
5de4d9a4e0e2
[gaim-migrate @ 7390]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
938 #endif |
5316
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
939 } |
d5690ed70085
[gaim-migrate @ 5688]
Christian Hammond <chipx86@chipx86.com>
parents:
5309
diff
changeset
|
940 |
11897 | 941 static void |
11321 | 942 nudge_msg(MsnCmdProc *cmdproc, MsnMessage *msg) |
943 { | |
944 MsnSwitchBoard *swboard; | |
945 char *username, *str; | |
946 GaimAccount *account; | |
947 GaimBuddy *buddy; | |
948 const char *user; | |
949 | |
950 swboard = cmdproc->data; | |
951 account = cmdproc->session->account; | |
952 user = msg->remote_user; | |
953 | |
954 if ((buddy = gaim_find_buddy(account, user)) != NULL) | |
955 username = g_markup_escape_text(gaim_buddy_get_alias(buddy), -1); | |
956 else | |
957 username = g_markup_escape_text(user, -1); | |
958 | |
959 str = g_strdup_printf(_("%s just sent you a Nudge!"), username); | |
960 g_free(username); | |
961 msn_switchboard_report_user(swboard, GAIM_MESSAGE_SYSTEM, str); | |
962 g_free(str); | |
963 } | |
964 | |
10345 | 965 /************************************************************************** |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
966 * Connect stuff |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
967 **************************************************************************/ |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
968 static void |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
969 connect_cb(MsnServConn *servconn) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
970 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
971 MsnSwitchBoard *swboard; |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
972 MsnCmdProc *cmdproc; |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
973 GaimAccount *account; |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
974 |
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
975 cmdproc = servconn->cmdproc; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
976 g_return_if_fail(cmdproc != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
977 |
10463 | 978 account = cmdproc->session->account; |
979 swboard = cmdproc->data; | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
980 g_return_if_fail(swboard != NULL); |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
981 |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
982 if (msn_switchboard_is_invited(swboard)) |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
983 { |
10346 | 984 swboard->empty = FALSE; |
985 | |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
986 msn_cmdproc_send(cmdproc, "ANS", "%s %s %s", |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
987 gaim_account_get_username(account), |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
988 swboard->auth_key, swboard->session_id); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
989 } |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
990 else |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
991 { |
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
9083
diff
changeset
|
992 msn_cmdproc_send(cmdproc, "USR", "%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); |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
995 } |
4542 | 996 } |
997 | |
998 static void | |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
999 disconnect_cb(MsnServConn *servconn) |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1000 { |
8583
fc27237783ee
[gaim-migrate @ 9333]
Christian Hammond <chipx86@chipx86.com>
parents:
8499
diff
changeset
|
1001 MsnSwitchBoard *swboard; |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1002 |
10463 | 1003 swboard = servconn->cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1004 g_return_if_fail(swboard != NULL); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1005 |
10481 | 1006 msn_servconn_set_disconnect_cb(swboard->servconn, NULL); |
1007 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1008 msn_switchboard_destroy(swboard); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1009 } |
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1010 |
10345 | 1011 gboolean |
1012 msn_switchboard_connect(MsnSwitchBoard *swboard, const char *host, int port) | |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1013 { |
10345 | 1014 g_return_val_if_fail(swboard != NULL, FALSE); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1015 |
10345 | 1016 msn_servconn_set_connect_cb(swboard->servconn, connect_cb); |
10434 | 1017 msn_servconn_set_disconnect_cb(swboard->servconn, disconnect_cb); |
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9194
diff
changeset
|
1018 |
10345 | 1019 return msn_servconn_connect(swboard->servconn, host, port); |
8808
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1020 } |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1021 |
bbd8cdaf0ad5
[gaim-migrate @ 9570]
Christian Hammond <chipx86@chipx86.com>
parents:
8663
diff
changeset
|
1022 void |
10345 | 1023 msn_switchboard_disconnect(MsnSwitchBoard *swboard) |
4542 | 1024 { |
10345 | 1025 g_return_if_fail(swboard != NULL); |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1026 |
10345 | 1027 msn_servconn_disconnect(swboard->servconn); |
4542 | 1028 } |
1029 | |
10345 | 1030 /************************************************************************** |
1031 * Call stuff | |
1032 **************************************************************************/ | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1033 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1034 got_cal(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1035 { |
10403 | 1036 #if 0 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1037 MsnSwitchBoard *swboard; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1038 const char *user; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1039 |
10463 | 1040 swboard = cmdproc->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1041 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1042 user = cmd->params[0]; |
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 msn_switchboard_add_user(swboard, user); |
10403 | 1045 #endif |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1046 } |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1047 |
10225 | 1048 static void |
1049 cal_timeout(MsnCmdProc *cmdproc, MsnTransaction *trans) | |
1050 { | |
13125 | 1051 gaim_debug_warning("msn", "cal_timeout: command %s timed out\n", trans->command); |
1052 | |
10225 | 1053 cal_error_helper(trans, MSN_SB_ERROR_UNKNOWN); |
1054 } | |
1055 | |
1056 static void | |
1057 cal_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
1058 { | |
1059 int reason = MSN_SB_ERROR_UNKNOWN; | |
1060 | |
10451 | 1061 if (error == 215) |
1062 { | |
1063 gaim_debug_info("msn", "Invited user already in switchboard\n"); | |
1064 return; | |
1065 } | |
1066 else if (error == 217) | |
1067 { | |
10225 | 1068 reason = MSN_SB_ERROR_USER_OFFLINE; |
10451 | 1069 } |
10225 | 1070 |
13125 | 1071 gaim_debug_warning("msn", "cal_error: command %s gave error %i\n", trans->command, error); |
1072 | |
10225 | 1073 cal_error_helper(trans, reason); |
1074 } | |
1075 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1076 void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1077 msn_switchboard_request_add_user(MsnSwitchBoard *swboard, const char *user) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1078 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1079 MsnTransaction *trans; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1080 MsnCmdProc *cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1081 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1082 g_return_if_fail(swboard != NULL); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1083 |
10463 | 1084 cmdproc = swboard->cmdproc; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1085 |
10225 | 1086 trans = msn_transaction_new(cmdproc, "CAL", "%s", user); |
10403 | 1087 /* this doesn't do anything, but users seem to think that |
1088 * 'Unhandled command' is some kind of error, so we don't report it */ | |
1089 msn_transaction_add_cb(trans, "CAL", got_cal); | |
10225 | 1090 |
1091 msn_transaction_set_data(trans, swboard); | |
1092 msn_transaction_set_timeout_cb(trans, cal_timeout); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1093 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1094 if (swboard->ready) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1095 msn_cmdproc_send_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1096 else |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1097 msn_cmdproc_queue_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1098 } |
4542 | 1099 |
10345 | 1100 /************************************************************************** |
1101 * Create & Transfer stuff | |
1102 **************************************************************************/ | |
10481 | 1103 |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1104 static void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1105 got_swboard(MsnCmdProc *cmdproc, MsnCommand *cmd) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1106 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1107 MsnSwitchBoard *swboard; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1108 char *host; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1109 int port; |
9218 | 1110 swboard = cmd->trans->data; |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1111 |
10403 | 1112 if (g_list_find(cmdproc->session->switches, swboard) == NULL) |
1113 /* The conversation window was closed. */ | |
1114 return; | |
1115 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1116 msn_switchboard_set_auth_key(swboard, cmd->params[4]); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1117 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1118 msn_parse_socket(cmd->params[2], &host, &port); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1119 |
10568 | 1120 if (!msn_switchboard_connect(swboard, host, port)) |
1121 msn_switchboard_destroy(swboard); | |
10093 | 1122 |
1123 g_free(host); | |
5309
e2e53316a21d
[gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents:
5221
diff
changeset
|
1124 } |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1125 |
10225 | 1126 static void |
1127 xfr_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) | |
1128 { | |
1129 MsnSwitchBoard *swboard; | |
1130 int reason = MSN_SB_ERROR_UNKNOWN; | |
1131 | |
1132 if (error == 913) | |
1133 reason = MSN_SB_ERROR_OFFLINE; | |
13125 | 1134 else if (error == 800) |
1135 reason = MSN_SB_ERROR_TOO_FAST; | |
10225 | 1136 |
1137 swboard = trans->data; | |
1138 | |
13125 | 1139 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
|
1140 error, (swboard->im_user ? swboard->im_user : "(null)"), trans, |
70809b5c5f86
[gaim-migrate @ 15609]
Evan Schoenberg <evan.s@dreskin.net>
parents:
13125
diff
changeset
|
1141 (trans->command ? trans->command : "(null)"), reason); |
13125 | 1142 |
10225 | 1143 swboard_error_helper(swboard, reason, swboard->im_user); |
1144 } | |
1145 | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1146 void |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1147 msn_switchboard_request(MsnSwitchBoard *swboard) |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1148 { |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1149 MsnCmdProc *cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1150 MsnTransaction *trans; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1151 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1152 g_return_if_fail(swboard != NULL); |
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 cmdproc = swboard->session->notification->cmdproc; |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1155 |
10225 | 1156 trans = msn_transaction_new(cmdproc, "XFR", "%s", "SB"); |
1157 msn_transaction_add_cb(trans, "XFR", got_swboard); | |
10403 | 1158 |
10225 | 1159 msn_transaction_set_data(trans, swboard); |
1160 msn_transaction_set_error_cb(trans, xfr_error); | |
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1161 |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1162 msn_cmdproc_send_trans(cmdproc, trans); |
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
1163 } |
10345 | 1164 |
10403 | 1165 void |
1166 msn_switchboard_close(MsnSwitchBoard *swboard) | |
1167 { | |
1168 g_return_if_fail(swboard != NULL); | |
1169 | |
10481 | 1170 if (swboard->error != MSN_SB_ERROR_NONE) |
1171 { | |
1172 msn_switchboard_destroy(swboard); | |
1173 } | |
1174 else if (g_queue_is_empty(swboard->msg_queue) || | |
1175 !swboard->session->connected) | |
10403 | 1176 { |
1177 MsnCmdProc *cmdproc; | |
10463 | 1178 cmdproc = swboard->cmdproc; |
10403 | 1179 msn_cmdproc_send_quick(cmdproc, "OUT", NULL, NULL); |
1180 | |
1181 msn_switchboard_destroy(swboard); | |
1182 } | |
1183 else | |
10481 | 1184 { |
10403 | 1185 swboard->closed = TRUE; |
10481 | 1186 } |
10403 | 1187 } |
1188 | |
10773 | 1189 gboolean |
1190 msn_switchboard_release(MsnSwitchBoard *swboard, MsnSBFlag flag) | |
1191 { | |
1192 g_return_val_if_fail(swboard != NULL, FALSE); | |
1193 | |
1194 swboard->flag &= ~flag; | |
1195 | |
1196 if (flag == MSN_SB_FLAG_IM) | |
1197 /* Forget any conversation that used to be associated with this | |
1198 * swboard. */ | |
1199 swboard->conv = NULL; | |
1200 | |
1201 if (swboard->flag == 0) | |
1202 { | |
1203 msn_switchboard_close(swboard); | |
1204 return TRUE; | |
1205 } | |
1206 | |
1207 return FALSE; | |
1208 } | |
1209 | |
10345 | 1210 /************************************************************************** |
1211 * Init stuff | |
1212 **************************************************************************/ | |
10481 | 1213 |
10345 | 1214 void |
1215 msn_switchboard_init(void) | |
1216 { | |
1217 cbs_table = msn_table_new(); | |
1218 | |
1219 msn_table_add_cmd(cbs_table, "ANS", "ANS", ans_cmd); | |
1220 msn_table_add_cmd(cbs_table, "ANS", "IRO", iro_cmd); | |
1221 | |
1222 msn_table_add_cmd(cbs_table, "MSG", "ACK", ack_cmd); | |
1223 msn_table_add_cmd(cbs_table, "MSG", "NAK", nak_cmd); | |
1224 | |
1225 msn_table_add_cmd(cbs_table, "USR", "USR", usr_cmd); | |
1226 | |
1227 msn_table_add_cmd(cbs_table, NULL, "MSG", msg_cmd); | |
1228 msn_table_add_cmd(cbs_table, NULL, "JOI", joi_cmd); | |
1229 msn_table_add_cmd(cbs_table, NULL, "BYE", bye_cmd); | |
1230 msn_table_add_cmd(cbs_table, NULL, "OUT", out_cmd); | |
1231 | |
1232 #if 0 | |
1233 /* They might skip the history */ | |
1234 msn_table_add_cmd(cbs_table, NULL, "ACK", NULL); | |
1235 #endif | |
1236 | |
1237 msn_table_add_error(cbs_table, "MSG", msg_error); | |
1238 msn_table_add_error(cbs_table, "CAL", cal_error); | |
1239 | |
1240 /* Register the message type callbacks. */ | |
1241 msn_table_add_msg_type(cbs_table, "text/plain", | |
1242 plain_msg); | |
1243 msn_table_add_msg_type(cbs_table, "text/x-msmsgscontrol", | |
1244 control_msg); | |
1245 msn_table_add_msg_type(cbs_table, "text/x-clientcaps", | |
1246 clientcaps_msg); | |
1247 msn_table_add_msg_type(cbs_table, "text/x-clientinfo", | |
1248 clientcaps_msg); | |
1249 msn_table_add_msg_type(cbs_table, "application/x-msnmsgrp2p", | |
1250 msn_p2p_msg); | |
1251 msn_table_add_msg_type(cbs_table, "text/x-mms-emoticon", | |
1252 msn_emoticon_msg); | |
11518 | 1253 msn_table_add_msg_type(cbs_table, "text/x-mms-animemoticon", |
1254 msn_emoticon_msg); | |
11321 | 1255 msn_table_add_msg_type(cbs_table, "text/x-msnmsgr-datacast", |
1256 nudge_msg); | |
10345 | 1257 #if 0 |
1258 msn_table_add_msg_type(cbs_table, "text/x-msmmsginvite", | |
1259 msn_invite_msg); | |
1260 #endif | |
1261 } | |
1262 | |
1263 void | |
1264 msn_switchboard_end(void) | |
1265 { | |
1266 msn_table_destroy(cbs_table); | |
1267 } |