mirror of
https://abf.rosa.ru/djam/pidgin.git
synced 2025-02-23 13:32:47 +00:00
75 lines
2.5 KiB
Diff
75 lines
2.5 KiB
Diff
#
|
|
#
|
|
# patch "libpurple/proxy.c"
|
|
# from [2a1922d6f3744bc61c81543909324d38d741948f]
|
|
# to [df78b061b3bc73de02f1a4ad29357497322aaf89]
|
|
#
|
|
============================================================
|
|
--- libpurple/proxy.c 2a1922d6f3744bc61c81543909324d38d741948f
|
|
+++ libpurple/proxy.c df78b061b3bc73de02f1a4ad29357497322aaf89
|
|
@@ -59,6 +59,8 @@ struct _PurpleProxyConnectData {
|
|
*/
|
|
GSList *hosts;
|
|
|
|
+ PurpleProxyConnectData *child;
|
|
+
|
|
/*
|
|
* All of the following variables are used when establishing a
|
|
* connection through a proxy.
|
|
@@ -559,6 +561,12 @@ purple_proxy_connect_data_disconnect(Pur
|
|
static void
|
|
purple_proxy_connect_data_disconnect(PurpleProxyConnectData *connect_data, const gchar *error_message)
|
|
{
|
|
+ if (connect_data->child != NULL)
|
|
+ {
|
|
+ purple_proxy_connect_cancel(connect_data->child);
|
|
+ connect_data->child = NULL;
|
|
+ }
|
|
+
|
|
if (connect_data->inpa > 0)
|
|
{
|
|
purple_input_remove(connect_data->inpa);
|
|
@@ -2417,13 +2425,20 @@ static void socks5_connected_to_proxy(gp
|
|
/* This is the PurpleProxyConnectData for the overall SOCKS5 connection */
|
|
PurpleProxyConnectData *connect_data = data;
|
|
|
|
+ purple_debug_error("proxy", "Connect Data is %p\n", connect_data);
|
|
+
|
|
/* Check that the overall SOCKS5 connection wasn't cancelled while we were
|
|
* connecting to it (we don't have a way of associating the process of
|
|
* connecting to the SOCKS5 server to the overall PurpleProxyConnectData)
|
|
*/
|
|
- if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data))
|
|
+ if (!PURPLE_PROXY_CONNECT_DATA_IS_VALID(connect_data)) {
|
|
+ purple_debug_error("proxy", "Data had gone out of scope :(\n");
|
|
return;
|
|
+ }
|
|
|
|
+ /* Break the link between the two PurpleProxyConnectDatas */
|
|
+ connect_data->child = NULL;
|
|
+
|
|
if (error_message != NULL) {
|
|
purple_debug_error("proxy", "Unable to connect to SOCKS5 host.\n");
|
|
connect_data->connect_cb(connect_data->data, source, error_message);
|
|
@@ -2486,10 +2501,7 @@ purple_proxy_connect_socks5_account(void
|
|
return NULL;
|
|
}
|
|
|
|
- /* The API doesn't really provide us with a way to cancel the specific
|
|
- * proxy connection attempt (account_proxy_conn_data) when the overall
|
|
- * SOCKS5 connection (connect_data) attempt is cancelled :(
|
|
- */
|
|
+ connect_data->child = account_proxy_conn_data;
|
|
|
|
handles = g_slist_prepend(handles, connect_data);
|
|
|
|
@@ -2499,6 +2511,8 @@ purple_proxy_connect_cancel(PurpleProxyC
|
|
void
|
|
purple_proxy_connect_cancel(PurpleProxyConnectData *connect_data)
|
|
{
|
|
+ g_return_if_fail(connect_data != NULL);
|
|
+
|
|
purple_proxy_connect_data_disconnect(connect_data, NULL);
|
|
purple_proxy_connect_data_destroy(connect_data);
|
|
}
|
|
|