From 4e248695248d2c749b2d9e892549ba0e9390a3d0 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 4 Jun 2013 18:11:15 +0100 Subject: Add and use no proxy list option --- content/fetchers/curl.c | 5 +++++ desktop/options.h | 3 +++ gtk/dialogs/preferences.c | 12 ++++++++++++ gtk/res/options.gtk3.ui | 32 +++++++++++++++++++++++++++++++- resources/FatMessages | 6 ++++-- 5 files changed, 55 insertions(+), 3 deletions(-) diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c index ed4c75952..ca89c95de 100644 --- a/content/fetchers/curl.c +++ b/content/fetchers/curl.c @@ -613,11 +613,16 @@ fetch_curl_set_options(struct curl_fetch_info *f) SETOPT(CURLOPT_USERPWD, NULL); } + /* set up proxy options */ if (nsoption_bool(http_proxy) && (nsoption_charp(http_proxy_host) != NULL) && (strncmp(nsurl_access(f->url), "file:", 5) != 0)) { SETOPT(CURLOPT_PROXY, nsoption_charp(http_proxy_host)); SETOPT(CURLOPT_PROXYPORT, (long) nsoption_int(http_proxy_port)); + + /* setup the omission list */ + SETOPT(CURLOPT_NOPROXY, nsoption_charp(http_proxy_noproxy)); + if (nsoption_int(http_proxy_auth) != OPTION_HTTP_PROXY_AUTH_NONE) { SETOPT(CURLOPT_PROXYAUTH, nsoption_int(http_proxy_auth) == diff --git a/desktop/options.h b/desktop/options.h index 79566184b..391dfbc08 100644 --- a/desktop/options.h +++ b/desktop/options.h @@ -56,6 +56,9 @@ NSOPTION_STRING(http_proxy_auth_user, NULL) /** Proxy authentication password */ NSOPTION_STRING(http_proxy_auth_pass, NULL) +/** Proxy omission list */ +NSOPTION_STRING(http_proxy_noproxy, "localhost") + /** Default font size / 0.1pt. */ NSOPTION_INTEGER(font_size, 128) diff --git a/gtk/dialogs/preferences.c b/gtk/dialogs/preferences.c index f17f1ccb0..0669f8d9f 100644 --- a/gtk/dialogs/preferences.c +++ b/gtk/dialogs/preferences.c @@ -45,6 +45,7 @@ struct ppref { GtkEntry *entryProxyHost; GtkEntry *entryProxyUser; GtkEntry *entryProxyPassword; + GtkEntry *entryProxyNoproxy; GtkSpinButton *spinProxyPort; /* dynamic list stores */ @@ -200,6 +201,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) gboolean port; gboolean user; gboolean pass; + gboolean noproxy; switch (proxyval) { case 0: /* no proxy */ @@ -207,6 +209,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) port = FALSE; user = FALSE; pass = FALSE; + noproxy = FALSE; break; case 1: /* proxy with no auth */ @@ -214,6 +217,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) port = TRUE; user = FALSE; pass = FALSE; + noproxy = TRUE; break; case 2: /* proxy with basic auth */ @@ -221,6 +225,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) port = TRUE; user = TRUE; pass = TRUE; + noproxy = TRUE; break; case 3: /* proxy with ntlm auth */ @@ -228,6 +233,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) port = TRUE; user = TRUE; pass = TRUE; + noproxy = TRUE; break; case 4: /* system proxy */ @@ -235,6 +241,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) port = FALSE; user = FALSE; pass = FALSE; + noproxy = FALSE; break; default: @@ -245,6 +252,7 @@ static void set_proxy_widgets_sensitivity(int proxyval, struct ppref *priv) gtk_widget_set_sensitive(GTK_WIDGET(priv->spinProxyPort), port); gtk_widget_set_sensitive(GTK_WIDGET(priv->entryProxyUser), user); gtk_widget_set_sensitive(GTK_WIDGET(priv->entryProxyPassword), pass); + gtk_widget_set_sensitive(GTK_WIDGET(priv->entryProxyNoproxy), noproxy); } @@ -322,6 +330,9 @@ ENTRY_SIGNALS(entryProxyUser, http_proxy_auth_user) /* password */ ENTRY_SIGNALS(entryProxyPassword, http_proxy_auth_pass) +/* no proxy */ +ENTRY_SIGNALS(entryProxyNoproxy, http_proxy_noproxy) + /* Fetching */ /* maximum fetchers */ @@ -1069,6 +1080,7 @@ GtkWidget* nsgtk_preferences(struct browser_window *bw, GtkWindow *parent) priv->spinProxyPort = GB(SPIN_BUTTON, spinProxyPort); priv->entryProxyUser = GB(ENTRY, entryProxyUser); priv->entryProxyPassword = GB(ENTRY, entryProxyPassword); + priv->entryProxyNoproxy = GB(ENTRY, entryProxyNoproxy); #undef GB /* connect all signals ready to use */ diff --git a/gtk/res/options.gtk3.ui b/gtk/res/options.gtk3.ui index 233825c88..a795c2bf5 100644 --- a/gtk/res/options.gtk3.ui +++ b/gtk/res/options.gtk3.ui @@ -2002,7 +2002,7 @@ True False - 4 + 5 2 6 6 @@ -2175,6 +2175,36 @@ 4 + + + True + False + 0 + preferencesProxyNoproxy + + + 4 + 5 + GTK_FILL + + + + + True + True + True + preferencesProxyNoproxyTooltip + False + + + + + 1 + 2 + 4 + 5 + + diff --git a/resources/FatMessages b/resources/FatMessages index 82c64ce9c..d25af013f 100644 --- a/resources/FatMessages +++ b/resources/FatMessages @@ -2182,11 +2182,13 @@ en.gtk.preferencesProxyType:Proxy type en.gtk.preferencesProxyHost:Host en.gtk.preferencesProxyUsername:Username en.gtk.preferencesProxyPassword:Password +en.gtk.preferencesProxyNoproxy:No Proxy For en.gtk.preferencesProxyTypeTooltip:The type of HTTP proxy server. en.gtk.preferencesProxyHostTooltip:Host name of your proxy server. en.gtk.preferencesProxyPortTooltip:Port number to connect to on proxy server. -en.gtk.preferencesProxyUsernameTooltip:Username to access the proxy -en.gtk.preferencesProxyPasswordTooltip:Password to access the proxy +en.gtk.preferencesProxyUsernameTooltip:Username to access the proxy. +en.gtk.preferencesProxyPasswordTooltip:Password to access the proxy. +en.gtk.preferencesProxyNoproxyTooltip:Comma separated list of host names that should not be proxied. en.gtk.preferencesFetching:Fetching en.gtk.preferencesFetchingMax:Maximum fetchers en.gtk.preferencesFetchingPerhost:Fetches per host -- cgit v1.2.3 From 4d39d4314c48e54bf14ba1edb53c82e6c6d1712e Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 4 Jun 2013 18:30:22 +0100 Subject: only set no proxy value in modern enough versions of teh library --- content/fetchers/curl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/fetchers/curl.c b/content/fetchers/curl.c index ca89c95de..28c0f6095 100644 --- a/content/fetchers/curl.c +++ b/content/fetchers/curl.c @@ -620,8 +620,11 @@ fetch_curl_set_options(struct curl_fetch_info *f) SETOPT(CURLOPT_PROXY, nsoption_charp(http_proxy_host)); SETOPT(CURLOPT_PROXYPORT, (long) nsoption_int(http_proxy_port)); +#if LIBCURL_VERSION_NUM >= 0x071304 + /* Added in 7.19.4 */ /* setup the omission list */ SETOPT(CURLOPT_NOPROXY, nsoption_charp(http_proxy_noproxy)); +#endif if (nsoption_int(http_proxy_auth) != OPTION_HTTP_PROXY_AUTH_NONE) { SETOPT(CURLOPT_PROXYAUTH, -- cgit v1.2.3