summaryrefslogtreecommitdiffstats
path: root/libmpdemux/asf_streaming.c
diff options
context:
space:
mode:
authorbertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-12 21:08:12 +0000
committerbertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-12 21:08:12 +0000
commit3b008ce8cf38bcf6be25858e6acbfa81cd5bf7e2 (patch)
treedca7b50c5df335d3dfe1e314fa85666ba6cceb54 /libmpdemux/asf_streaming.c
parent63172938ba7a8fbfc4c2f00d6faa75fc14e761a6 (diff)
downloadmpv-3b008ce8cf38bcf6be25858e6acbfa81cd5bf7e2.tar.bz2
mpv-3b008ce8cf38bcf6be25858e6acbfa81cd5bf7e2.tar.xz
Added proxy support.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4122 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/asf_streaming.c')
-rw-r--r--libmpdemux/asf_streaming.c53
1 files changed, 36 insertions, 17 deletions
diff --git a/libmpdemux/asf_streaming.c b/libmpdemux/asf_streaming.c
index a7773bff18..b000bd1e4a 100644
--- a/libmpdemux/asf_streaming.c
+++ b/libmpdemux/asf_streaming.c
@@ -61,7 +61,10 @@ asf_streaming_start( stream_t *stream ) {
if( fd!=-1 ) return fd;
printf(" ===> ASF/TCP failed\n");
}
- if( !strncasecmp( proto_s, "http", 4) || !strncasecmp( proto_s, "mms", 3) ) {
+ if( !strncasecmp( proto_s, "http", 4) ||
+ !strncasecmp( proto_s, "mms", 3) ||
+ !strncasecmp( proto_s, "proxy", 5)
+ ) {
printf("Trying ASF/HTTP...\n");
fd = asf_http_streaming_start( stream );
if( fd!=-1 ) return fd;
@@ -373,8 +376,9 @@ asf_http_streaming_type(char *content_type, char *features) {
HTTP_header_t *
asf_http_request(streaming_ctrl_t *streaming_ctrl) {
HTTP_header_t *http_hdr;
- URL_t *url = streaming_ctrl->url;
- asf_http_streaming_ctrl_t *asf_http_ctrl = (asf_http_streaming_ctrl_t*)streaming_ctrl->data;
+ URL_t *url = NULL;
+ URL_t *server_url = NULL;
+ asf_http_streaming_ctrl_t *asf_http_ctrl;
char str[250];
char *ptr;
int i,as = -1,vs = -1;
@@ -382,12 +386,33 @@ asf_http_request(streaming_ctrl_t *streaming_ctrl) {
int offset_hi=0, offset_lo=0, length=0;
int asf_nb_stream=0;
+ // Sanity check
+ if( streaming_ctrl==NULL ) return NULL;
+ url = streaming_ctrl->url;
+ asf_http_ctrl = (asf_http_streaming_ctrl_t*)streaming_ctrl->data;
+ if( url==NULL || asf_http_ctrl==NULL ) return NULL;
+
// Common header for all requests.
http_hdr = http_new_header();
- http_set_uri( http_hdr, url->file );
http_set_field( http_hdr, "Accept: */*" );
http_set_field( http_hdr, "User-Agent: NSPlayer/4.1.0.3856" );
- sprintf( str, "Host: %s:%d", url->hostname, url->port );
+
+ // Check if we are using a proxy
+ if( !strcasecmp( url->protocol, "proxy" ) ) {
+ server_url = url_new( (url->file)+1 );
+ if( server_url==NULL ) {
+ printf("Invalid proxy URL\n");
+ http_free( http_hdr );
+ return NULL;
+ }
+ http_set_uri( http_hdr, server_url->url );
+ sprintf( str, "Host: %s:%d", server_url->hostname, server_url->port );
+ url_free( server_url );
+ } else {
+ http_set_uri( http_hdr, url->file );
+ sprintf( str, "Host: %s:%d", url->hostname, url->port );
+ }
+
http_set_field( http_hdr, str );
http_set_field( http_hdr, "Pragma: xClientGUID={c77e7400-738a-11d2-9add-0020af0a3278}" );
sprintf(str,
@@ -509,16 +534,6 @@ asf_http_parse_response( HTTP_header_t *http_hdr ) {
return asf_http_streaming_type( content_type, features );
}
-URL_t *
-asf_http_ASX_redirect( HTTP_header_t *http_hdr ) {
- URL_t *url_redirect=NULL;
- printf("=========>> ASX parser not yet implemented <<==========\n");
-
- printf("ASX=[%s]\n", http_hdr->body );
-
- return url_redirect;
-}
-
int
asf_http_streaming_start( stream_t *stream ) {
HTTP_header_t *http_hdr=NULL;
@@ -546,7 +561,11 @@ asf_http_streaming_start( stream_t *stream ) {
done = 1;
if( fd>0 ) close( fd );
- if( url->port==0 ) url->port = 80;
+ if( !strcasecmp( url->protocol, "proxy" ) ) {
+ if( url->port==0 ) url->port = 8080;
+ } else {
+ if( url->port==0 ) url->port = 80;
+ }
fd = connect2Server( url->hostname, url->port );
if( fd<0 ) return -1;
@@ -566,7 +585,7 @@ asf_http_streaming_start( stream_t *stream ) {
http_hdr = http_new_header();
do {
i = read( fd, buffer, BUFFER_SIZE );
-printf("read: %d\n", i );
+//printf("read: %d\n", i );
if( i<0 ) {
perror("read");
http_free( http_hdr );