From: Stu T. <nos...@us...> - 2004-12-02 16:07:12
|
Update of /cvsroot/gaim/gaim/src/protocols/msn In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21178 Modified Files: Tag: oldstatus history.c msn.c notification.c servconn.c session.c session.h slp.c slpcall.c slpcall.h slplink.c Log Message: Some "random updates" updates from patch 1077274 by from Felipe Contreras: "Some changes in the behaviour of slpcalls (for FT), free some unused structures and properly close switchboard connections." Looks good to me, and seems to have fixed a mysterious FT problem that I had been pretending didn't exist. Index: history.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/history.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -u -d -p -r1.2 -r1.2.2.1 --- history.c 6 Jun 2004 03:42:54 -0000 1.2 +++ history.c 2 Dec 2004 16:06:38 -0000 1.2.2.1 @@ -67,7 +67,12 @@ msn_history_find(MsnHistory *history, un void msn_history_add(MsnHistory *history, MsnTransaction *trans) { - GQueue *queue = history->queue; + GQueue *queue; + + g_return_if_fail(history != NULL); + g_return_if_fail(trans != NULL); + + queue = history->queue; trans->trId = history->trId++; Index: msn.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/msn.c,v retrieving revision 1.320.2.11 retrieving revision 1.320.2.12 diff -u -d -p -r1.320.2.11 -r1.320.2.12 --- msn.c 28 Nov 2004 18:09:08 -0000 1.320.2.11 +++ msn.c 2 Dec 2004 16:06:54 -0000 1.320.2.12 @@ -1228,18 +1228,16 @@ msn_convo_closed(GaimConnection *gc, con cmdproc = swboard->servconn->cmdproc; +#if 0 if (swboard->current_users == 1) { - /* This must happen on both IM's and Chat's, right? */ - GaimAccount *account; - - account = gaim_connection_get_account(gc); - - msn_cmdproc_send_quick(cmdproc, "BYE", "%s", - gaim_account_get_username(account)); - + msn_cmdproc_send_quick(cmdproc, "OUT", NULL, NULL); msn_switchboard_destroy(swboard); } +#else + msn_cmdproc_send_quick(cmdproc, "OUT", NULL, NULL); + msn_switchboard_destroy(swboard); +#endif } static void Index: notification.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/notification.c,v retrieving revision 1.114.2.8 retrieving revision 1.114.2.9 diff -u -d -p -r1.114.2.8 -r1.114.2.9 --- notification.c 1 Dec 2004 02:29:20 -0000 1.114.2.8 +++ notification.c 2 Dec 2004 16:06:55 -0000 1.114.2.9 @@ -30,6 +30,7 @@ #include "userlist.h" #include "sync.h" +#include "slplink.h" #define BUDDY_ALIAS_MAXLEN 388 @@ -446,10 +447,16 @@ static void fln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { GaimConnection *gc; + MsnSlpLink *slplink; gc = cmdproc->session->account->gc; serv_got_update(gc, cmd->params[0], FALSE, 0, 0, 0, 0); + + slplink = msn_session_find_slplink(cmdproc->session, cmd->params[0]); + + if (slplink != NULL) + msn_slplink_destroy(slplink); } static void @@ -1133,21 +1140,17 @@ system_msg(MsnCmdProc *cmdproc, MsnMessa static void connect_cb(MsnServConn *servconn) { - MsnNotification *notification; MsnCmdProc *cmdproc; MsnSession *session; GaimAccount *account; - GaimConnection *gc; char **a, **c, *vers; int i; g_return_if_fail(servconn != NULL); - notification = servconn->data; cmdproc = servconn->cmdproc; session = servconn->session; account = session->account; - gc = gaim_account_get_connection(account); /* Allocate an array for CVR0, NULL, and all the versions */ a = c = g_new0(char *, session->protocol_ver - 8 + 3); @@ -1170,11 +1173,6 @@ connect_cb(MsnServConn *servconn) if (session->user == NULL) session->user = msn_user_new(session->userlist, gaim_account_get_username(account), NULL); - -#if 0 - gaim_connection_update_progress(gc, _("Syncing with server"), - 4, MSN_CONNECT_STEPS); -#endif } void Index: servconn.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/servconn.c,v retrieving revision 1.40.2.1 retrieving revision 1.40.2.2 diff -u -d -p -r1.40.2.1 -r1.40.2.2 --- servconn.c 21 Nov 2004 17:46:17 -0000 1.40.2.1 +++ servconn.c 2 Dec 2004 16:06:56 -0000 1.40.2.2 @@ -27,6 +27,53 @@ static void read_cb(gpointer data, gint source, GaimInputCondition cond); +MsnServConn * +msn_servconn_new(MsnSession *session, MsnServConnType type) +{ + MsnServConn *servconn; + + g_return_val_if_fail(session != NULL, NULL); + + servconn = g_new0(MsnServConn, 1); + + servconn->type = type; + + servconn->session = session; + servconn->cmdproc = msn_cmdproc_new(session); + servconn->cmdproc->servconn = servconn; + + if (session->http_method) + { + servconn->http_data = g_new0(MsnHttpMethodData, 1); + servconn->http_data->virgin = TRUE; + } + + servconn->num = session->servconns_count++; + + return servconn; +} + +void +msn_servconn_destroy(MsnServConn *servconn) +{ + g_return_if_fail(servconn != NULL); + + if (servconn->processing) + { + servconn->wasted = TRUE; + return; + } + + if (servconn->connected) + msn_servconn_disconnect(servconn); + + if (servconn->http_data != NULL) + g_free(servconn->http_data); + + msn_cmdproc_destroy(servconn->cmdproc); + g_free(servconn); +} + static void show_error(MsnServConn *servconn) { @@ -68,18 +115,6 @@ show_error(MsnServConn *servconn) MsnSwitchBoard *swboard; swboard = servconn->data; swboard->error = MSN_SB_ERROR_CONNECTION; - /* - GaimAccount *account; - char *primary; - - account = gaim_connection_get_account(gc); - primary = g_strdup_printf(_("MSN error for account %s"), - gaim_account_get_username(account)); - - gaim_notify_error(gc, NULL, primary, tmp); - - g_free(primary); - */ } g_free(tmp); @@ -106,58 +141,6 @@ connect_cb(gpointer data, gint source, G } } -MsnServConn * -msn_servconn_new(MsnSession *session, MsnServConnType type) -{ - MsnServConn *servconn; - - g_return_val_if_fail(session != NULL, NULL); - - servconn = g_new0(MsnServConn, 1); - - servconn->type = type; - - servconn->session = session; - servconn->cmdproc = msn_cmdproc_new(session); - servconn->cmdproc->servconn = servconn; - - if (session->http_method) - { - servconn->http_data = g_new0(MsnHttpMethodData, 1); - servconn->http_data->virgin = TRUE; - } - - servconn->num = session->servconns_count++; - - return servconn; -} - -void -msn_servconn_destroy(MsnServConn *servconn) -{ - g_return_if_fail(servconn != NULL); - - if (servconn->processing) - { - servconn->wasted = TRUE; - return; - } - - if (servconn->connected) - msn_servconn_disconnect(servconn); - - if (servconn->http_data != NULL) - g_free(servconn->http_data); - -#if 0 - if (servconn->rx_buf != NULL) - g_free(servconn->rx_buf); -#endif - - msn_cmdproc_destroy(servconn->cmdproc); - g_free(servconn); -} - gboolean msn_servconn_connect(MsnServConn *servconn, const char *host, int port) { Index: session.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/session.c,v retrieving revision 1.24.2.6 retrieving revision 1.24.2.7 diff -u -d -p -r1.24.2.6 -r1.24.2.7 --- session.c 1 Dec 2004 02:29:20 -0000 1.24.2.6 +++ session.c 2 Dec 2004 16:06:56 -0000 1.24.2.7 @@ -58,6 +58,8 @@ msn_session_destroy(MsnSession *session) { g_return_if_fail(session != NULL); + session->destroying = TRUE; + if (session->connected) msn_session_disconnect(session); Index: session.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/session.h,v retrieving revision 1.24.2.2 retrieving revision 1.24.2.3 diff -u -d -p -r1.24.2.2 -r1.24.2.3 --- session.h 28 Nov 2004 17:59:40 -0000 1.24.2.2 +++ session.h 2 Dec 2004 16:06:56 -0000 1.24.2.3 @@ -51,7 +51,8 @@ struct _MsnSession int dispatch_port; gboolean connected; - gboolean logged_in; /* temporal flag to ignore local blist adds */ + gboolean logged_in; /**< A temporal flag to ignore local buddy list adds. */ + gboolean destroying; /**< A flag that states if the session is being destroyed. */ MsnNotification *notification; MsnNexus *nexus; Index: slp.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slp.c,v retrieving revision 1.12.2.5 retrieving revision 1.12.2.6 diff -u -d -p -r1.12.2.5 -r1.12.2.6 --- slp.c 21 Nov 2004 18:10:57 -0000 1.12.2.5 +++ slp.c 2 Dec 2004 16:06:56 -0000 1.12.2.6 @@ -331,6 +331,8 @@ got_sessionreq(MsnSlpCall *slpcall, cons slpcall->progress_cb = msn_xfer_progress_cb; slpcall->branch = g_strdup(branch); + slpcall->pending = TRUE; + xfer = gaim_xfer_new(account, GAIM_XFER_RECEIVE, slpcall->slplink->remote_user); @@ -935,6 +937,10 @@ end_user_display(MsnSlpCall *slpcall) userlist = slpcall->slplink->session->userlist; + /* If the session is being destroyed we better stop doing anything. */ + if (slpcall->slplink->session->destroying) + return; + /* Free one window slot */ userlist->buddy_icon_window++; Index: slpcall.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slpcall.c,v retrieving revision 1.3.2.2 retrieving revision 1.3.2.3 diff -u -d -p -r1.3.2.2 -r1.3.2.3 --- slpcall.c 21 Nov 2004 17:46:17 -0000 1.3.2.2 +++ slpcall.c 2 Dec 2004 16:06:56 -0000 1.3.2.3 @@ -189,11 +189,21 @@ msn_slp_call_close(MsnSlpCall *slpcall) gboolean msn_slp_call_timeout(gpointer data) { + MsnSlpCall *slpcall; + gaim_debug_info("msn", "slpcall timeout\n"); - msn_slp_call_destroy(data); + slpcall = data; - return FALSE; + if (!slpcall->pending && !slpcall->progress) + { + msn_slp_call_destroy(slpcall); + return FALSE; + } + + slpcall->progress = FALSE; + + return TRUE; } MsnSlpCall * @@ -241,14 +251,5 @@ msn_slp_process_msg(MsnSlpLink *slplink, } #endif - if (slpcall != NULL) - { - if (slpcall->timer) - gaim_timeout_remove(slpcall->timer); - - slpcall->timer = gaim_timeout_add(MSN_SLPCALL_TIMEOUT, - msn_slp_call_timeout, slpcall); - } - return slpcall; } Index: slpcall.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slpcall.h,v retrieving revision 1.3.2.1 retrieving revision 1.3.2.2 diff -u -d -p -r1.3.2.1 -r1.3.2.2 --- slpcall.h 21 Nov 2004 17:46:17 -0000 1.3.2.1 +++ slpcall.h 2 Dec 2004 16:06:56 -0000 1.3.2.2 @@ -57,6 +57,15 @@ struct _MsnSlpCall long session_id; long app_id; + gboolean pending; /**< A flag that states if we should wait for this + slpcall to start and do not time out. */ + gboolean progress; /**< A flag that states if there has been progress since + the last time out. */ + gboolean wasted; /**< A flag that states if this slpcall is going to be + destroyed. */ + gboolean started; /**< A flag that states if this slpcall's session has + been initiated. */ + void (*progress_cb)(MsnSlpCall *slpcall, gsize total_length, gsize len, gsize offset); void (*session_init_cb)(MsnSlpSession *slpsession); @@ -68,8 +77,6 @@ struct _MsnSlpCall MsnSlpCb cb; void (*end_cb)(MsnSlpCall *slpcall); - gboolean wasted; - gboolean started; int timer; }; Index: slplink.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/msn/slplink.c,v retrieving revision 1.12.2.6 retrieving revision 1.12.2.7 diff -u -d -p -r1.12.2.6 -r1.12.2.7 --- slplink.c 1 Dec 2004 02:29:20 -0000 1.12.2.6 +++ slplink.c 2 Dec 2004 16:06:56 -0000 1.12.2.7 @@ -59,6 +59,8 @@ msn_slplink_new(MsnSession *session, con { MsnSlpLink *slplink; + g_return_val_if_fail(session != NULL, NULL); + slplink = g_new0(MsnSlpLink, 1); slplink->session = session; @@ -80,6 +82,8 @@ msn_slplink_destroy(MsnSlpLink *slplink) { MsnSession *session; + g_return_if_fail(slplink != NULL); + session = slplink->session; if (slplink->local_user != NULL) @@ -91,6 +95,9 @@ msn_slplink_destroy(MsnSlpLink *slplink) if (slplink->directconn != NULL) msn_directconn_destroy(slplink->directconn); + while (slplink->slp_calls != NULL) + msn_slp_call_destroy(slplink->slp_calls->data); + session->slplinks = g_list_remove(session->slplinks, slplink); @@ -288,12 +295,7 @@ msn_slplink_send_msgpart(MsnSlpLink *slp if ((slpmsg->flags == 0x20 || slpmsg->flags == 0x1000030) && (slpmsg->slpcall != NULL)) { - if (slpmsg->slpcall->timer) - { - gaim_timeout_remove(slpmsg->slpcall->timer); - slpmsg->slpcall->timer = gaim_timeout_add(MSN_SLPCALL_TIMEOUT, - msn_slp_call_timeout, slpmsg->slpcall); - } + slpmsg->slpcall->progress = TRUE; if (slpmsg->slpcall->progress_cb != NULL) { @@ -525,12 +527,7 @@ msn_slplink_process_msg(MsnSlpLink *slpl if ((slpmsg->flags == 0x20 || slpmsg->flags == 0x1000030) && (slpmsg->slpcall != NULL)) { - if (slpmsg->slpcall->timer) - { - gaim_timeout_remove(slpmsg->slpcall->timer); - slpmsg->slpcall->timer = gaim_timeout_add(MSN_SLPCALL_TIMEOUT, - msn_slp_call_timeout, slpmsg->slpcall); - } + slpmsg->slpcall->progress = TRUE; if (slpmsg->slpcall->progress_cb != NULL) { @@ -683,6 +680,8 @@ msn_slplink_request_ft(MsnSlpLink *slpli slpcall->cb = msn_xfer_completed_cb; slpcall->xfer = xfer; + slpcall->pending = TRUE; + gaim_xfer_set_cancel_send_fnc(xfer, msn_xfer_cancel); xfer->data = slpcall; |