From c99d8fc8981d13203c2bbf9c12b7720cd8632ae1 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Thu, 17 Mar 2011 08:58:49 +0000 Subject: [PATCH] stream: http: Allow setting custom http header Patch by Nikolay Nikolaev, nicknickolaev yahoo com git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33082 b3059339-0415-0410-9bf9-f77b7e298cf2 --- DOCS/man/en/mplayer.1 | 29 +++++++++++++++++++++++++++++ cfg-common.h | 1 + stream/network.c | 7 +++++++ stream/network.h | 2 ++ 4 files changed, 39 insertions(+) diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1 index 206a46b4fa..53a27b51e4 100644 --- a/DOCS/man/en/mplayer.1 +++ b/DOCS/man/en/mplayer.1 @@ -1485,6 +1485,35 @@ Can be slow especially when seeking backwards since it has to rewind to the beginning to find an exact frame position. . .TP +.B \-http-header-fields +Set custom HTTP fields when accessing HTTP stream. +.sp 1 +.I EXAMPLE: +.PD 0 +.RSs +.IPs +mplayer \-http\-header\-fields 'Field1: value1','Field2: value2' http://localhost:1234 +.br +Will generate HTTP request: +.RSss +.br +GET / HTTP/1.0 +.br +Host: localhost:1234 +.br +User-Agent: MPlayer +.br +Icy-MetaData: 1 +.br +Field1: value1 +.br +Field2: value2 +.br +Connection: close +.REss +.RE +. +.TP .B \-idx (also see \-forceidx) Rebuilds index of files if no index was found, allowing seeking. Useful with broken/\:incomplete downloads, or badly created files. diff --git a/cfg-common.h b/cfg-common.h index e56d87b3de..1b88e3bf7e 100644 --- a/cfg-common.h +++ b/cfg-common.h @@ -425,6 +425,7 @@ const m_option_t common_opts[] = { {"user", &network_username, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL}, + {"http-header-fields", &network_http_header_fields, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"user-agent", &network_useragent, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"referrer", &network_referrer, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"cookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL}, diff --git a/stream/network.c b/stream/network.c index c6776ac29a..b722023061 100644 --- a/stream/network.c +++ b/stream/network.c @@ -58,6 +58,7 @@ int network_bandwidth=0; int network_cookies_enabled = 0; char *network_useragent=NULL; char *network_referrer=NULL; +char **network_http_header_fields=NULL; /* IPv6 options */ int network_ipv4_only_proxy = 0; @@ -250,6 +251,12 @@ http_send_request( URL_t *url, off_t pos ) { if (network_cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url ); + if (network_http_header_fields) { + int i=0; + while (network_http_header_fields[i]) + http_set_field(http_hdr, network_http_header_fields[i++]); + } + http_set_field( http_hdr, "Connection: close"); if (proxy) http_add_basic_proxy_authentication(http_hdr, url->username, url->password); diff --git a/stream/network.h b/stream/network.h index 1c395acc49..33b668c516 100644 --- a/stream/network.h +++ b/stream/network.h @@ -61,6 +61,8 @@ typedef struct { extern const mime_struct_t mime_type_table[]; +extern char **network_http_header_fields; + streaming_ctrl_t *streaming_ctrl_new(void); int streaming_bufferize( streaming_ctrl_t *streaming_ctrl, char *buffer, int size);