changeset 31222:d739cbeb0e38

Add a referrer option to set the HTTP Referer field. Patch by chocolateboy [chocolate cpan org]
author reimar
date Sun, 30 May 2010 16:50:02 +0000
parents 456417526407
children 4031008a248c
files DOCS/man/en/mplayer.1 cfg-common-opts.h cfg-common.h stream/network.c
diffstat 4 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/DOCS/man/en/mplayer.1	Sun May 30 16:48:18 2010 +0000
+++ b/DOCS/man/en/mplayer.1	Sun May 30 16:50:02 2010 +0000
@@ -1789,6 +1789,10 @@
 .PD 1
 .
 .TP
+.B \-referrer <string> (network only)
+Specify a referrer path or URL for HTTP requests.
+.
+.TP
 .B \-rtsp\-port
 Used with 'rtsp://' URLs to force the client's port number.
 This option may be useful if you are behind a router and want to forward
--- a/cfg-common-opts.h	Sun May 30 16:48:18 2010 +0000
+++ b/cfg-common-opts.h	Sun May 30 16:50:02 2010 +0000
@@ -78,6 +78,7 @@
     {"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, NULL},
     {"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 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},
     {"nocookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL},
     {"cookies-file", &cookies_file, CONF_TYPE_STRING, 0, 0, 0, NULL},
--- a/cfg-common.h	Sun May 30 16:48:18 2010 +0000
+++ b/cfg-common.h	Sun May 30 16:50:02 2010 +0000
@@ -47,6 +47,7 @@
 extern char *network_password;
 extern int   network_bandwidth;
 extern char *network_useragent;
+extern char *network_referrer;
 extern int   network_cookies_enabled;
 extern char *cookies_file;
 
--- a/stream/network.c	Sun May 30 16:48:18 2010 +0000
+++ b/stream/network.c	Sun May 30 16:50:02 2010 +0000
@@ -62,6 +62,7 @@
 int   network_bandwidth=0;
 int   network_cookies_enabled = 0;
 char *network_useragent=NULL;
+char *network_referrer=NULL;
 
 /* IPv6 options */
 int   network_ipv4_only_proxy = 0;
@@ -226,6 +227,23 @@
 	else
 	    http_set_field( http_hdr, "User-Agent: MPlayer/"VERSION);
 
+	if (network_referrer) {
+	    char *referrer = NULL;
+	    size_t len = strlen(network_referrer) + 10;
+
+	    // Check len to ensure we don't do something really bad in case of an overflow
+	    if (len > 10)
+		referrer = malloc(len);
+
+	    if (referrer == NULL) {
+		mp_msg(MSGT_NETWORK, MSGL_FATAL, MSGTR_MemAllocFailed);
+	    } else {
+		snprintf(referrer, len, "Referer: %s", network_referrer);
+		http_set_field(http_hdr, referrer);
+		free(referrer);
+	    }
+	}
+
 	if( strcasecmp(url->protocol, "noicyx") )
 	    http_set_field(http_hdr, "Icy-MetaData: 1");