]> git.sesse.net Git - vlc/commitdiff
HTTP access: support for libproxy, with configure autodetection
authorDominique Leuenberger <dominique@leuenberger.net>
Sun, 8 Jun 2008 13:56:35 +0000 (16:56 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Sun, 15 Jun 2008 12:28:29 +0000 (15:28 +0300)
Libproxy can read proxy settings from KDE, GNOME, NetworkManager, or
the environment.

Signed-off-by: Rémi Denis-Courmont <rdenis@simphalempin.com>
configure.ac
modules/access/http.c

index fd7bba26c56cc988fc58cf55d1b676486256ceab..7aecb5a65bdb1486ecfb4c456c005248f36775d1 100644 (file)
@@ -1665,6 +1665,21 @@ then
 fi
 AM_CONDITIONAL(BUILD_HTTPD, [test "${enable_httpd}" != "no"])
 
+dnl
+dnl libproxy support
+dnl
+AC_ARG_ENABLE(libproxy,
+  [  --enable-libproxy       libproxy support (default auto)])
+AS_IF([test "${enable_libproxy}" != "no"], [
+  AC_CHECK_HEADERS(proxy.h, [
+    VLC_ADD_LIBS([access_http],[-lproxy])
+  ], [
+    AS_IF([test "x${enable_libproxy}" != "x"], [
+      AC_MSG_ERROR([libproxy could not be found on your system])
+    ])
+  ])
+])
+
 dnl
 dnl VideoLAN manager
 dnl
index cfb207de76f58963f2bdb5d3f2010d073474c06e..e397a1f800330bc8b4c1496bc48c0e8af2aef07d 100644 (file)
@@ -52,6 +52,9 @@
 
 #include <assert.h>
 
+#ifdef HAVE_PROXY_H
+#    include "proxy.h"
+#endif
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
@@ -315,7 +318,40 @@ static int OpenWithCookies( vlc_object_t *p_this, vlc_array_t *cookies )
         vlc_UrlParse( &p_sys->proxy, psz, 0 );
         free( psz );
     }
-#ifdef HAVE_GETENV
+#ifdef HAVE_PROXY_H
+    else
+    {
+        pxProxyFactory *pf = px_proxy_factory_new();
+        if (pf)
+        {
+            char *buf;
+            int i;
+            i=asprintf(&buf, "%s://%s", p_access->psz_access, p_access->psz_path);
+            if (i >= 0)
+            {
+                msg_Dbg(p_access, "asking libproxy about url '%s'", buf);
+                char **proxies = px_proxy_factory_get_proxies(pf, buf);
+                if (proxies[0])
+                {
+                    msg_Dbg(p_access, "libproxy suggest to use '%s'", proxies[0]);
+                    if(strcmp(proxies[0],"direct://") != 0) 
+                    {
+                        p_sys->b_proxy = true;
+                        vlc_UrlParse( &p_sys->proxy, proxies[0], 0);
+                    }
+                }
+                for(i=0;proxies[i];i++) free(proxies[i]);
+                free(proxies);
+                free(buf);
+                px_proxy_factory_free(pf);
+            }
+        }
+        else
+        {
+            msg_Err(p_access, "Allocating memory for libproxy failed");
+        }
+    }
+#elif HAVE_GETENV
     else
     {
         psz = getenv( "http_proxy" );