summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2011-03-17 08:58:49 +0000
committerUoti Urpala <uau@mplayer2.org>2011-04-13 03:17:05 +0300
commitc99d8fc8981d13203c2bbf9c12b7720cd8632ae1 (patch)
tree4eedca60b1f3814f8cd958d8e6ce317e8adfce02
parent4b5a86c78e67d0412c65f8d8b0830e8e450cd2ed (diff)
downloadmpv-c99d8fc8981d13203c2bbf9c12b7720cd8632ae1.tar.bz2
mpv-c99d8fc8981d13203c2bbf9c12b7720cd8632ae1.tar.xz
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
-rw-r--r--DOCS/man/en/mplayer.129
-rw-r--r--cfg-common.h1
-rw-r--r--stream/network.c7
-rw-r--r--stream/network.h2
4 files changed, 39 insertions, 0 deletions
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 <field1,field2>
+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);