Mercurial > pidgin
annotate src/protocols/msn/session.c @ 6820:4b3fa146e995
[gaim-migrate @ 7364]
Tim Ringenbach (marv_sf) writes:
" What this patch tries to do is, if Gaim and Yahoo
disagree about which groups a buddy is in, add all the
buddies in the groups they should be, and delete all
the buddies that are in the wrong groups. This gets
confusing because the buddy might be in more than one
group on both gaim's list and yahoo's list."
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Fri, 12 Sep 2003 21:22:48 +0000 |
| parents | f5c483cdd1d8 |
| children | 1cfbb731aa1f |
| 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" | |
| 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 |
|
6738
6c95f01aaf49
[gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents:
6726
diff
changeset
|
42 #ifdef HAVE_SSL |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
43 session->protocol_ver = 9; |
|
6726
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
44 #else |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
45 session->protocol_ver = 7; |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
46 #endif |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
47 |
| 5309 | 48 return session; |
| 49 } | |
| 50 | |
| 51 void | |
| 52 msn_session_destroy(MsnSession *session) | |
| 53 { | |
| 54 g_return_if_fail(session != NULL); | |
| 55 | |
| 56 if (session->connected) | |
| 57 msn_session_disconnect(session); | |
| 58 | |
| 59 if (session->dispatch_server != NULL) | |
| 60 g_free(session->dispatch_server); | |
| 61 | |
| 6779 | 62 if (session->ssl_login_path != NULL) |
| 63 g_free(session->ssl_login_path); | |
| 64 | |
| 65 if (session->ssl_login_host != NULL) | |
| 66 g_free(session->ssl_login_host); | |
| 67 | |
| 5309 | 68 while (session->switches != NULL) |
| 69 msn_switchboard_destroy(session->switches->data); | |
| 70 | |
| 71 while (session->lists.forward) | |
| 72 msn_user_destroy(session->lists.forward->data); | |
| 73 | |
| 74 g_slist_free(session->lists.allow); | |
| 75 g_slist_free(session->lists.block); | |
| 76 | |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
77 msn_groups_destroy(session->groups); |
| 5309 | 78 msn_users_destroy(session->users); |
| 79 | |
| 5427 | 80 g_free(session->passport_info.kv); |
| 81 g_free(session->passport_info.sid); | |
| 82 g_free(session->passport_info.mspauth); | |
| 83 g_free(session->passport_info.file); | |
| 84 | |
| 5309 | 85 g_free(session); |
| 86 } | |
| 87 | |
| 88 gboolean | |
| 89 msn_session_connect(MsnSession *session) | |
| 90 { | |
| 91 g_return_val_if_fail(session != NULL, FALSE); | |
| 92 g_return_val_if_fail(!session->connected, TRUE); | |
| 93 | |
| 94 session->connected = TRUE; | |
| 95 | |
| 96 session->dispatch_conn = msn_dispatch_new(session, | |
| 97 session->dispatch_server, | |
| 98 session->dispatch_port); | |
| 99 | |
| 100 if (msn_servconn_connect(session->dispatch_conn)) | |
| 101 return TRUE; | |
| 102 | |
| 103 return FALSE; | |
| 104 } | |
| 105 | |
| 106 void | |
| 107 msn_session_disconnect(MsnSession *session) | |
| 108 { | |
| 109 g_return_if_fail(session != NULL); | |
| 110 g_return_if_fail(session->connected); | |
| 111 | |
| 112 if (session->dispatch_conn != NULL) { | |
| 113 msn_servconn_destroy(session->dispatch_conn); | |
| 114 session->dispatch_conn = NULL; | |
| 115 } | |
| 116 | |
| 117 while (session->switches != NULL) { | |
| 118 MsnSwitchBoard *board = (MsnSwitchBoard *)session->switches->data; | |
| 119 | |
| 120 msn_switchboard_destroy(board); | |
| 121 } | |
| 122 | |
| 123 if (session->notification_conn != NULL) { | |
| 124 msn_servconn_destroy(session->notification_conn); | |
| 125 session->notification_conn = NULL; | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 MsnSwitchBoard * | |
| 130 msn_session_open_switchboard(MsnSession *session) | |
| 131 { | |
| 132 MsnSwitchBoard *swboard; | |
| 133 | |
| 134 g_return_val_if_fail(session != NULL, NULL); | |
| 135 | |
| 136 if (msn_servconn_send_command(session->notification_conn, | |
| 137 "XFR", "SB") < 0) { | |
| 138 return NULL; | |
| 139 } | |
| 140 | |
| 141 swboard = msn_switchboard_new(session); | |
| 142 | |
| 143 return swboard; | |
| 144 } | |
| 145 | |
| 146 MsnSwitchBoard * | |
| 147 msn_session_find_switch_with_passport(const MsnSession *session, | |
| 148 const char *passport) | |
| 149 { | |
| 150 GList *l; | |
| 151 MsnSwitchBoard *swboard; | |
| 152 | |
| 153 g_return_val_if_fail(session != NULL, NULL); | |
| 154 g_return_val_if_fail(passport != NULL, NULL); | |
| 155 | |
| 156 for (l = session->switches; l != NULL; l = l->next) { | |
| 157 swboard = (MsnSwitchBoard *)l->data; | |
| 158 | |
|
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
159 if (!swboard->hidden && |
|
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
160 !g_ascii_strcasecmp(passport, |
| 5309 | 161 msn_user_get_passport(swboard->user))) { |
| 162 return swboard; | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 return NULL; | |
| 167 } | |
| 168 | |
| 169 MsnSwitchBoard * | |
| 170 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 171 { | |
| 172 GList *l; | |
| 173 MsnSwitchBoard *swboard; | |
| 174 | |
| 175 g_return_val_if_fail(session != NULL, NULL); | |
| 176 g_return_val_if_fail(chat_id > 0, NULL); | |
| 177 | |
| 178 for (l = session->switches; l != NULL; l = l->next) { | |
| 179 swboard = (MsnSwitchBoard *)l->data; | |
| 180 | |
| 181 if (swboard->chat_id == chat_id) | |
| 182 return swboard; | |
| 183 } | |
| 184 | |
| 185 return NULL; | |
| 186 } | |
| 187 | |
| 188 MsnSwitchBoard * | |
| 189 msn_session_find_unused_switch(const MsnSession *session) | |
| 190 { | |
| 191 GList *l; | |
| 192 MsnSwitchBoard *swboard; | |
| 193 | |
| 194 g_return_val_if_fail(session != NULL, NULL); | |
| 195 | |
| 196 for (l = session->switches; l != NULL; l = l->next) { | |
| 197 swboard = (MsnSwitchBoard *)l->data; | |
| 198 | |
|
5354
8a74fbcb7bcb
[gaim-migrate @ 5730]
Christian Hammond <chipx86@chipx86.com>
parents:
5351
diff
changeset
|
199 if (!swboard->in_use) |
| 5309 | 200 return swboard; |
| 201 } | |
| 202 | |
| 203 return NULL; | |
| 204 } | |
| 205 |
