From 2e702db3239d9a1f54ef407e82b744b3993eb603 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 18 Sep 2009 16:30:25 +0000 Subject: [PATCH] - client/API: add autosetup proxy info to init_data.xml svn path=/trunk/boinc/; revision=19090 --- checkin_notes | 11 ++++++++++- client/http_curl.cpp | 6 +++--- client/sysmon_win.cpp | 8 ++++---- lib/proxy_info.cpp | 24 +++++++++++++++++------- lib/proxy_info.h | 19 +++++++++++++++++-- 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/checkin_notes b/checkin_notes index 14f2b67aa9..8deff08a96 100644 --- a/checkin_notes +++ b/checkin_notes @@ -7842,8 +7842,17 @@ David 17 Sept 2009 client/ client_types.cpp -David 17 Sept 2009 +David 18 Sept 2009 - transitioner: fix to 15 Sept checkin sched/ transitioner.cpp + +David 18 Sept 2009 + - client/API: add autosetup proxy info to init_data.xml + + client/ + http_curl.cpp + sysmon_win.cpp + lib/ + proxy_info.cpp,h diff --git a/client/http_curl.cpp b/client/http_curl.cpp index 040ae63ad1..3059f532a7 100644 --- a/client/http_curl.cpp +++ b/client/http_curl.cpp @@ -859,11 +859,11 @@ void HTTP_OP::setup_proxy_session(bool no_proxy) { if (log_flags.proxy_debug) { msg_printf(0, MSG_INFO, "[proxy_debug] HTTP_OP::setup_proxy_session(): setting up automatic proxy %s:%d", - pi.autodetect_server_name, pi.autodetect_server_port + pi.autodetect_server_name, pi.autodetect_port ); } - switch(pi.autodetect_server_protocol) { + switch(pi.autodetect_protocol) { case URL_PROTOCOL_SOCKS: curlErr = curl_easy_setopt(curlEasy, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); break; @@ -873,7 +873,7 @@ void HTTP_OP::setup_proxy_session(bool no_proxy) { curlErr = curl_easy_setopt(curlEasy, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); break; } - curlErr = curl_easy_setopt(curlEasy, CURLOPT_PROXYPORT, (long) pi.autodetect_server_port); + curlErr = curl_easy_setopt(curlEasy, CURLOPT_PROXYPORT, (long) pi.autodetect_port); curlErr = curl_easy_setopt(curlEasy, CURLOPT_PROXY, (char*) pi.autodetect_server_name); } } diff --git a/client/sysmon_win.cpp b/client/sysmon_win.cpp index 16c41ecfe7..240a53a02f 100644 --- a/client/sysmon_win.cpp +++ b/client/sysmon_win.cpp @@ -193,9 +193,9 @@ static void windows_detect_autoproxy_settings() { ); // Store the results for future use. - gstate.proxy_info.autodetect_server_protocol = proxy_protocol; + gstate.proxy_info.autodetect_protocol = proxy_protocol; strcpy(gstate.proxy_info.autodetect_server_name, proxy_server); - gstate.proxy_info.autodetect_server_port = proxy_port; + gstate.proxy_info.autodetect_port = proxy_port; if (log_flags.proxy_debug) { msg_printf(NULL, MSG_INFO, @@ -210,9 +210,9 @@ static void windows_detect_autoproxy_settings() { } else { // We can get here if the user is switching from a network that // requires a proxy to one that does not require a proxy. - gstate.proxy_info.autodetect_server_protocol = 0; + gstate.proxy_info.autodetect_protocol = 0; strcpy(gstate.proxy_info.autodetect_server_name, ""); - gstate.proxy_info.autodetect_server_port = 0; + gstate.proxy_info.autodetect_port = 0; if (log_flags.proxy_debug) { msg_printf(NULL, MSG_INFO, "[proxy_debug] no automatic proxy detected"); } diff --git a/lib/proxy_info.cpp b/lib/proxy_info.cpp index 34b9b12f59..e9200988f7 100644 --- a/lib/proxy_info.cpp +++ b/lib/proxy_info.cpp @@ -70,8 +70,7 @@ int PROXY_INFO::write(MIOFILE& out) { " %s\n" " %s\n" " %s\n" - " %s\n" - "\n", + " %s\n", use_http_proxy?" \n":"", use_socks_proxy?" \n":"", use_http_auth?" \n":"", @@ -86,6 +85,19 @@ int PROXY_INFO::write(MIOFILE& out) { hup, noproxy_hosts ); + if (strlen(autodetect_server_name)) { + out.printf( + " %d\n" + " %d\n" + " %d\n", + autodetect_protocol, + autodetect_server_name, + autodetect_port + ); + } + out.printf( + "\n" + ); return 0; } @@ -102,12 +114,10 @@ void PROXY_INFO::clear() { strcpy(http_user_name, ""); strcpy(http_user_passwd, ""); socks_version = 0; - strcpy(autodetect_server_name, ""); - autodetect_server_port = 80; strcpy(noproxy_hosts, ""); - autodetect_server_protocol = 0; - strcpy(autodetect_server_name, ""); - autodetect_server_port = 80; + strcpy(autodetect_server_name, ""); + autodetect_port = 80; + autodetect_protocol = 0; } const char *BOINC_RCSID_af13db88e5 = "$Id$"; diff --git a/lib/proxy_info.h b/lib/proxy_info.h index b5cf85421e..ebb68804f0 100644 --- a/lib/proxy_info.h +++ b/lib/proxy_info.h @@ -20,7 +20,11 @@ #include "miofile.h" +// info on whether HTTP requests need to go through a proxy +// struct PROXY_INFO { + // the following is populated is user has specified an HTTP proxy + // bool use_http_proxy; bool use_http_auth; char http_server_name[256]; @@ -28,6 +32,8 @@ struct PROXY_INFO { char http_user_name[256]; char http_user_passwd[256]; + // the following is populated if use has specified a SOCKs proxy + // bool use_socks_proxy; int socks_version; char socks_server_name[256]; @@ -35,15 +41,24 @@ struct PROXY_INFO { char socks5_user_name[256]; char socks5_user_passwd[256]; + // a list of hosts for which we should NOT go through a proxy + // (e.g. a company PC attached to both local and remote projects) + // char noproxy_hosts[256]; - int autodetect_server_protocol; + // On Windows, if neither HTTP nor SOCKS proxy is specified, + // we try the "autodetect" mechanism. + // If it gets anything, the info is filled in below + // + int autodetect_protocol; + // URL_PROTOCOL_SOCKS, URL_PROTOCOL_HTTP, or URL_PROTOCOL_HTTPS char autodetect_server_name[256]; - int autodetect_server_port; + int autodetect_port; bool need_autodetect_proxy_settings; // if true, we need to detect proxy settings. // set to true if ref web site lookup fails bool have_autodetect_proxy_settings; + // whether above fields are defined int parse(MIOFILE&); int write(MIOFILE&);