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