Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/1792

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/92/1792/1

curl: patched to read IE proxy settings on Windows

Change-Id: I46605f6c8dfacab0feb5a446db458eed8e5756ee
---
M curl/UnpackedTarball_curl.mk
A curl/curl-7.26.0_win-proxy.patch
2 files changed, 125 insertions(+), 0 deletions(-)



diff --git a/curl/UnpackedTarball_curl.mk b/curl/UnpackedTarball_curl.mk
index 4ff19f7..e6a8cac 100644
--- a/curl/UnpackedTarball_curl.mk
+++ b/curl/UnpackedTarball_curl.mk
@@ -23,6 +23,7 @@
        curl/curl-aix.patch \
        curl/curl-7.26.0_win.patch \
        curl/curl-7.26.0_mingw.patch \
+       curl/curl-7.26.0_win-proxy.patch \
 ))
 ifeq ($(OS),ANDROID)
 $(eval $(call gb_UnpackedTarball_add_patches,curl,\
diff --git a/curl/curl-7.26.0_win-proxy.patch b/curl/curl-7.26.0_win-proxy.patch
new file mode 100644
index 0000000..766ef16
--- /dev/null
+++ b/curl/curl-7.26.0_win-proxy.patch
@@ -0,0 +1,124 @@
+--- curl-7.26.0/lib/Makefile.vc9
++++ misc/build/curl-7.26.0/lib/Makefile.vc9
+@@ -116,7 +116,7 @@ LFLAGS     = /nologo /machine:$(MACHINE)
+ SSLLIBS    = libeay32.lib ssleay32.lib
+ ZLIBLIBSDLL= zdll.lib
+ ZLIBLIBS   = zlib.lib
+-WINLIBS    = ws2_32.lib wldap32.lib
++WINLIBS    = ws2_32.lib wldap32.lib winhttp.lib
+ CFLAGS     = $(CFLAGS) $(EXCFLAGS)
+ 
+ CFGSET     = FALSE
+--- curl-7.26.0/lib/url.c
++++ misc/build/curl-7.26.0/lib/url.c
+@@ -80,6 +80,10 @@ void idn_free (void *ptr);
+ int curl_win32_idn_to_ascii(const char *in, char **out);
+ #endif  /* USE_LIBIDN */
+ 
++#ifdef WIN32
++#include <WinHttp.h>
++#endif
++
+ #include "urldata.h"
+ #include "netrc.h"
+ 
+@@ -4111,6 +4115,21 @@ static bool check_noproxy(const char* name, const char* no_proxy)
+   return FALSE;
+ }
+ 
++#ifdef WIN32
++static char* wstrToCstr( LPWSTR wStr )
++{
++      int bufSize;
++      char* out = NULL;
++      if ( wStr != NULL )
++      {
++              bufSize = WideCharToMultiByte( CP_ACP,  0, wStr, -1, NULL, 0, NULL, NULL );
++              out = ( char* )malloc( bufSize * sizeof(char));
++              WideCharToMultiByte( CP_ACP, 0, wStr, -1, out, bufSize, NULL, NULL );
++      }
++      return out;
++}
++#endif
++
+ /****************************************************************
+ * Detect what (if any) proxy to use. Remember that this selects a host
+ * name and is not limited to HTTP proxies only.
+@@ -4119,6 +4138,7 @@ static bool check_noproxy(const char* name, const char* no_proxy)
+ static char *detect_proxy(struct connectdata *conn)
+ {
+   char *proxy = NULL;
++  char *no_proxy=NULL;
+ 
+ #ifndef CURL_DISABLE_HTTP
+   /* If proxy was not specified, we check for default proxy environment
+@@ -4138,7 +4158,57 @@ static char *detect_proxy(struct connectdata *conn)
+    * For compatibility, the all-uppercase versions of these variables are
+    * checked if the lowercase versions don't exist.
+    */
+-  char *no_proxy=NULL;
++#ifdef WIN32
++  WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *ieProxyConfig;
++  ieProxyConfig = 
(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG*)malloc(sizeof(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG));
++  if(WinHttpGetIEProxyConfigForCurrentUser(ieProxyConfig)) {
++    if(!ieProxyConfig->fAutoDetect) {
++      char *ieProxy;
++      char *ieNoProxy;
++                char* pos;
++
++      ieProxy = wstrToCstr(ieProxyConfig->lpszProxy);
++      ieNoProxy = wstrToCstr(ieProxyConfig->lpszProxyBypass);
++
++                      /* Convert the ieNoProxy into a proper no_proxy value */
++      no_proxy = strdup(ieNoProxy);
++      pos = strpbrk(no_proxy, "; ");
++      while (NULL != pos) {
++        no_proxy[pos-no_proxy] = ',';
++        pos = strpbrk(no_proxy, "; ");
++      }
++
++      if(!check_noproxy(conn->host.name, no_proxy)) {
++        /* Look for the http proxy setting */
++        char* tok;
++
++        tok = strtok(ieProxy, ";");
++        if(strchr(tok, '=') == NULL) {
++          proxy = strdup(ieProxy);
++        }
++        else {
++          do {
++            if(strncmp(tok, "http=", 5) == 0) {
++              /* We found HTTP proxy value, then use it */
++              proxy = strdup( tok + 5 );
++            }
++          }
++          while(NULL != strtok(NULL, ";"));
++        }
++      }
++
++      free(ieProxy);
++      free(ieNoProxy);
++    }
++    else {
++      /* TODO Handle the Proxy config Auto Detection case */
++    }
++              
++    GlobalFree( ieProxyConfig->lpszAutoConfigUrl );
++              GlobalFree( ieProxyConfig->lpszProxy );
++              GlobalFree( ieProxyConfig->lpszProxyBypass );
++  }
++#else /* !WIN32 */
+   char proxy_env[128];
+ 
+   no_proxy=curl_getenv("no_proxy");
+@@ -4189,9 +4259,9 @@ static char *detect_proxy(struct connectdata *conn)
+     }
+   } /* if(!check_noproxy(conn->host.name, no_proxy)) - it wasn't specified
+        non-proxy */
++#endif /* WIN32 */
+   if(no_proxy)
+     free(no_proxy);
+-
+ #else /* !CURL_DISABLE_HTTP */
+ 
+   (void)conn;

-- 
To view, visit https://gerrit.libreoffice.org/1792
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I46605f6c8dfacab0feb5a446db458eed8e5756ee
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Bosdonnat Cedric <cedric.bosdonnat@free.fr>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.