static void conf_proxy_reset_settings_cb (GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data) { gchar *proxyname, *proxyusername, *proxypassword; gint proxyport; gint proxydetectmode; gboolean proxyuseauth; proxyname = NULL; proxyport = 0; proxyusername = NULL; proxypassword = NULL; conf_get_int_value (PROXY_DETECT_MODE, &proxydetectmode); switch (proxydetectmode) { default: case 0: debug0 (DEBUG_CONF, "proxy auto detect is configured"); /* nothing to do, all done by libproxy inside libsoup */ break; case 1: debug0 (DEBUG_CONF, "proxy is disabled by user"); /* nothing to do */ break; case 2: debug0 (DEBUG_CONF, "manual proxy is configured"); conf_get_str_value (PROXY_HOST, &proxyname); conf_get_int_value (PROXY_PORT, &proxyport); conf_get_bool_value (PROXY_USEAUTH, &proxyuseauth); if (proxyuseauth) { conf_get_str_value (PROXY_USER, &proxyusername); conf_get_str_value (PROXY_PASSWD, &proxypassword); } break; } debug4 (DEBUG_CONF, "Manual proxy settings are now %s:%d %s:%s", proxyname != NULL ? proxyname : "NULL", proxyport, proxyusername != NULL ? proxyusername : "******", proxypassword != NULL ? proxypassword : "******"); network_set_proxy (proxydetectmode, proxyname, proxyport, proxyusername, proxypassword); }
static void conf_proxy_reset_settings_cb (GSettings *settings, guint cnxn_id, gchar *key, gpointer user_data) { gchar *proxyname, *proxyusername, *proxypassword, *tmp; gboolean gnomeUseProxy; guint proxyport; gint proxydetectmode; gboolean proxyuseauth; xmlURIPtr uri; proxyname = NULL; proxyport = 0; proxyusername = NULL; proxypassword = NULL; conf_get_int_value (PROXY_DETECT_MODE, &proxydetectmode); switch (proxydetectmode) { default: case 0: debug0 (DEBUG_CONF, "proxy auto detect is configured"); /* first check for a configured GNOME proxy, note: older GNOME versions do use the boolean flag GNOME_USE_PROXY while newer ones use the string key GNOME_PROXY_MODE */ conf_get_str_value_from_schema (proxy_settings, GNOME_PROXY_MODE, &tmp); gnomeUseProxy = g_str_equal (tmp, "manual"); g_free (tmp); /* first check for a configured GNOME proxy */ if (gnomeUseProxy) { conf_get_str_value_from_schema (proxy_settings, GNOME_PROXY_HOST, &proxyname); conf_get_int_value_from_schema (proxy_settings, GNOME_PROXY_PORT, &proxyport); debug2 (DEBUG_CONF, "using GNOME configured proxy: \"%s\" port \"%d\"", proxyname, proxyport); conf_get_bool_value_from_schema (proxy_settings, GNOME_PROXY_USEAUTH, &proxyuseauth); if (proxyuseauth) { conf_get_str_value_from_schema (proxy_settings, GNOME_PROXY_USER, &proxyusername); conf_get_str_value_from_schema (proxy_settings, GNOME_PROXY_PASSWD, &proxypassword); } } else { /* otherwise there could be a proxy specified in the environment the following code was derived from SnowNews' setup.c */ if (g_getenv("http_proxy")) { /* The pointer returned by getenv must not be altered. What about mentioning this in the manpage of getenv? */ debug0 (DEBUG_CONF, "using proxy from environment"); do { uri = xmlParseURI (BAD_CAST g_getenv ("http_proxy")); if (uri == NULL) { debug0 (DEBUG_CONF, "parsing URI in $http_proxy failed!"); break; } if (uri->server == NULL) { debug0 (DEBUG_CONF, "could not determine proxy name from $http_proxy!"); xmlFreeURI (uri); break; } proxyname = g_strdup (uri->server); proxyport = (uri->port == 0) ? 3128 : uri->port; if (uri->user) { tmp = strtok (uri->user, ":"); tmp = strtok (NULL, ":"); if (tmp) { proxyusername = g_strdup (uri->user); proxypassword = g_strdup (tmp); } } xmlFreeURI (uri); } while (FALSE); } } if (!proxyname) debug0 (DEBUG_CONF, "no proxy GNOME of $http_proxy configuration found..."); break; case 1: debug0 (DEBUG_CONF, "proxy is disabled by user"); /* nothing to do */ break; case 2: debug0 (DEBUG_CONF, "manual proxy is configured"); conf_get_str_value (PROXY_HOST, &proxyname); conf_get_int_value (PROXY_PORT, &proxyport); conf_get_bool_value (PROXY_USEAUTH, &proxyuseauth); if (proxyuseauth) { conf_get_str_value (PROXY_USER, &proxyusername); conf_get_str_value (PROXY_PASSWD, &proxypassword); } break; } debug4 (DEBUG_CONF, "Proxy settings are now %s:%d %s:%s", proxyname != NULL ? proxyname : "NULL", proxyport, proxyusername != NULL ? proxyusername : "******", proxypassword != NULL ? proxypassword : "******"); network_set_proxy (proxyname, proxyport, proxyusername, proxypassword); }