changeset 32586:31a65f4ca3bb

Add support for login/password in http_proxy env variable.
author cboesch
date Fri, 03 Dec 2010 23:10:36 +0000
parents be61988fb5c4
children c878178a05f2
files stream/network.c stream/url.c stream/url.h
diffstat 3 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/stream/network.c	Fri Dec 03 19:52:10 2010 +0000
+++ b/stream/network.c	Fri Dec 03 23:10:36 2010 +0000
@@ -164,14 +164,14 @@
 #endif
 
 			mp_msg(MSGT_NETWORK,MSGL_V,"Using HTTP proxy: %s\n", proxy_url->url );
-			len = strlen( proxy_url->hostname ) + strlen( url->url ) + 20;	// 20 = http_proxy:// + port
-			new_url = malloc( len+1 );
+			len = make_http_proxy_url(proxy_url, url->url, NULL, 0) + 1;
+			new_url = malloc(len);
 			if( new_url==NULL ) {
 				mp_msg(MSGT_NETWORK,MSGL_FATAL,MSGTR_MemAllocFailed);
 				url_free(proxy_url);
 				return url_out;
 			}
-			sprintf(new_url, "http_proxy://%s:%d/%s", proxy_url->hostname, proxy_url->port, url->url );
+			make_http_proxy_url(proxy_url, url->url, new_url, len);
 			tmp_url = url_new( new_url );
 			if( tmp_url==NULL ) {
 				free( new_url );
--- a/stream/url.c	Fri Dec 03 19:52:10 2010 +0000
+++ b/stream/url.c	Fri Dec 03 23:10:36 2010 +0000
@@ -68,6 +68,19 @@
                         url->hostname, url->file);
 }
 
+int make_http_proxy_url(URL_t *proxy, const char *host_url, char *dst,
+                        int dst_size)
+{
+    if (proxy->username)
+        return snprintf(dst, dst_size, "http_proxy://%s:%s@%s:%d/%s",
+                        proxy->username,
+                        proxy->password ? proxy->password : "",
+                        proxy->hostname, proxy->port, host_url);
+    else
+        return snprintf(dst, dst_size, "http_proxy://%s:%d/%s",
+                        proxy->hostname, proxy->port, host_url);
+}
+
 URL_t*
 url_new(const char* url) {
 	int pos1, pos2,v6addr = 0, noauth_len;
--- a/stream/url.h	Fri Dec 03 19:52:10 2010 +0000
+++ b/stream/url.h	Fri Dec 03 23:10:36 2010 +0000
@@ -37,6 +37,9 @@
 } URL_t;
 
 URL_t *url_redirect(URL_t **url, const char *redir);
+
+int make_http_proxy_url(URL_t *proxy, const char *host_url, char *dst, int dst_size);
+
 URL_t* url_new(const char* url);
 void   url_free(URL_t* url);