From 11bcd7f01387440f87f19435f3fa41ede43f5c18 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 25 Apr 2009 13:35:04 +0200 Subject: [PATCH] curl: moved proxy settings to "input" block The old global settings "http_proxy_host", "http_proxy_port", "http_proxy_user" and "http_proxy_password" continue to work. --- NEWS | 1 + doc/mpd.conf.5 | 12 ++------- doc/mpdconf.example | 26 +++++++++--------- doc/user.xml | 30 +++++++++++++++++++++ src/input/curl_input_plugin.c | 50 ++++++++++++++++++----------------- 5 files changed, 72 insertions(+), 47 deletions(-) diff --git a/NEWS b/NEWS index 5d004070a..ba5e84f8d 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ ver 0.15 (200?/??/??) - added support for the MMS protocol - hide HTTP password in playlist - lastfm: new input plugin for last.fm radio (experimental and incomplete!) + - curl: moved proxy settings to "input" block * tags: - support the "album artist" tag - support MusicBrainz tags diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index c66937513..f6ac80f63 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -210,16 +210,8 @@ The default is 10%, a little over 1 second of CD-quality audio with the default buffer size. .TP .B http_proxy_host -Use to specify the proxy host used for HTTP connections. -.TP -.B http_proxy_port -The port that the HTTP proxy host uses. -.TP -.B http_proxy_user -If the HTTP proxy server requires authentication, this specifies the username. -.TP -.B http_proxy_password -If the HTTP proxy server requires authentication, this specifies the password. +This setting is deprecated. Use the "proxy" setting in the "curl" +input block. See MPD user manual for details. .TP .B connection_timeout If a client does not send any new data in this time period, the connection is diff --git a/doc/mpdconf.example b/doc/mpdconf.example index e231296fe..abaef1c1c 100644 --- a/doc/mpdconf.example +++ b/doc/mpdconf.example @@ -149,6 +149,19 @@ ############################################################################### +# Input ####################################################################### +# + +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + # Audio Output ################################################################ # # MPD supports various audio output types, as well as playing through multiple @@ -325,19 +338,6 @@ ############################################################################### -# HTTP Streaming Proxy ######################################################## -# -# This setting specifies the HTTP proxy to use for playing HTTP streams. These -# settings will be disabled by default. -# -#http_proxy_host "proxy.isp.com" -#http_proxy_port "8080" -#http_proxy_user "user" -#http_proxy_password "password" -# -############################################################################### - - # Resource Limitations ######################################################## # # These settings are various limitations to prevent MPD from using too many diff --git a/doc/user.xml b/doc/user.xml index 3925aa2b8..2fb27fc4d 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -303,6 +303,36 @@ cd mpd-0.14.2 Opens remote files or streams over HTTP. + + + + + + Setting + Description + + + + + + proxy + + + Sets the address of the HTTP proxy server. + + + + + proxy_user, + proxy_password + + + Configures proxy authentication. + + + + +
diff --git a/src/input/curl_input_plugin.c b/src/input/curl_input_plugin.c index f82b7aefd..4bdeda8dc 100644 --- a/src/input/curl_input_plugin.c +++ b/src/input/curl_input_plugin.c @@ -98,8 +98,12 @@ struct input_curl { /** libcurl should accept "ICY 200 OK" */ static struct curl_slist *http_200_aliases; +/** HTTP proxy settings */ +static const char *proxy, *proxy_user, *proxy_password; +static unsigned proxy_port; + static bool -input_curl_init(G_GNUC_UNUSED const struct config_param *param) +input_curl_init(const struct config_param *param) { CURLcode code = curl_global_init(CURL_GLOBAL_ALL); if (code != CURLE_OK) { @@ -110,6 +114,21 @@ input_curl_init(G_GNUC_UNUSED const struct config_param *param) http_200_aliases = curl_slist_append(http_200_aliases, "ICY 200 OK"); + proxy = config_get_block_string(param, "proxy", NULL); + proxy_port = config_get_block_unsigned(param, "proxy_port", 0); + proxy_user = config_get_block_string(param, "proxy_user", NULL); + proxy_password = config_get_block_string(param, "proxy_password", + NULL); + + if (proxy == NULL) { + /* deprecated proxy configuration */ + proxy = config_get_string(CONF_HTTP_PROXY_HOST, NULL); + proxy_port = config_get_positive(CONF_HTTP_PROXY_PORT, 0); + proxy_user = config_get_string(CONF_HTTP_PROXY_USER, NULL); + proxy_password = config_get_string(CONF_HTTP_PROXY_PASSWORD, + ""); + } + return true; } @@ -646,10 +665,6 @@ input_curl_easy_init(struct input_stream *is) struct input_curl *c = is->data; CURLcode code; CURLMcode mcode; - const char *proxy_host; - const char *proxy_port; - const char *proxy_user; - const char *proxy_pass; c->eof = false; @@ -677,28 +692,15 @@ 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 = config_get_string(CONF_HTTP_PROXY_HOST, NULL); - proxy_port = config_get_string(CONF_HTTP_PROXY_PORT, NULL); + if (proxy != NULL) + curl_easy_setopt(c->easy, CURLOPT_PROXY, proxy); - if (proxy_host != NULL) { - char *proxy_host_str; + if (proxy_port > 0) + curl_easy_setopt(c->easy, CURLOPT_PROXYPORT, (long)proxy_port); - if (proxy_port == NULL) { - proxy_host_str = g_strdup(proxy_host); - } else { - proxy_host_str = - g_strconcat(proxy_host, ":", proxy_port, NULL); - } - curl_easy_setopt(c->easy, CURLOPT_PROXY, proxy_host_str); - g_free(proxy_host_str); - } - - proxy_user = config_get_string(CONF_HTTP_PROXY_USER, NULL); - proxy_pass = config_get_string(CONF_HTTP_PROXY_PASSWORD, NULL); - - if ((proxy_user != NULL) && (proxy_pass != NULL)) { + if (proxy_user != NULL && proxy_password != NULL) { char *proxy_auth_str = - g_strconcat(proxy_user, ":", proxy_pass, NULL); + g_strconcat(proxy_user, ":", proxy_password, NULL); curl_easy_setopt(c->easy, CURLOPT_PROXYUSERPWD, proxy_auth_str); g_free(proxy_auth_str); }