Mercurial > pidgin
diff src/protocols/msn/session.c @ 9193:502707ca1836
[gaim-migrate @ 9988]
Patch by Felipe Contreras to add MSN file transfer and buddy icons. Please
test and report any bugs!
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sun, 06 Jun 2004 02:39:08 +0000 |
| parents | c30d81b4dd22 |
| children | ab6636c5a136 |
line wrap: on
line diff
--- a/src/protocols/msn/session.c Sun Jun 06 02:16:08 2004 +0000 +++ b/src/protocols/msn/session.c Sun Jun 06 02:39:08 2004 +0000 @@ -23,8 +23,11 @@ #include "session.h" #include "notification.h" +#include "slplink.h" + MsnSession * -msn_session_new(GaimAccount *account, const char *host, int port) +msn_session_new(GaimAccount *account, const char *host, int port, + gboolean http_method) { MsnSession *session; @@ -35,17 +38,12 @@ session->account = account; session->dispatch_host = g_strdup(host); session->dispatch_port = port; - - session->away_state = NULL; - - session->users = msn_users_new(); - session->groups = msn_groups_new(); + session->http_method = http_method; -#ifdef HAVE_SSL + session->notification = msn_notification_new(session); + session->userlist = msn_userlist_new(session); + session->protocol_ver = 9; -#else - session->protocol_ver = 7; -#endif return session; } @@ -61,26 +59,16 @@ if (session->dispatch_host != NULL) g_free(session->dispatch_host); + if (session->notification != NULL) + msn_notification_destroy(session->notification); + while (session->switches != NULL) msn_switchboard_destroy(session->switches->data); - while (session->lists.forward) - { - MsnUser *user = (MsnUser *)session->lists.forward->data; - - msn_user_destroy(user); - - session->lists.forward = g_slist_remove(session->lists.forward, user); - } + while (session->slplinks != NULL) + msn_slplink_destroy(session->slplinks->data); - if (session->lists.allow != NULL) - g_slist_free(session->lists.allow); - - if (session->lists.block != NULL) - g_slist_free(session->lists.block); - - msn_groups_destroy(session->groups); - msn_users_destroy(session->users); + msn_userlist_destroy(session->userlist); if (session->passport_info.kv != NULL) g_free(session->passport_info.kv); @@ -94,8 +82,8 @@ if (session->passport_info.file != NULL) g_free(session->passport_info.file); - if (session->away_state != NULL) - g_free(session->away_state); + if (session->sync != NULL) + msn_sync_destroy(session->sync); if (session->nexus != NULL) msn_nexus_destroy(session->nexus); @@ -111,9 +99,7 @@ session->connected = TRUE; - session->notification_conn = msn_notification_new(session); - - if (msn_notification_connect(session->notification_conn, + if (msn_notification_connect(session->notification, session->dispatch_host, session->dispatch_port)) { @@ -130,99 +116,31 @@ g_return_if_fail(session->connected); while (session->switches != NULL) - { - MsnSwitchBoard *board = (MsnSwitchBoard *)session->switches->data; - - msn_switchboard_destroy(board); - } - - if (session->notification_conn != NULL) - { - msn_servconn_destroy(session->notification_conn); - session->notification_conn = NULL; - } -} + msn_switchboard_destroy(session->switches->data); -MsnSwitchBoard * -msn_session_open_switchboard(MsnSession *session) -{ - MsnSwitchBoard *swboard; - MsnCmdProc *cmdproc; - - g_return_val_if_fail(session != NULL, NULL); - - cmdproc = session->notification_conn->cmdproc; - - msn_cmdproc_send(cmdproc, "XFR", "%s", "SB"); - - if (cmdproc->error) - return NULL; - - swboard = msn_switchboard_new(session); - - return swboard; + if (session->notification != NULL) + msn_notification_disconnect(session->notification); } -gboolean -msn_session_change_status(MsnSession *session, const char *state) -{ - MsnCmdProc *cmdproc; - MsnUser *user; - MsnObject *msnobj; - - g_return_val_if_fail(session != NULL, FALSE); - g_return_val_if_fail(state != NULL, FALSE); - - user = session->user; - msnobj = msn_user_get_object(user); - - if (state != session->away_state) - { - if (session->away_state != NULL) - g_free(session->away_state); - - session->away_state = g_strdup(state); - } - - cmdproc = session->notification_conn->cmdproc; - - if (msnobj == NULL) - { - msn_cmdproc_send(cmdproc, "CHG", "%s %d", state, MSN_CLIENT_ID); - } - else - { - char *msnobj_str = msn_object_to_string(msnobj); - - msn_cmdproc_send(cmdproc, "CHG", "%s %d %s", state, MSN_CLIENT_ID, - gaim_url_encode(msnobj_str)); - - g_free(msnobj_str); - } - - return TRUE; -} +/* TODO: This must go away when conversation is redesigned */ MsnSwitchBoard * -msn_session_find_switch_with_passport(const MsnSession *session, - const char *passport) +msn_session_find_swboard(MsnSession *session, const char *username) { GList *l; - MsnSwitchBoard *swboard; g_return_val_if_fail(session != NULL, NULL); - g_return_val_if_fail(passport != NULL, NULL); + g_return_val_if_fail(username != NULL, NULL); for (l = session->switches; l != NULL; l = l->next) { - swboard = (MsnSwitchBoard *)l->data; + MsnSwitchBoard *swboard; + + swboard = l->data; - if (!swboard->hidden && !swboard->chat_id && - !g_ascii_strcasecmp(passport, - msn_user_get_passport(swboard->user))) - { - return swboard; - } + if (swboard->im_user != NULL) + if (!strcmp(username, swboard->im_user)) + return swboard; } return NULL; @@ -232,14 +150,15 @@ msn_session_find_switch_with_id(const MsnSession *session, int chat_id) { GList *l; - MsnSwitchBoard *swboard; g_return_val_if_fail(session != NULL, NULL); - g_return_val_if_fail(chat_id > 0, NULL); + g_return_val_if_fail(chat_id >= 0, NULL); for (l = session->switches; l != NULL; l = l->next) { - swboard = (MsnSwitchBoard *)l->data; + MsnSwitchBoard *swboard; + + swboard = l->data; if (swboard->chat_id == chat_id) return swboard; @@ -249,20 +168,19 @@ } MsnSwitchBoard * -msn_session_find_unused_switch(const MsnSession *session) +msn_session_get_swboard(MsnSession *session, const char *username) { - GList *l; MsnSwitchBoard *swboard; - g_return_val_if_fail(session != NULL, NULL); + swboard = msn_session_find_swboard(session, username); - for (l = session->switches; l != NULL; l = l->next) + if (swboard == NULL) { - swboard = (MsnSwitchBoard *)l->data; - - if (!swboard->in_use) - return swboard; + swboard = msn_switchboard_new(session); + msn_switchboard_request(swboard); + msn_switchboard_request_add_user(swboard, username); + swboard->im_user = g_strdup(username); } - return NULL; + return swboard; }
