From 944be9d24bbf748ce65feda44e8df75fd1950bc6 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 10 Jan 2013 14:11:26 +0100 Subject: Fix lots of bugs in mp_http URL handling Many instances of "http" were not changed to "mp_http", which made many aspects of the mp_http protocol handler broken. --- core/quvi.c | 14 ++++++++++++-- stream/network.c | 11 +++++++---- stream/url.c | 6 +++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/core/quvi.c b/core/quvi.c index 697b3736d4..e300e2dd03 100644 --- a/core/quvi.c +++ b/core/quvi.c @@ -26,12 +26,18 @@ struct mp_resolve_result *mp_resolve_quvi(const char *url, struct MPOpts *opts) { QUVIcode rc; + bool mp_url = false; quvi_t q; rc = quvi_init(&q); if (rc != QUVI_OK) return NULL; + if (!strncmp(url, "mp_", 3)) { + url += 3; + mp_url = true; + } + // Don't try to use quvi on an URL that's not directly supported, since // quvi will do a network access anyway in order to check for HTTP // redirections etc. @@ -65,8 +71,12 @@ struct mp_resolve_result *mp_resolve_quvi(const char *url, struct MPOpts *opts) char *val; - if (quvi_getprop(m, QUVIPROP_MEDIAURL, &val) == QUVI_OK) - result->url = talloc_strdup(result, val); + if (quvi_getprop(m, QUVIPROP_MEDIAURL, &val) == QUVI_OK) { + if (mp_url) + result->url = talloc_asprintf(result, "mp_%s", val); + else + result->url = talloc_strdup(result, val); + } if (quvi_getprop(m, QUVIPROP_PAGETITLE, &val) == QUVI_OK) result->title = talloc_strdup(result, val); diff --git a/stream/network.c b/stream/network.c index 56e5a1b5e1..d48444faa6 100644 --- a/stream/network.c +++ b/stream/network.c @@ -110,12 +110,12 @@ check4proxies( const URL_t *url ) { URL_t *url_out = NULL; if( url==NULL ) return NULL; url_out = url_new( url->url ); - if( !strcasecmp(url->protocol, "http_proxy") ) { + if( !strcasecmp(url->protocol, "mp_http_proxy") ) { mp_msg(MSGT_NETWORK,MSGL_V,"Using HTTP proxy: http://%s:%d\n", url->hostname, url->port ); return url_out; } // Check if the http_proxy environment variable is set. - if( !strcasecmp(url->protocol, "http") ) { + if( !strcasecmp(url->protocol, "mp_http") ) { char *proxy; proxy = getenv("http_proxy"); if( proxy!=NULL ) { @@ -180,9 +180,12 @@ http_send_request( URL_t *url, int64_t pos ) { http_hdr = http_new_header(); - if( !strcasecmp(url->protocol, "http_proxy") ) { + if( !strcasecmp(url->protocol, "mp_http_proxy") ) { proxy = 1; - server_url = url_new( (url->file)+1 ); + if (!strncasecmp(url->file, "/mp_", 3)) + server_url = url_new( (url->file)+4 ); + else + server_url = url_new( (url->file)+1 ); if (!server_url) { mp_msg(MSGT_NETWORK, MSGL_ERR, "Invalid URL '%s' to proxify\n", url->file+1); goto err_out; diff --git a/stream/url.c b/stream/url.c index 7919a356f1..70d2db4ea5 100644 --- a/stream/url.c +++ b/stream/url.c @@ -61,7 +61,7 @@ end: } static int is_proxy(const URL_t *url) { - return !strcasecmp(url->protocol, "http_proxy") && url->file && strstr(url->file, "://"); + return !strcasecmp(url->protocol, "mp_http_proxy") && url->file && strstr(url->file, "://"); } int url_is_protocol(const URL_t *url, const char *proto) { @@ -137,12 +137,12 @@ static char *get_noauth_url(const URL_t *url) char *get_http_proxy_url(const URL_t *proxy, const char *host_url) { if (proxy->username) - return mp_asprintf("http_proxy://%s:%s@%s:%d/%s", + return mp_asprintf("mp_http_proxy://%s:%s@%s:%d/%s", proxy->username, proxy->password ? proxy->password : "", proxy->hostname, proxy->port, host_url); else - return mp_asprintf("http_proxy://%s:%d/%s", + return mp_asprintf("mp_http_proxy://%s:%d/%s", proxy->hostname, proxy->port, host_url); } -- cgit v1.2.3