Mercurial > pidgin
annotate src/protocols/msn/session.c @ 7863:6ee2fe9bb74e
[gaim-migrate @ 8517]
"Patch 2: ssl-plugins.patch
Other plugins might need to use the NSS/GNUTLS libraries,
which shouldn't be initialized multiple times in the same
thread (at least NSS says this is a bad thing to do).
This patch
enables other plugins to load either the NSS or
GNUTLS plugin,
and
a) have them init on load, rather when sslconn inits them
b) have them not stomp on each other if the other one has
already loaded." --Bill Tompkins (obobo)
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Sun, 14 Dec 2003 16:46:28 +0000 |
| parents | 3a48ade4f510 |
| children | d0ba2f7b40e7 |
| rev | line source |
|---|---|
| 5309 | 1 /** |
| 2 * @file session.c MSN session functions | |
| 3 * | |
| 4 * gaim | |
| 5 * | |
| 6 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
7 * |
| 5309 | 8 * This program is free software; you can redistribute it and/or modify |
| 9 * it under the terms of the GNU General Public License as published by | |
| 10 * the Free Software Foundation; either version 2 of the License, or | |
| 11 * (at your option) any later version. | |
| 12 * | |
| 13 * This program is distributed in the hope that it will be useful, | |
| 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 * GNU General Public License for more details. | |
| 17 * | |
| 18 * You should have received a copy of the GNU General Public License | |
| 19 * along with this program; if not, write to the Free Software | |
| 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 */ | |
| 22 #include "msn.h" | |
| 23 #include "session.h" | |
| 24 #include "dispatch.h" | |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
25 #include "notification.h" |
| 5309 | 26 |
| 27 MsnSession * | |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5518
diff
changeset
|
28 msn_session_new(GaimAccount *account, const char *server, int port) |
| 5309 | 29 { |
| 30 MsnSession *session; | |
| 31 | |
| 32 g_return_val_if_fail(account != NULL, NULL); | |
| 33 | |
| 34 session = g_new0(MsnSession, 1); | |
| 35 | |
| 36 session->account = account; | |
| 37 session->dispatch_server = g_strdup(server); | |
| 38 session->dispatch_port = port; | |
| 39 | |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
40 session->away_state = NULL; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
41 |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
42 session->users = msn_users_new(); |
|
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
43 session->groups = msn_groups_new(); |
| 5309 | 44 |
|
6738
6c95f01aaf49
[gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents:
6726
diff
changeset
|
45 #ifdef HAVE_SSL |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
46 session->protocol_ver = 9; |
|
6726
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
47 #else |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
48 session->protocol_ver = 7; |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
49 #endif |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
50 |
| 5309 | 51 return session; |
| 52 } | |
| 53 | |
| 54 void | |
| 55 msn_session_destroy(MsnSession *session) | |
| 56 { | |
| 57 g_return_if_fail(session != NULL); | |
| 58 | |
| 59 if (session->connected) | |
| 60 msn_session_disconnect(session); | |
| 61 | |
| 62 if (session->dispatch_server != NULL) | |
| 63 g_free(session->dispatch_server); | |
| 64 | |
| 6779 | 65 if (session->ssl_login_path != NULL) |
| 66 g_free(session->ssl_login_path); | |
| 67 | |
| 68 if (session->ssl_login_host != NULL) | |
| 69 g_free(session->ssl_login_host); | |
| 70 | |
| 5309 | 71 while (session->switches != NULL) |
| 72 msn_switchboard_destroy(session->switches->data); | |
| 73 | |
| 74 while (session->lists.forward) | |
| 75 msn_user_destroy(session->lists.forward->data); | |
| 76 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
77 if (session->lists.allow != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
78 g_slist_free(session->lists.allow); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
79 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
80 if (session->lists.block != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
81 g_slist_free(session->lists.block); |
| 5309 | 82 |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
83 msn_groups_destroy(session->groups); |
| 5309 | 84 msn_users_destroy(session->users); |
| 85 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
86 if (session->passport_info.kv != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
87 g_free(session->passport_info.kv); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
88 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
89 if (session->passport_info.sid != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
90 g_free(session->passport_info.sid); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
91 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
92 if (session->passport_info.mspauth != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
93 g_free(session->passport_info.mspauth); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
94 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
95 if (session->passport_info.file != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
96 g_free(session->passport_info.file); |
| 5427 | 97 |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
98 if (session->away_state != NULL) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
99 g_free(session->away_state); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
100 |
| 5309 | 101 g_free(session); |
| 102 } | |
| 103 | |
| 104 gboolean | |
| 105 msn_session_connect(MsnSession *session) | |
| 106 { | |
| 107 g_return_val_if_fail(session != NULL, FALSE); | |
| 108 g_return_val_if_fail(!session->connected, TRUE); | |
| 109 | |
| 110 session->connected = TRUE; | |
| 111 | |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
112 if (session->http_method) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
113 { |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
114 session->notification_conn = |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
115 msn_notification_new(session, "gateway.messenger.hotmail.com", 80); |
| 5309 | 116 |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
117 if (msn_servconn_connect(session->notification_conn)) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
118 return TRUE; |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
119 } |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
120 else |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
121 { |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
122 session->dispatch_conn = msn_dispatch_new(session, |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
123 session->dispatch_server, |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
124 session->dispatch_port); |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
125 |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
126 if (msn_servconn_connect(session->dispatch_conn)) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
127 return TRUE; |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
128 } |
| 5309 | 129 |
| 130 return FALSE; | |
| 131 } | |
| 132 | |
| 133 void | |
| 134 msn_session_disconnect(MsnSession *session) | |
| 135 { | |
| 136 g_return_if_fail(session != NULL); | |
| 137 g_return_if_fail(session->connected); | |
| 138 | |
| 139 if (session->dispatch_conn != NULL) { | |
| 140 msn_servconn_destroy(session->dispatch_conn); | |
| 141 session->dispatch_conn = NULL; | |
| 142 } | |
| 143 | |
| 144 while (session->switches != NULL) { | |
| 145 MsnSwitchBoard *board = (MsnSwitchBoard *)session->switches->data; | |
| 146 | |
| 147 msn_switchboard_destroy(board); | |
| 148 } | |
| 149 | |
| 150 if (session->notification_conn != NULL) { | |
| 151 msn_servconn_destroy(session->notification_conn); | |
| 152 session->notification_conn = NULL; | |
| 153 } | |
| 154 } | |
| 155 | |
| 156 MsnSwitchBoard * | |
| 157 msn_session_open_switchboard(MsnSession *session) | |
| 158 { | |
| 159 MsnSwitchBoard *swboard; | |
| 160 | |
| 161 g_return_val_if_fail(session != NULL, NULL); | |
| 162 | |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
163 if (msn_servconn_send_command(session->notification_conn, "XFR", "SB") < 0) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
164 { |
| 5309 | 165 return NULL; |
| 166 } | |
| 167 | |
| 168 swboard = msn_switchboard_new(session); | |
| 169 | |
| 170 return swboard; | |
| 171 } | |
| 172 | |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
173 gboolean |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
174 msn_session_change_status(MsnSession *session, const char *state) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
175 { |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
176 MsnUser *user = session->user; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
177 MsnObject *msnobj; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
178 char buf[MSN_BUF_LEN]; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
179 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
180 g_return_val_if_fail(session != NULL, FALSE); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
181 g_return_val_if_fail(state != NULL, FALSE); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
182 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
183 msnobj = msn_user_get_object(user); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
184 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
185 if (state != session->away_state) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
186 { |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
187 if (session->away_state != NULL) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
188 g_free(session->away_state); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
189 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
190 session->away_state = g_strdup(state); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
191 } |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
192 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
193 if (msnobj == NULL) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
194 g_snprintf(buf, sizeof(buf), "%s %d", state, MSN_CLIENT_ID); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
195 else |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
196 { |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
197 char *msnobj_str = msn_object_to_string(msnobj); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
198 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
199 g_snprintf(buf, sizeof(buf), "%s %d %s", state, MSN_CLIENT_ID, |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
200 gaim_url_encode(msnobj_str)); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
201 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
202 g_free(msnobj_str); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
203 } |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
204 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
205 if (!msn_servconn_send_command(session->notification_conn, "CHG", buf)) |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
206 { |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
207 gaim_connection_error(gaim_account_get_connection(session->account), |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
208 _("Write error")); |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
209 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
210 return FALSE; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
211 } |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
212 |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
213 return TRUE; |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
214 } |
|
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
215 |
| 5309 | 216 MsnSwitchBoard * |
| 217 msn_session_find_switch_with_passport(const MsnSession *session, | |
| 218 const char *passport) | |
| 219 { | |
| 220 GList *l; | |
| 221 MsnSwitchBoard *swboard; | |
| 222 | |
| 223 g_return_val_if_fail(session != NULL, NULL); | |
| 224 g_return_val_if_fail(passport != NULL, NULL); | |
| 225 | |
| 226 for (l = session->switches; l != NULL; l = l->next) { | |
| 227 swboard = (MsnSwitchBoard *)l->data; | |
| 228 | |
|
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
229 if (!swboard->hidden && |
|
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
230 !g_ascii_strcasecmp(passport, |
| 5309 | 231 msn_user_get_passport(swboard->user))) { |
| 232 return swboard; | |
| 233 } | |
| 234 } | |
| 235 | |
| 236 return NULL; | |
| 237 } | |
| 238 | |
| 239 MsnSwitchBoard * | |
| 240 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 241 { | |
| 242 GList *l; | |
| 243 MsnSwitchBoard *swboard; | |
| 244 | |
| 245 g_return_val_if_fail(session != NULL, NULL); | |
| 246 g_return_val_if_fail(chat_id > 0, NULL); | |
| 247 | |
| 248 for (l = session->switches; l != NULL; l = l->next) { | |
| 249 swboard = (MsnSwitchBoard *)l->data; | |
| 250 | |
| 251 if (swboard->chat_id == chat_id) | |
| 252 return swboard; | |
| 253 } | |
| 254 | |
| 255 return NULL; | |
| 256 } | |
| 257 | |
| 258 MsnSwitchBoard * | |
| 259 msn_session_find_unused_switch(const MsnSession *session) | |
| 260 { | |
| 261 GList *l; | |
| 262 MsnSwitchBoard *swboard; | |
| 263 | |
| 264 g_return_val_if_fail(session != NULL, NULL); | |
| 265 | |
| 266 for (l = session->switches; l != NULL; l = l->next) { | |
| 267 swboard = (MsnSwitchBoard *)l->data; | |
| 268 | |
|
5354
8a74fbcb7bcb
[gaim-migrate @ 5730]
Christian Hammond <chipx86@chipx86.com>
parents:
5351
diff
changeset
|
269 if (!swboard->in_use) |
| 5309 | 270 return swboard; |
| 271 } | |
| 272 | |
| 273 return NULL; | |
| 274 } |
