# HG changeset patch # User Sulabh Mahajan # Date 1222617804 0 # Node ID bb5a6709d9b7a5b22a780ea64ea7bbe36e30d7b0 # Parent 68f14660843e9e12be53f945f9e35d2f7d72f867 Add timeout to p2p server accepting connections diff -r 68f14660843e -r bb5a6709d9b7 libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Sun Sep 28 15:52:08 2008 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Sun Sep 28 16:03:24 2008 +0000 @@ -2600,6 +2600,25 @@ p2p_data->source = acceptfd; } +static gboolean yahoo_cancel_p2p_server_listen_cb(gpointer data) +{ + struct yahoo_p2p_data *p2p_data; + struct yahoo_data *yd; + + if(!(p2p_data = data)) + return FALSE; + + yd = p2p_data->gc->proto_data; + + purple_debug_warning("yahoo","yahoo p2p server timeout, peer failed to connect"); + yahoo_p2p_disconnect_destroy_data(data); + purple_input_remove(yd->yahoo_p2p_server_watcher); + close(yd->yahoo_local_p2p_server_fd); + yd->yahoo_local_p2p_server_fd = -1; + + return FALSE; +} + static void yahoo_p2p_server_listen_cb(int listenfd, gpointer data) { struct yahoo_p2p_data *p2p_data; @@ -2619,6 +2638,9 @@ /* Add an Input Read event to the file descriptor */ yd->yahoo_local_p2p_server_fd = listenfd; yd->yahoo_p2p_server_watcher = purple_input_add(listenfd, PURPLE_INPUT_READ, yahoo_p2p_server_send_connected_cb,data); + + /* add timeout */ + yd->yahoo_p2p_server_timeout_handle = purple_timeout_add_seconds(YAHOO_P2P_SERVER_TIMEOUT, yahoo_cancel_p2p_server_listen_cb, data); } /* send p2p pkt containing our encoded ip, asking peer to connect to us */ @@ -2822,7 +2844,7 @@ val_11 = f->session_id; } - p2p_data->host_username = g_strdup(who); + p2p_data->host_username = g_strdup(who); p2p_data->val_13 = val_13; p2p_data->session_id = val_11; p2p_data->host_ip = host_ip; diff -r 68f14660843e -r bb5a6709d9b7 libpurple/protocols/yahoo/yahoo.h --- a/libpurple/protocols/yahoo/yahoo.h Sun Sep 28 15:52:08 2008 +0000 +++ b/libpurple/protocols/yahoo/yahoo.h Sun Sep 28 16:03:24 2008 +0000 @@ -32,6 +32,7 @@ #define YAHOO_PAGER_PORT 5050 #define YAHOO_PAGER_PORT_P2P 5101 #define YAHOO_P2P_KEEPALIVE_SECS 300 +#define YAHOO_P2P_SERVER_TIMEOUT 10 #define YAHOO_PROFILE_URL "http://profiles.yahoo.com/" #define YAHOO_MAIL_URL "https://login.yahoo.com/config/login?.src=ym" #define YAHOO_XFER_HOST "filetransfer.msg.yahoo.com" @@ -205,6 +206,7 @@ int yahoo_local_p2p_server_fd; int yahoo_p2p_server_watcher; GHashTable *sms_carrier; /* sms carrier data */ + guint yahoo_p2p_server_timeout_handle; }; #define YAHOO_MAX_STATUS_MESSAGE_LENGTH (255)