Mercurial > pidgin
annotate src/protocols/msn/session.c @ 5943:a4f2aba0848d
[gaim-migrate @ 6384]
This should fix corruption in the blist, accounts, and pounces when some
protocol plugins cannot load. Some parts of gaim now use the new unique
Plugin or Protocol Plugin IDs, while some still use the old protocol
numbers. Accounts kind of used both, and when prpls were missing, it had
trouble finding accounts. It would find the names, even without mapping the
protocol numbers to IDs, and any duplicate accounts would get nuked. That
would then affect pounce saving. Anyhow, long story short (well, it's
already long, too late for that), this should fix all that mess. And
introduce new mess, but hopefully temporary mess.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Mon, 23 Jun 2003 02:00:15 +0000 |
| parents | 187c740f2a4e |
| children | b7e113a59b51 |
| 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> | |
| 7 * | |
| 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" | |
| 25 | |
| 26 MsnSession * | |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5518
diff
changeset
|
27 msn_session_new(GaimAccount *account, const char *server, int port) |
| 5309 | 28 { |
| 29 MsnSession *session; | |
| 30 | |
| 31 g_return_val_if_fail(account != NULL, NULL); | |
| 32 | |
| 33 session = g_new0(MsnSession, 1); | |
| 34 | |
| 35 session->account = account; | |
| 36 session->dispatch_server = g_strdup(server); | |
| 37 session->dispatch_port = port; | |
| 38 | |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
39 session->users = msn_users_new(); |
|
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
40 session->groups = msn_groups_new(); |
| 5309 | 41 |
| 42 return session; | |
| 43 } | |
| 44 | |
| 45 void | |
| 46 msn_session_destroy(MsnSession *session) | |
| 47 { | |
| 48 g_return_if_fail(session != NULL); | |
| 49 | |
| 50 if (session->connected) | |
| 51 msn_session_disconnect(session); | |
| 52 | |
| 53 if (session->dispatch_server != NULL) | |
| 54 g_free(session->dispatch_server); | |
| 55 | |
| 56 while (session->switches != NULL) | |
| 57 msn_switchboard_destroy(session->switches->data); | |
| 58 | |
| 59 while (session->lists.forward) | |
| 60 msn_user_destroy(session->lists.forward->data); | |
| 61 | |
| 62 g_slist_free(session->lists.allow); | |
| 63 g_slist_free(session->lists.block); | |
| 64 | |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
65 msn_groups_destroy(session->groups); |
| 5309 | 66 msn_users_destroy(session->users); |
| 67 | |
| 5427 | 68 g_free(session->passport_info.kv); |
| 69 g_free(session->passport_info.sid); | |
| 70 g_free(session->passport_info.mspauth); | |
| 71 g_free(session->passport_info.file); | |
| 72 | |
| 5309 | 73 g_free(session); |
| 74 } | |
| 75 | |
| 76 gboolean | |
| 77 msn_session_connect(MsnSession *session) | |
| 78 { | |
| 79 g_return_val_if_fail(session != NULL, FALSE); | |
| 80 g_return_val_if_fail(!session->connected, TRUE); | |
| 81 | |
| 82 session->connected = TRUE; | |
| 83 | |
| 84 session->dispatch_conn = msn_dispatch_new(session, | |
| 85 session->dispatch_server, | |
| 86 session->dispatch_port); | |
| 87 | |
| 88 if (msn_servconn_connect(session->dispatch_conn)) | |
| 89 return TRUE; | |
| 90 | |
| 91 return FALSE; | |
| 92 } | |
| 93 | |
| 94 void | |
| 95 msn_session_disconnect(MsnSession *session) | |
| 96 { | |
| 97 g_return_if_fail(session != NULL); | |
| 98 g_return_if_fail(session->connected); | |
| 99 | |
| 100 if (session->dispatch_conn != NULL) { | |
| 101 msn_servconn_destroy(session->dispatch_conn); | |
| 102 session->dispatch_conn = NULL; | |
| 103 } | |
| 104 | |
| 105 while (session->switches != NULL) { | |
| 106 MsnSwitchBoard *board = (MsnSwitchBoard *)session->switches->data; | |
| 107 | |
| 108 msn_switchboard_destroy(board); | |
| 109 } | |
| 110 | |
| 111 if (session->notification_conn != NULL) { | |
| 112 msn_servconn_destroy(session->notification_conn); | |
| 113 session->notification_conn = NULL; | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 MsnSwitchBoard * | |
| 118 msn_session_open_switchboard(MsnSession *session) | |
| 119 { | |
| 120 MsnSwitchBoard *swboard; | |
| 121 | |
| 122 g_return_val_if_fail(session != NULL, NULL); | |
| 123 | |
| 124 if (msn_servconn_send_command(session->notification_conn, | |
| 125 "XFR", "SB") < 0) { | |
| 126 return NULL; | |
| 127 } | |
| 128 | |
| 129 swboard = msn_switchboard_new(session); | |
| 130 | |
| 131 return swboard; | |
| 132 } | |
| 133 | |
| 134 MsnSwitchBoard * | |
| 135 msn_session_find_switch_with_passport(const MsnSession *session, | |
| 136 const char *passport) | |
| 137 { | |
| 138 GList *l; | |
| 139 MsnSwitchBoard *swboard; | |
| 140 | |
| 141 g_return_val_if_fail(session != NULL, NULL); | |
| 142 g_return_val_if_fail(passport != NULL, NULL); | |
| 143 | |
| 144 for (l = session->switches; l != NULL; l = l->next) { | |
| 145 swboard = (MsnSwitchBoard *)l->data; | |
| 146 | |
|
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
147 if (!swboard->hidden && |
|
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
148 !g_ascii_strcasecmp(passport, |
| 5309 | 149 msn_user_get_passport(swboard->user))) { |
| 150 return swboard; | |
| 151 } | |
| 152 } | |
| 153 | |
| 154 return NULL; | |
| 155 } | |
| 156 | |
| 157 MsnSwitchBoard * | |
| 158 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 159 { | |
| 160 GList *l; | |
| 161 MsnSwitchBoard *swboard; | |
| 162 | |
| 163 g_return_val_if_fail(session != NULL, NULL); | |
| 164 g_return_val_if_fail(chat_id > 0, NULL); | |
| 165 | |
| 166 for (l = session->switches; l != NULL; l = l->next) { | |
| 167 swboard = (MsnSwitchBoard *)l->data; | |
| 168 | |
| 169 if (swboard->chat_id == chat_id) | |
| 170 return swboard; | |
| 171 } | |
| 172 | |
| 173 return NULL; | |
| 174 } | |
| 175 | |
| 176 MsnSwitchBoard * | |
| 177 msn_session_find_unused_switch(const MsnSession *session) | |
| 178 { | |
| 179 GList *l; | |
| 180 MsnSwitchBoard *swboard; | |
| 181 | |
| 182 g_return_val_if_fail(session != NULL, NULL); | |
| 183 | |
| 184 for (l = session->switches; l != NULL; l = l->next) { | |
| 185 swboard = (MsnSwitchBoard *)l->data; | |
| 186 | |
|
5354
8a74fbcb7bcb
[gaim-migrate @ 5730]
Christian Hammond <chipx86@chipx86.com>
parents:
5351
diff
changeset
|
187 if (!swboard->in_use) |
| 5309 | 188 return swboard; |
| 189 } | |
| 190 | |
| 191 return NULL; | |
| 192 } | |
| 193 |
