Mercurial > pidgin
annotate src/protocols/msn/session.c @ 7353:dc35b4a42fea
[gaim-migrate @ 7944]
This gets rid of the gtk critical warning regarding clipboards and fixes the
broken highlighting (when highlighting text with no smileys... I'm not sure
how to get that to work when there are smileys... but I'll work on it.)
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Mon, 27 Oct 2003 19:47:57 +0000 |
| parents | ff9127038a5a |
| children | 3a48ade4f510 |
| 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 | |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
40 session->users = msn_users_new(); |
|
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
41 session->groups = msn_groups_new(); |
| 5309 | 42 |
|
6738
6c95f01aaf49
[gaim-migrate @ 7270]
Christian Hammond <chipx86@chipx86.com>
parents:
6726
diff
changeset
|
43 #ifdef HAVE_SSL |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
44 session->protocol_ver = 9; |
|
6726
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
45 #else |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
46 session->protocol_ver = 7; |
|
3c234b619685
[gaim-migrate @ 7253]
Christian Hammond <chipx86@chipx86.com>
parents:
6701
diff
changeset
|
47 #endif |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
48 |
| 5309 | 49 return session; |
| 50 } | |
| 51 | |
| 52 void | |
| 53 msn_session_destroy(MsnSession *session) | |
| 54 { | |
| 55 g_return_if_fail(session != NULL); | |
| 56 | |
| 57 if (session->connected) | |
| 58 msn_session_disconnect(session); | |
| 59 | |
| 60 if (session->dispatch_server != NULL) | |
| 61 g_free(session->dispatch_server); | |
| 62 | |
| 6779 | 63 if (session->ssl_login_path != NULL) |
| 64 g_free(session->ssl_login_path); | |
| 65 | |
| 66 if (session->ssl_login_host != NULL) | |
| 67 g_free(session->ssl_login_host); | |
| 68 | |
| 5309 | 69 while (session->switches != NULL) |
| 70 msn_switchboard_destroy(session->switches->data); | |
| 71 | |
| 72 while (session->lists.forward) | |
| 73 msn_user_destroy(session->lists.forward->data); | |
| 74 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
75 if (session->lists.allow != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
76 g_slist_free(session->lists.allow); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
77 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
78 if (session->lists.block != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
79 g_slist_free(session->lists.block); |
| 5309 | 80 |
|
5518
bf2a7a7b739d
[gaim-migrate @ 5918]
Christian Hammond <chipx86@chipx86.com>
parents:
5427
diff
changeset
|
81 msn_groups_destroy(session->groups); |
| 5309 | 82 msn_users_destroy(session->users); |
| 83 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
84 if (session->passport_info.kv != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
85 g_free(session->passport_info.kv); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
86 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
87 if (session->passport_info.sid != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
88 g_free(session->passport_info.sid); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
89 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
90 if (session->passport_info.mspauth != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
91 g_free(session->passport_info.mspauth); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
92 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
93 if (session->passport_info.file != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
94 g_free(session->passport_info.file); |
| 5427 | 95 |
| 5309 | 96 g_free(session); |
| 97 } | |
| 98 | |
| 99 gboolean | |
| 100 msn_session_connect(MsnSession *session) | |
| 101 { | |
| 102 g_return_val_if_fail(session != NULL, FALSE); | |
| 103 g_return_val_if_fail(!session->connected, TRUE); | |
| 104 | |
| 105 session->connected = TRUE; | |
| 106 | |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
107 if (session->http_method) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
108 { |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
109 session->notification_conn = |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
110 msn_notification_new(session, "gateway.messenger.hotmail.com", 80); |
| 5309 | 111 |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
112 if (msn_servconn_connect(session->notification_conn)) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
113 return TRUE; |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
114 } |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
115 else |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
116 { |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
117 session->dispatch_conn = msn_dispatch_new(session, |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
118 session->dispatch_server, |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
119 session->dispatch_port); |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
120 |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
121 if (msn_servconn_connect(session->dispatch_conn)) |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
122 return TRUE; |
|
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
123 } |
| 5309 | 124 |
| 125 return FALSE; | |
| 126 } | |
| 127 | |
| 128 void | |
| 129 msn_session_disconnect(MsnSession *session) | |
| 130 { | |
| 131 g_return_if_fail(session != NULL); | |
| 132 g_return_if_fail(session->connected); | |
| 133 | |
| 134 if (session->dispatch_conn != NULL) { | |
| 135 msn_servconn_destroy(session->dispatch_conn); | |
| 136 session->dispatch_conn = NULL; | |
| 137 } | |
| 138 | |
| 139 while (session->switches != NULL) { | |
| 140 MsnSwitchBoard *board = (MsnSwitchBoard *)session->switches->data; | |
| 141 | |
| 142 msn_switchboard_destroy(board); | |
| 143 } | |
| 144 | |
| 145 if (session->notification_conn != NULL) { | |
| 146 msn_servconn_destroy(session->notification_conn); | |
| 147 session->notification_conn = NULL; | |
| 148 } | |
| 149 } | |
| 150 | |
| 151 MsnSwitchBoard * | |
| 152 msn_session_open_switchboard(MsnSession *session) | |
| 153 { | |
| 154 MsnSwitchBoard *swboard; | |
| 155 | |
| 156 g_return_val_if_fail(session != NULL, NULL); | |
| 157 | |
| 158 if (msn_servconn_send_command(session->notification_conn, | |
| 159 "XFR", "SB") < 0) { | |
| 160 return NULL; | |
| 161 } | |
| 162 | |
| 163 swboard = msn_switchboard_new(session); | |
| 164 | |
| 165 return swboard; | |
| 166 } | |
| 167 | |
| 168 MsnSwitchBoard * | |
| 169 msn_session_find_switch_with_passport(const MsnSession *session, | |
| 170 const char *passport) | |
| 171 { | |
| 172 GList *l; | |
| 173 MsnSwitchBoard *swboard; | |
| 174 | |
| 175 g_return_val_if_fail(session != NULL, NULL); | |
| 176 g_return_val_if_fail(passport != NULL, NULL); | |
| 177 | |
| 178 for (l = session->switches; l != NULL; l = l->next) { | |
| 179 swboard = (MsnSwitchBoard *)l->data; | |
| 180 | |
|
5351
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
181 if (!swboard->hidden && |
|
2aa7e4237142
[gaim-migrate @ 5727]
Christian Hammond <chipx86@chipx86.com>
parents:
5318
diff
changeset
|
182 !g_ascii_strcasecmp(passport, |
| 5309 | 183 msn_user_get_passport(swboard->user))) { |
| 184 return swboard; | |
| 185 } | |
| 186 } | |
| 187 | |
| 188 return NULL; | |
| 189 } | |
| 190 | |
| 191 MsnSwitchBoard * | |
| 192 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 193 { | |
| 194 GList *l; | |
| 195 MsnSwitchBoard *swboard; | |
| 196 | |
| 197 g_return_val_if_fail(session != NULL, NULL); | |
| 198 g_return_val_if_fail(chat_id > 0, NULL); | |
| 199 | |
| 200 for (l = session->switches; l != NULL; l = l->next) { | |
| 201 swboard = (MsnSwitchBoard *)l->data; | |
| 202 | |
| 203 if (swboard->chat_id == chat_id) | |
| 204 return swboard; | |
| 205 } | |
| 206 | |
| 207 return NULL; | |
| 208 } | |
| 209 | |
| 210 MsnSwitchBoard * | |
| 211 msn_session_find_unused_switch(const MsnSession *session) | |
| 212 { | |
| 213 GList *l; | |
| 214 MsnSwitchBoard *swboard; | |
| 215 | |
| 216 g_return_val_if_fail(session != NULL, NULL); | |
| 217 | |
| 218 for (l = session->switches; l != NULL; l = l->next) { | |
| 219 swboard = (MsnSwitchBoard *)l->data; | |
| 220 | |
|
5354
8a74fbcb7bcb
[gaim-migrate @ 5730]
Christian Hammond <chipx86@chipx86.com>
parents:
5351
diff
changeset
|
221 if (!swboard->in_use) |
| 5309 | 222 return swboard; |
| 223 } | |
| 224 | |
| 225 return NULL; | |
| 226 } | |
| 227 |
