# HG changeset patch # User Christian Hammond # Date 1077313065 0 # Node ID c719f9a181d4e47a1bcf24005f3f371f996d7c2c # Parent a6e8ef48c7a476b87c1df9a596c7cc0e4bb5fbc1 [gaim-migrate @ 9022] Though it doesn't fix a thing, this is a better timer implementation for HTTP polling. committer: Tailor Script diff -r a6e8ef48c7a4 -r c719f9a181d4 src/protocols/msn/httpmethod.c --- a/src/protocols/msn/httpmethod.c Fri Feb 20 05:11:55 2004 +0000 +++ b/src/protocols/msn/httpmethod.c Fri Feb 20 21:37:45 2004 +0000 @@ -48,37 +48,59 @@ static gboolean http_poll(gpointer data) { - MsnServConn *servconn = data; + MsnSession *session = data; + MsnServConn *servconn; + GList *l; - gaim_debug_info("msn", "Polling server %s.\n", - servconn->http_data->gateway_ip); - msn_http_servconn_poll(servconn); + for (l = session->servconns; l != NULL; l = l->next) + { + servconn = (MsnServConn *)l->data; - servconn->http_data->timer = 0; + if (servconn->http_data->dirty) + { + gaim_debug_info("msn", "Polling server %s.\n", + servconn->http_data->gateway_ip); + msn_http_servconn_poll(servconn); + } + } - gaim_debug(GAIM_DEBUG_INFO, "msn", "Returning from http_poll\n"); - - return FALSE; + return TRUE; } static void -stop_timer(MsnServConn *servconn) +stop_timer(MsnSession *session) { - if (servconn->http_data->timer) + if (session->http_poll_timer) { gaim_debug(GAIM_DEBUG_INFO, "msn", "Stopping timer\n"); - gaim_timeout_remove(servconn->http_data->timer); - servconn->http_data->timer = 0; + gaim_timeout_remove(session->http_poll_timer); + session->http_poll_timer = 0; } } static void -start_timer(MsnServConn *servconn) +start_timer(MsnSession *session) { - stop_timer(servconn); + stop_timer(session); gaim_debug(GAIM_DEBUG_INFO, "msn", "Starting timer\n"); - servconn->http_data->timer = gaim_timeout_add(5000, http_poll, servconn); + session->http_poll_timer = gaim_timeout_add(5000, http_poll, session); +} + +void +msn_http_session_init(MsnSession *session) +{ + g_return_if_fail(session != NULL); + + start_timer(session); +} + +void +msn_http_session_uninit(MsnSession *session) +{ + g_return_if_fail(session != NULL); + + stop_timer(session); } size_t @@ -180,10 +202,8 @@ g_free(temp); servconn->http_data->waiting_response = TRUE; - servconn->http_data->virgin = FALSE; - - stop_timer(servconn); + servconn->http_data->dirty = FALSE; return s; } @@ -226,8 +246,7 @@ g_free(temp); servconn->http_data->waiting_response = TRUE; - - stop_timer(servconn); + servconn->http_data->dirty = FALSE; if (s <= 0) gaim_connection_error(servconn->session->account->gc, @@ -416,7 +435,7 @@ g_free(queue_data); } else - start_timer(servconn); + servconn->http_data->dirty = TRUE; return TRUE; } diff -r a6e8ef48c7a4 -r c719f9a181d4 src/protocols/msn/httpmethod.h --- a/src/protocols/msn/httpmethod.h Fri Feb 20 05:11:55 2004 +0000 +++ b/src/protocols/msn/httpmethod.h Fri Feb 20 21:37:45 2004 +0000 @@ -37,11 +37,26 @@ gboolean virgin; gboolean waiting_response; + gboolean dirty; GList *queue; }; /** + * Initializes the HTTP data for a session. + * + * @param session The session. + */ +void msn_http_session_init(MsnSession *session); + +/** + * Uninitializes the HTTP data for a session. + * + * @param session The session. + */ +void msn_http_session_uninit(MsnSession *session); + +/** * Writes data to the server using the HTTP connection method. * * @param servconn The server connection. diff -r a6e8ef48c7a4 -r c719f9a181d4 src/protocols/msn/msn.c --- a/src/protocols/msn/msn.c Fri Feb 20 05:11:55 2004 +0000 +++ b/src/protocols/msn/msn.c Fri Feb 20 21:37:45 2004 +0000 @@ -271,7 +271,7 @@ swboard->chat = serv_got_joined_chat(gc, ++swboard->chat_id, "MSN Chat"); gaim_conv_chat_add_user(GAIM_CONV_CHAT(swboard->chat), - gaim_account_get_username(account), NULL); + gaim_account_get_username(account), NULL); } /************************************************************************** @@ -478,6 +478,9 @@ session->http_method = http_method; session->prpl = my_protocol; + if (session->http_method) + msn_http_session_init(session); + gc->proto_data = session; gaim_connection_update_progress(gc, _("Connecting"), 0, MSN_CONNECT_STEPS); @@ -500,6 +503,9 @@ { MsnSession *session = gc->proto_data; + if (session->http_method) + msn_http_session_uninit(session); + msn_session_destroy(session); gc->proto_data = NULL; @@ -1667,12 +1673,10 @@ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); -#if 0 option = gaim_account_option_bool_new(_("Use HTTP Method"), "http_method", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); -#endif my_protocol = plugin; diff -r a6e8ef48c7a4 -r c719f9a181d4 src/protocols/msn/session.h --- a/src/protocols/msn/session.h Fri Feb 20 05:11:55 2004 +0000 +++ b/src/protocols/msn/session.h Fri Feb 20 21:37:45 2004 +0000 @@ -53,6 +53,7 @@ unsigned int trId; gboolean http_method; + gint http_poll_timer; MsnUsers *users; MsnGroups *groups;