diff options
author | Joe Milbourn <joe.milbourn+mpd@gmail.com> | 2009-01-13 22:57:05 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-13 22:57:05 +0100 |
commit | 45598d50e30df92a9e99c2471be00f7c8581fe91 (patch) | |
tree | 475359e71fd2e2ac8538defeb69cb445ceb1205b /src/input_curl.c | |
parent | 18cb34700e1e4a960baa12a407d2148639996db9 (diff) | |
download | mpd-45598d50e30df92a9e99c2471be00f7c8581fe91.tar.gz mpd-45598d50e30df92a9e99c2471be00f7c8581fe91.tar.xz mpd-45598d50e30df92a9e99c2471be00f7c8581fe91.zip |
input_curl: honour http_proxy_* config directives
If http_proxy_{host, port, user, password} are provided in mpd.conf
they are not passed on to libcurl. As a result mpd cannot stream from
behind an http proxy.
The attached patch `http_proxy.patch` makes the relevant calls to
curl_easy_setopt(...) for all proxy configuration parameters, but is
only tested for host and port.
Diffstat (limited to 'src/input_curl.c')
-rw-r--r-- | src/input_curl.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/input_curl.c b/src/input_curl.c index d9655fc62..cb2127a4a 100644 --- a/src/input_curl.c +++ b/src/input_curl.c @@ -18,6 +18,7 @@ #include "input_curl.h" #include "input_stream.h" +#include "conf.h" #include "config.h" #include "tag.h" #include "icy_metadata.h" @@ -619,6 +620,10 @@ input_curl_easy_init(struct input_stream *is) struct input_curl *c = is->data; CURLcode code; CURLMcode mcode; + ConfigParam *proxy_host; + ConfigParam *proxy_port; + ConfigParam *proxy_user; + ConfigParam *proxy_pass; c->eof = false; @@ -646,6 +651,31 @@ input_curl_easy_init(struct input_stream *is) curl_easy_setopt(c->easy, CURLOPT_FAILONERROR, true); curl_easy_setopt(c->easy, CURLOPT_ERRORBUFFER, c->error); + proxy_host = getConfigParam(CONF_HTTP_PROXY_HOST); + proxy_port = getConfigParam(CONF_HTTP_PROXY_PORT); + proxy_user = getConfigParam(CONF_HTTP_PROXY_USER); + proxy_pass = getConfigParam(CONF_HTTP_PROXY_PASSWORD); + + if (proxy_host != NULL) { + char *proxy_host_str; + + if (proxy_port == NULL) { + proxy_host_str = g_strdup(proxy_host->value); + } else { + proxy_host_str = + g_strconcat(proxy_host->value, ":", proxy_port->value, NULL); + } + curl_easy_setopt(c->easy, CURLOPT_PROXY, proxy_host_str); + g_free(proxy_host_str); + } + + if ((proxy_user != NULL) && (proxy_pass != NULL)) { + char *proxy_auth_str = + g_strconcat(proxy_user->value, ":", proxy_pass->value, NULL); + curl_easy_setopt(c->easy, CURLOPT_PROXYUSERPWD, proxy_auth_str); + g_free(proxy_auth_str); + } + code = curl_easy_setopt(c->easy, CURLOPT_URL, c->url); if (code != CURLE_OK) return false; |