--- a/ChangeLog.API Thu Mar 31 22:53:18 2022 -0500
+++ b/ChangeLog.API Fri Apr 01 01:09:23 2022 -0500
@@ -223,7 +223,10 @@
purple_plugin_pref_set_pref_type
* purple_prefs_get_type renamed to purple_prefs_get_pref_type
* proto_chat_entry has been renamed to PurpleProtocolChatEntry
+ * PurpleProxyType members are now name spaced under PURPLE_PROXY_TYPE_* + * purple_proxy_info_get_host renamed to purple_proxy_info_get_hostname * purple_proxy_info_get_type renamed to purple_proxy_info_get_proxy_type
+ * purple_proxy_info_set_host renamed to purple_proxy_info_set_hostname * purple_proxy_info_set_type renamed to purple_proxy_info_set_proxy_type
* purple_request_field_get_type renamed to
purple_request_field_get_field_type
--- a/libpurple/account.c Thu Mar 31 22:53:18 2022 -0500
+++ b/libpurple/account.c Fri Apr 01 01:09:23 2022 -0500
@@ -141,6 +141,7 @@
@@ -562,7 +563,7 @@
*****************************************************************************/
-proxy_settings_to_xmlnode(const PurpleProxyInfo *proxy_info)
+proxy_settings_to_xmlnode(PurpleProxyInfo *proxy_info) PurpleXmlNode *node, *child;
PurpleProxyType proxy_type;
@@ -576,15 +577,15 @@
child = purple_xmlnode_new_child(node, "type");
purple_xmlnode_insert_data(child,
- (proxy_type == PURPLE_PROXY_USE_GLOBAL ? "global" :
- proxy_type == PURPLE_PROXY_NONE ? "none" :
- proxy_type == PURPLE_PROXY_HTTP ? "http" :
- proxy_type == PURPLE_PROXY_SOCKS4 ? "socks4" :
- proxy_type == PURPLE_PROXY_SOCKS5 ? "socks5" :
- proxy_type == PURPLE_PROXY_TOR ? "tor" :
- proxy_type == PURPLE_PROXY_USE_ENVVAR ? "envvar" : "unknown"), -1);
- if ((value = purple_proxy_info_get_host(proxy_info)) != NULL)
+ (proxy_type == PURPLE_PROXY_TYPE_USE_GLOBAL ? "global" : + proxy_type == PURPLE_PROXY_TYPE_NONE ? "none" : + proxy_type == PURPLE_PROXY_TYPE_HTTP ? "http" : + proxy_type == PURPLE_PROXY_TYPE_SOCKS4 ? "socks4" : + proxy_type == PURPLE_PROXY_TYPE_SOCKS5 ? "socks5" : + proxy_type == PURPLE_PROXY_TYPE_TOR ? "tor" : + proxy_type == PURPLE_PROXY_TYPE_USE_ENVVAR ? "envvar" : "unknown"), -1); + if ((value = purple_proxy_info_get_hostname(proxy_info)) != NULL) child = purple_xmlnode_new_child(node, "host");
purple_xmlnode_insert_data(child, value, -1);
@@ -701,7 +702,7 @@
PurpleXmlNode *node, *child;
- const PurpleProxyInfo *proxy_info;
+ PurpleProxyInfo *proxy_info; PurpleAccountPrivate *priv = purple_account_get_instance_private(account);
node = purple_xmlnode_new("account");
@@ -806,6 +807,9 @@
purple_account_set_remember_password(account,
g_value_get_boolean(value));
+ purple_account_set_proxy_info(account, g_value_get_object(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -849,6 +853,9 @@
g_value_set_boolean(value,
purple_account_get_remember_password(account));
+ g_value_set_object(value, purple_account_get_proxy_info(account)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
@@ -968,8 +975,7 @@
purple_account_set_status_types(account, NULL);
- purple_proxy_info_destroy(priv->proxy_info);
+ g_clear_object(&priv->proxy_info); if (priv->current_error) {
g_free(priv->current_error->description);
@@ -1056,6 +1062,12 @@
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ properties[PROP_PROXY_INFO] = g_param_spec_object( + "proxy-info", "proxy-info", + "The PurpleProxyInfo for this account.", + PURPLE_TYPE_PROXY_INFO, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(obj_class, PROP_LAST, properties);
@@ -1650,12 +1662,12 @@
priv = purple_account_get_instance_private(account);
- if (priv->proxy_info != NULL)
- purple_proxy_info_destroy(priv->proxy_info);
- priv->proxy_info = info;
- purple_accounts_schedule_save();
+ if(g_set_object(&priv->proxy_info, info)) { + g_object_notify_by_pspec(G_OBJECT(account), + properties[PROP_PROXY_INFO]); + purple_accounts_schedule_save(); --- a/libpurple/accounts.c Thu Mar 31 22:53:18 2022 -0500
+++ b/libpurple/accounts.c Fri Apr 01 01:09:23 2022 -0500
@@ -204,26 +204,26 @@
proxy_info = purple_proxy_info_new();
/* Use the global proxy settings, by default */
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_USE_GLOBAL);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_USE_GLOBAL); child = purple_xmlnode_get_child(node, "type");
if ((child != NULL) && ((data = purple_xmlnode_get_data(child)) != NULL))
if (purple_strequal(data, "global"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_USE_GLOBAL);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_USE_GLOBAL); else if (purple_strequal(data, "none"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_NONE);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_NONE); else if (purple_strequal(data, "http"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_HTTP);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_HTTP); else if (purple_strequal(data, "socks4"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_SOCKS4);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_SOCKS4); else if (purple_strequal(data, "socks5"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_SOCKS5);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_SOCKS5); else if (purple_strequal(data, "tor"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TOR);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_TOR); else if (purple_strequal(data, "envvar"))
- purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_USE_ENVVAR);
+ purple_proxy_info_set_proxy_type(proxy_info, PURPLE_PROXY_TYPE_USE_ENVVAR); purple_debug_error("accounts", "Invalid proxy type found when "
@@ -237,7 +237,7 @@
child = purple_xmlnode_get_child(node, "host");
if ((child != NULL) && ((data = purple_xmlnode_get_data(child)) != NULL))
- purple_proxy_info_set_host(proxy_info, data);
+ purple_proxy_info_set_hostname(proxy_info, data); @@ -266,17 +266,19 @@
/* If there are no values set then proxy_info NULL */
- if ((purple_proxy_info_get_proxy_type(proxy_info) == PURPLE_PROXY_USE_GLOBAL) &&
- (purple_proxy_info_get_host(proxy_info) == NULL) &&
+ if ((purple_proxy_info_get_proxy_type(proxy_info) == PURPLE_PROXY_TYPE_USE_GLOBAL) && + (purple_proxy_info_get_hostname(proxy_info) == NULL) && (purple_proxy_info_get_port(proxy_info) == 0) &&
(purple_proxy_info_get_username(proxy_info) == NULL) &&
(purple_proxy_info_get_password(proxy_info) == NULL))
- purple_proxy_info_destroy(proxy_info);
+ g_clear_object(&proxy_info); purple_account_set_proxy_info(account, proxy_info);
+ g_clear_object(&proxy_info); --- a/libpurple/meson.build Thu Mar 31 22:53:18 2022 -0500
+++ b/libpurple/meson.build Fri Apr 01 01:09:23 2022 -0500
@@ -73,6 +73,7 @@
'purpleprotocolprivacy.c',
'purpleprotocolroomlist.c',
'purpleprotocolserver.c',
'purplesqlitehistoryadapter.c',
@@ -166,6 +167,7 @@
'purpleprotocolprivacy.h',
'purpleprotocolroomlist.h',
'purpleprotocolserver.h',
'purplesqlitehistoryadapter.h',
@@ -242,6 +244,7 @@
--- a/libpurple/proxy.c Thu Mar 31 22:53:18 2022 -0500
+++ b/libpurple/proxy.c Fri Apr 01 01:09:23 2022 -0500
@@ -33,143 +33,9 @@
#include <libsoup/soup.h>
- PurpleProxyType type; /* The proxy type. */
- char *host; /* The host. */
- int port; /* The port number. */
- char *username; /* The username. */
- char *password; /* The password. */
static PurpleProxyInfo *global_proxy_info = NULL;
/**************************************************************************
- **************************************************************************/
-purple_proxy_info_new(void)
- return g_new0(PurpleProxyInfo, 1);
-static PurpleProxyInfo *
-purple_proxy_info_copy(PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, NULL);
- copy = purple_proxy_info_new();
- copy->type = info->type;
- copy->host = g_strdup(info->host);
- copy->port = info->port;
- copy->username = g_strdup(info->username);
- copy->password = g_strdup(info->password);
-purple_proxy_info_destroy(PurpleProxyInfo *info)
- g_return_if_fail(info != NULL);
- g_free(info->username);
- g_free(info->password);
-purple_proxy_info_set_proxy_type(PurpleProxyInfo *info, PurpleProxyType type)
- g_return_if_fail(info != NULL);
-purple_proxy_info_set_host(PurpleProxyInfo *info, const char *host)
- g_return_if_fail(info != NULL);
- info->host = g_strdup(host);
-purple_proxy_info_set_port(PurpleProxyInfo *info, int port)
- g_return_if_fail(info != NULL);
-purple_proxy_info_set_username(PurpleProxyInfo *info, const char *username)
- g_return_if_fail(info != NULL);
- g_free(info->username);
- info->username = g_strdup(username);
-purple_proxy_info_set_password(PurpleProxyInfo *info, const char *password)
- g_return_if_fail(info != NULL);
- g_free(info->password);
- info->password = g_strdup(password);
-purple_proxy_info_get_proxy_type(const PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, PURPLE_PROXY_NONE);
-purple_proxy_info_get_host(const PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, NULL);
-purple_proxy_info_get_port(const PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, 0);
-purple_proxy_info_get_username(const PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, NULL);
-purple_proxy_info_get_password(const PurpleProxyInfo *info)
- g_return_val_if_fail(info != NULL, NULL);
-G_DEFINE_BOXED_TYPE(PurpleProxyInfo, purple_proxy_info,
- purple_proxy_info_copy, purple_proxy_info_destroy);
-/**************************************************************************
**************************************************************************/
@@ -183,341 +49,11 @@
g_return_if_fail(info != NULL);
- purple_proxy_info_destroy(global_proxy_info);
+ g_clear_object(&global_proxy_info); global_proxy_info = info;
-/* index in gproxycmds below, keep them in sync */
-#define GNOME_PROXY_MODE 0
-#define GNOME_PROXY_USE_SAME_PROXY 1
-#define GNOME_PROXY_SOCKS_HOST 2
-#define GNOME_PROXY_SOCKS_PORT 3
-#define GNOME_PROXY_HTTP_HOST 4
-#define GNOME_PROXY_HTTP_PORT 5
-#define GNOME_PROXY_HTTP_USER 6
-#define GNOME_PROXY_HTTP_PASS 7
-/* detect proxy settings for gnome2/gnome3 */
-static const char* gproxycmds[][2] = {
- { "gconftool-2 -g /system/proxy/mode" , "gsettings get org.gnome.system.proxy mode" },
- { "gconftool-2 -g /system/http_proxy/use_same_proxy", "gsettings get org.gnome.system.proxy use-same-proxy" },
- { "gconftool-2 -g /system/proxy/socks_host", "gsettings get org.gnome.system.proxy.socks host" },
- { "gconftool-2 -g /system/proxy/socks_port", "gsettings get org.gnome.system.proxy.socks port" },
- { "gconftool-2 -g /system/http_proxy/host", "gsettings get org.gnome.system.proxy.http host" },
- { "gconftool-2 -g /system/http_proxy/port", "gsettings get org.gnome.system.proxy.http port"},
- { "gconftool-2 -g /system/http_proxy/authentication_user", "gsettings get org.gnome.system.proxy.http authentication-user" },
- { "gconftool-2 -g /system/http_proxy/authentication_password", "gsettings get org.gnome.system.proxy.http authentication-password" },
- * purple_gnome_proxy_get_parameter:
- * @parameter: One of the GNOME_PROXY_x constants defined above
- * @gnome_version: GNOME2_CMDS or GNOME3_CMDS
- * This is a utility function used to retrieve proxy parameter values from
- * GNOME 2/3 environment.
- * Returns: The value of requested proxy parameter
-purple_gnome_proxy_get_parameter(guint8 parameter, guint8 gnome_version)
- if (parameter > GNOME_PROXY_HTTP_PASS)
- if (gnome_version > GNOME3_CMDS)
- if (!g_spawn_command_line_sync(gproxycmds[parameter][gnome_version],
- ¶m, &err, NULL, NULL))
- if (param[0] == '\'' || param[0] == '\"') {
- param_len = strlen(param);
- memmove(param, param + 1, param_len); /* copy last \0 too */
- if (param_len > 0 && (param[param_len - 1] == '\'' || param[param_len - 1] == '\"'))
- param[param_len - 1] = '\0';
-static PurpleProxyInfo *
-purple_gnome_proxy_get_info(void)
- static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
- gboolean use_same_proxy = FALSE;
- guint8 gnome_version = GNOME3_CMDS;
- tmp = g_find_program_in_path("gsettings");
- tmp = g_find_program_in_path("gconftool-2");
- gnome_version = GNOME2_CMDS;
- return purple_global_proxy_get_info();
- /* Check whether to use a proxy. */
- tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_MODE, gnome_version);
- return purple_global_proxy_get_info();
- if (purple_strequal(tmp, "none")) {
- info.type = PURPLE_PROXY_NONE;
- if (!purple_strequal(tmp, "manual")) {
- /* Unknown setting. Fallback to using our global proxy settings. */
- return purple_global_proxy_get_info();
- /* Free the old fields */
- tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_USE_SAME_PROXY, gnome_version);
- return purple_global_proxy_get_info();
- if (purple_strequal(tmp, "true"))
- info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_HOST, gnome_version);
- return purple_global_proxy_get_info();
- if (!use_same_proxy && (info.host != NULL) && (*info.host != '\0')) {
- info.type = PURPLE_PROXY_SOCKS5;
- tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_SOCKS_PORT, gnome_version);
- return purple_global_proxy_get_info();
- info.host = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_HOST, gnome_version);
- return purple_global_proxy_get_info();
- /* If we get this far then we know we're using an HTTP proxy */
- info.type = PURPLE_PROXY_HTTP;
- if (*info.host == '\0')
- purple_debug_info("proxy", "Gnome proxy settings are set to "
- "'manual' but no suitable proxy server is specified. Using "
- "Pidgin's proxy settings instead.\n");
- return purple_global_proxy_get_info();
- info.username = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_USER, gnome_version);
- return purple_global_proxy_get_info();
- info.password = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PASS, gnome_version);
- return purple_global_proxy_get_info();
- tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_HTTP_PORT, gnome_version);
- return purple_global_proxy_get_info();
-typedef BOOL (CALLBACK* LPFNWINHTTPGETIEPROXYCONFIG)(/*IN OUT*/ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG* pProxyConfig);
-/* This modifies "host" in-place evilly */
-_proxy_fill_hostinfo(PurpleProxyInfo *info, char *host, int default_port)
- int port = default_port;
- d = g_strrstr(host, ":");
- sscanf(d, "%d", &port);
- purple_proxy_info_set_host(info, host);
- purple_proxy_info_set_port(info, port);
-static PurpleProxyInfo *
-purple_win32_proxy_get_info(void)
- static LPFNWINHTTPGETIEPROXYCONFIG MyWinHttpGetIEProxyConfig = NULL;
- static gboolean loaded = FALSE;
- static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
- WINHTTP_CURRENT_USER_IE_PROXY_CONFIG ie_proxy_config;
- MyWinHttpGetIEProxyConfig = (LPFNWINHTTPGETIEPROXYCONFIG)
- wpurple_find_and_loadproc("winhttp.dll", "WinHttpGetIEProxyConfigForCurrentUser");
- if (!MyWinHttpGetIEProxyConfig)
- purple_debug_warning("proxy", "Unable to read Windows Proxy Settings.\n");
- if (!MyWinHttpGetIEProxyConfig)
- ZeroMemory(&ie_proxy_config, sizeof(ie_proxy_config));
- if (!MyWinHttpGetIEProxyConfig(&ie_proxy_config)) {
- purple_debug_error("proxy", "Error reading Windows Proxy Settings(%lu).\n", GetLastError());
- /* We can't do much if it is autodetect*/
- if (ie_proxy_config.fAutoDetect) {
- purple_debug_error("proxy", "Windows Proxy Settings set to autodetect (not supported).\n");
- /* TODO: For 3.0.0 we'll revisit this (maybe)*/
- } else if (ie_proxy_config.lpszProxy) {
- gchar *proxy_list = g_utf16_to_utf8(ie_proxy_config.lpszProxy, -1,
- /* We can't do anything about the bypass list, as we don't have the url */
- /* TODO: For 3.0.0 we'll revisit this*/
- /* There are proxy settings for several protocols */
- if (proxy_list && *proxy_list) {
- char *specific = NULL, *tmp;
- /* If there is only a global proxy, which means "HTTP" */
- if (!strchr(proxy_list, ';') || (specific = g_strstr_len(proxy_list, -1, "http=")) != NULL) {
- specific += strlen("http=");
- tmp = strchr(specific, ';');
- /* specific now points the proxy server (and port) */
- purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_HTTP);
- _proxy_fill_hostinfo(&info, specific, 80);
- /* TODO: is there a way to set the username/password? */
- purple_proxy_info_set_username(&info, NULL);
- purple_proxy_info_set_password(&info, NULL);
- purple_debug_info("proxy", "Windows Proxy Settings: HTTP proxy: '%s:%d'.\n",
- purple_proxy_info_get_host(&info),
- purple_proxy_info_get_port(&info));
- } else if ((specific = g_strstr_len(proxy_list, -1, "socks=")) != NULL) {
- specific += strlen("socks=");
- tmp = strchr(specific, ';');
- /* specific now points the proxy server (and port) */
- purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_SOCKS5);
- _proxy_fill_hostinfo(&info, specific, 1080);
- /* TODO: is there a way to set the username/password? */
- purple_proxy_info_set_username(&info, NULL);
- purple_proxy_info_set_password(&info, NULL);
- purple_debug_info("proxy", "Windows Proxy Settings: SOCKS5 proxy: '%s:%d'.\n",
- purple_proxy_info_get_host(&info),
- purple_proxy_info_get_port(&info));
- purple_debug_info("proxy", "Windows Proxy Settings: No supported proxy specified.\n");
- purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_NONE);
- /* TODO: Fix API to be able look at proxy bypass settings */
- purple_debug_info("proxy", "No Windows proxy set.\n");
- purple_proxy_info_set_proxy_type(&info, PURPLE_PROXY_NONE);
- if (ie_proxy_config.lpszAutoConfigUrl)
- GlobalFree(ie_proxy_config.lpszAutoConfigUrl);
- if (ie_proxy_config.lpszProxy)
- GlobalFree(ie_proxy_config.lpszProxy);
- if (ie_proxy_config.lpszProxyBypass)
- GlobalFree(ie_proxy_config.lpszProxyBypass);
/**************************************************************************
**************************************************************************/
@@ -532,22 +68,19 @@
static PurpleProxyInfo *tmp_none_proxy_info = NULL;
if (!tmp_none_proxy_info) {
tmp_none_proxy_info = purple_proxy_info_new();
- purple_proxy_info_set_proxy_type(tmp_none_proxy_info, PURPLE_PROXY_NONE);
+ purple_proxy_info_set_proxy_type(tmp_none_proxy_info, PURPLE_PROXY_TYPE_NONE); if (account && purple_account_get_proxy_info(account) != NULL) {
gpi = purple_account_get_proxy_info(account);
- if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_USE_GLOBAL)
+ if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_TYPE_USE_GLOBAL) - if (purple_running_gnome())
- gpi = purple_gnome_proxy_get_info();
- gpi = purple_global_proxy_get_info();
+ gpi = purple_global_proxy_get_info(); - if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_USE_ENVVAR) {
+ if (purple_proxy_info_get_proxy_type(gpi) == PURPLE_PROXY_TYPE_USE_ENVVAR) { if ((tmp = g_getenv("HTTP_PROXY")) != NULL ||
(tmp = g_getenv("http_proxy")) != NULL ||
(tmp = g_getenv("HTTPPROXY")) != NULL)
@@ -575,10 +108,10 @@
- purple_proxy_info_set_host(gpi, host);
+ purple_proxy_info_set_hostname(gpi, host); + purple_proxy_info_set_port(gpi, port); purple_proxy_info_set_username(gpi, username);
purple_proxy_info_set_password(gpi, password);
- purple_proxy_info_set_port(gpi, port);
@@ -600,11 +133,6 @@
(tmp = g_getenv("HTTPPROXYPORT")) != NULL)
purple_proxy_info_set_port(gpi, atoi(tmp));
- if ((wgpi = purple_win32_proxy_get_info()) != NULL)
/* no proxy environment variable found, don't use a proxy */
purple_debug_info("proxy", "No environment settings found, not using a proxy\n");
gpi = tmp_none_proxy_info;
@@ -626,7 +154,7 @@
GProxyResolver *resolver;
- if (purple_proxy_info_get_proxy_type(info) == PURPLE_PROXY_NONE) {
+ if (purple_proxy_info_get_proxy_type(info) == PURPLE_PROXY_TYPE_NONE) { /* Return an empty simple resolver, which will resolve on direct
return g_simple_proxy_resolver_new(NULL, NULL);
@@ -636,17 +164,17 @@
/* PURPLE_PROXY_NONE already handled above */
- case PURPLE_PROXY_USE_ENVVAR:
+ case PURPLE_PROXY_TYPE_USE_ENVVAR: /* Intentional passthrough */
- case PURPLE_PROXY_HTTP:
+ case PURPLE_PROXY_TYPE_HTTP: - case PURPLE_PROXY_SOCKS4:
+ case PURPLE_PROXY_TYPE_SOCKS4: - case PURPLE_PROXY_SOCKS5:
+ case PURPLE_PROXY_TYPE_SOCKS5: /* Intentional passthrough */
+ case PURPLE_PROXY_TYPE_TOR: @@ -659,7 +187,7 @@
- if (purple_proxy_info_get_host(info) == NULL ||
+ if (purple_proxy_info_get_hostname(info) == NULL || purple_proxy_info_get_port(info) <= 0) {
g_set_error_literal(error, PURPLE_CONNECTION_ERROR,
PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
@@ -687,7 +215,7 @@
proxy = g_strdup_printf("%s://%s%s:%i", protocol,
auth != NULL ? auth : "",
- purple_proxy_info_get_host(info),
+ purple_proxy_info_get_hostname(info), purple_proxy_info_get_port(info));
@@ -708,23 +236,23 @@
const char *type = value;
if (purple_strequal(type, "none"))
- proxytype = PURPLE_PROXY_NONE;
+ proxytype = PURPLE_PROXY_TYPE_NONE; else if (purple_strequal(type, "http"))
- proxytype = PURPLE_PROXY_HTTP;
+ proxytype = PURPLE_PROXY_TYPE_HTTP; else if (purple_strequal(type, "socks4"))
- proxytype = PURPLE_PROXY_SOCKS4;
+ proxytype = PURPLE_PROXY_TYPE_SOCKS4; else if (purple_strequal(type, "socks5"))
- proxytype = PURPLE_PROXY_SOCKS5;
+ proxytype = PURPLE_PROXY_TYPE_SOCKS5; else if (purple_strequal(type, "tor"))
- proxytype = PURPLE_PROXY_TOR;
+ proxytype = PURPLE_PROXY_TYPE_TOR; else if (purple_strequal(type, "envvar"))
- proxytype = PURPLE_PROXY_USE_ENVVAR;
+ proxytype = PURPLE_PROXY_TYPE_USE_ENVVAR; purple_proxy_info_set_proxy_type(info, proxytype);
} else if (purple_strequal(name, "/purple/proxy/host"))
- purple_proxy_info_set_host(info, value);
+ purple_proxy_info_set_hostname(info, value); else if (purple_strequal(name, "/purple/proxy/port"))
purple_proxy_info_set_port(info, GPOINTER_TO_INT(value));
else if (purple_strequal(name, "/purple/proxy/username"))
@@ -784,6 +312,5 @@
purple_prefs_disconnect_by_handle(purple_proxy_get_handle());
- purple_proxy_info_destroy(global_proxy_info);
- global_proxy_info = NULL;
+ g_clear_object(&global_proxy_info); --- a/pidgin/gtkaccount.c Thu Mar 31 22:53:18 2022 -0500
+++ b/pidgin/gtkaccount.c Fri Apr 01 01:09:23 2022 -0500
@@ -934,43 +934,43 @@
gtk_list_store_set(model, &iter,
0, purple_running_gnome() ? _("Use GNOME Proxy Settings")
:_("Use Global Proxy Settings"),
- 1, PURPLE_PROXY_USE_GLOBAL,
+ 1, PURPLE_PROXY_TYPE_USE_GLOBAL, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
+ 1, PURPLE_PROXY_TYPE_NONE, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
- 1, PURPLE_PROXY_SOCKS4,
+ 1, PURPLE_PROXY_TYPE_SOCKS4, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
- 1, PURPLE_PROXY_SOCKS5,
+ 1, PURPLE_PROXY_TYPE_SOCKS5, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
0, _("Tor/Privacy (SOCKS5)"),
+ 1, PURPLE_PROXY_TYPE_TOR, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
+ 1, PURPLE_PROXY_TYPE_HTTP, gtk_list_store_append(model, &iter);
gtk_list_store_set(model, &iter,
0, _("Use Environmental Settings"),
- 1, PURPLE_PROXY_USE_ENVVAR,
+ 1, PURPLE_PROXY_TYPE_USE_ENVVAR, renderer = gtk_cell_renderer_text_new();
@@ -993,9 +993,9 @@
dialog->new_proxy_type = int_value;
- if (dialog->new_proxy_type == PURPLE_PROXY_USE_GLOBAL ||
- dialog->new_proxy_type == PURPLE_PROXY_NONE ||
- dialog->new_proxy_type == PURPLE_PROXY_USE_ENVVAR) {
+ if (dialog->new_proxy_type == PURPLE_PROXY_TYPE_USE_GLOBAL || + dialog->new_proxy_type == PURPLE_PROXY_TYPE_NONE || + dialog->new_proxy_type == PURPLE_PROXY_TYPE_USE_ENVVAR) { gtk_widget_hide(dialog->proxy_vbox);
@@ -1082,7 +1082,7 @@
dialog->new_proxy_type = purple_proxy_info_get_proxy_type(proxy_info);
- if ((value = purple_proxy_info_get_host(proxy_info)) != NULL)
+ if ((value = purple_proxy_info_get_hostname(proxy_info)) != NULL) gtk_entry_set_text(GTK_ENTRY(dialog->proxy_host_entry), value);
if ((int_val = purple_proxy_info_get_port(proxy_info)) != 0) {
@@ -1100,7 +1100,7 @@
gtk_entry_set_text(GTK_ENTRY(dialog->proxy_pass_entry), value);
- dialog->new_proxy_type = PURPLE_PROXY_USE_GLOBAL;
+ dialog->new_proxy_type = PURPLE_PROXY_TYPE_USE_GLOBAL; proxy_model = gtk_combo_box_get_model(
GTK_COMBO_BOX(dialog->proxy_dropdown));
@@ -1381,6 +1381,9 @@
if (proxy_info == NULL) {
proxy_info = purple_proxy_info_new();
purple_account_set_proxy_info(account, proxy_info);
+ /* Add a reference to make sure the proxy info stays around. */ + g_object_ref(proxy_info); /* Set the proxy info type. */
@@ -1390,9 +1393,9 @@
value = gtk_entry_get_text(GTK_ENTRY(dialog->proxy_host_entry));
- purple_proxy_info_set_host(proxy_info, value);
+ purple_proxy_info_set_hostname(proxy_info, value); - purple_proxy_info_set_host(proxy_info, NULL);
+ purple_proxy_info_set_hostname(proxy_info, NULL); value = gtk_entry_get_text(GTK_ENTRY(dialog->proxy_port_entry));
@@ -1419,14 +1422,14 @@
purple_proxy_info_set_password(proxy_info, NULL);
/* If there are no values set then proxy_info NULL */
- if ((purple_proxy_info_get_proxy_type(proxy_info) == PURPLE_PROXY_USE_GLOBAL) &&
- (purple_proxy_info_get_host(proxy_info) == NULL) &&
+ if ((purple_proxy_info_get_proxy_type(proxy_info) == PURPLE_PROXY_TYPE_USE_GLOBAL) && + (purple_proxy_info_get_hostname(proxy_info) == NULL) && (purple_proxy_info_get_port(proxy_info) == 0) &&
(purple_proxy_info_get_username(proxy_info) == NULL) &&
(purple_proxy_info_get_password(proxy_info) == NULL))
purple_account_set_proxy_info(account, NULL);
+ g_clear_object(&proxy_info); /* Voice and Video settings */
@@ -1459,6 +1462,7 @@
/* We no longer need the data from the dialog window */
account_win_destroy_cb(NULL, NULL, dialog);
+ g_clear_object(&proxy_info);