[MPlayer-cvslog] r25163 - in trunk/stream: http.c stream.c stream.h
ulion
subversion at mplayerhq.hu
Mon Nov 26 01:41:21 CET 2007
Author: ulion
Date: Mon Nov 26 01:41:21 2007
New Revision: 25163
Log:
Support stream redirection from http to mms, fix bug #927.
Modified:
trunk/stream/http.c
trunk/stream/stream.c
trunk/stream/stream.h
Modified: trunk/stream/http.c
==============================================================================
--- trunk/stream/http.c (original)
+++ trunk/stream/http.c Mon Nov 26 01:41:21 2007
@@ -721,7 +721,7 @@ static int http_streaming_start(stream_t
HTTP_header_t *http_hdr = NULL;
unsigned int i;
int fd = stream->fd;
- int res = 0;
+ int res = STREAM_UNSUPPORTED;
int redirect = 0;
int auth_retry=0;
int seekable=0;
@@ -783,6 +783,7 @@ static int http_streaming_start(stream_t
*file_format = DEMUXER_TYPE_AAC;
else
*file_format = DEMUXER_TYPE_AUDIO;
+ res = STREAM_ERROR;
goto out;
}
case 400: // Server Full
@@ -836,6 +837,14 @@ static int http_streaming_start(stream_t
next_url = http_get_field( http_hdr, "Location" );
if( next_url!=NULL ) {
stream->streaming_ctrl->url = url_redirect( &url, next_url );
+ if (!strcasecmp(url->protocol, "mms")) {
+ res = STREAM_REDIRECTED;
+ goto err_out;
+ }
+ if (strcasecmp(url->protocol, "http")) {
+ mp_msg(MSGT_NETWORK,MSGL_ERR,"Unsupported http %d redirect to %s protocol\n", http_hdr->status_code, url->protocol);
+ goto err_out;
+ }
redirect = 1;
}
break;
@@ -853,7 +862,6 @@ static int http_streaming_start(stream_t
err_out:
if (fd > 0) closesocket( fd );
fd = -1;
- res = STREAM_UNSUPPORTED;
http_free( http_hdr );
http_hdr = NULL;
out:
@@ -908,6 +916,8 @@ static int open_s1(stream_t *stream,int
if (stream->fd >= 0)
closesocket(stream->fd);
stream->fd = -1;
+ if (seekable == STREAM_REDIRECTED)
+ return seekable;
streaming_ctrl_free(stream->streaming_ctrl);
stream->streaming_ctrl = NULL;
return STREAM_UNSUPPORTED;
Modified: trunk/stream/stream.c
==============================================================================
--- trunk/stream/stream.c (original)
+++ trunk/stream/stream.c Mon Nov 26 01:41:21 2007
@@ -145,7 +145,8 @@ stream_info_t* auto_open_streams[] = {
};
stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode,
- char** options, int* file_format, int* ret) {
+ char** options, int* file_format, int* ret,
+ char** redirected_url) {
void* arg = NULL;
stream_t* s;
m_struct_t* desc = (m_struct_t*)sinfo->opts;
@@ -178,6 +179,16 @@ stream_t* open_stream_plugin(stream_info
s->flags |= mode;
*ret = sinfo->open(s,mode,arg,file_format);
if((*ret) != STREAM_OK) {
+#ifdef MPLAYER_NETWORK
+ if (*ret == STREAM_REDIRECTED && redirected_url) {
+ if (s->streaming_ctrl && s->streaming_ctrl->url
+ && s->streaming_ctrl->url->url)
+ *redirected_url = strdup(s->streaming_ctrl->url->url);
+ else
+ *redirected_url = NULL;
+ }
+ streaming_ctrl_free(s->streaming_ctrl);
+#endif
free(s->url);
free(s);
return NULL;
@@ -204,6 +215,7 @@ stream_t* open_stream_full(char* filenam
int i,j,l,r;
stream_info_t* sinfo;
stream_t* s;
+ char *redirected_url = NULL;
for(i = 0 ; auto_open_streams[i] ; i++) {
sinfo = auto_open_streams[i];
@@ -218,9 +230,17 @@ stream_t* open_stream_full(char* filenam
((strncmp(sinfo->protocols[j],filename,l) == 0) &&
(strncmp("://",filename+l,3) == 0))) {
*file_format = DEMUXER_TYPE_UNKNOWN;
- s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r);
+ s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r,
+ &redirected_url);
if(s) return s;
- if(r != STREAM_UNSUPPORTED) {
+ if(r == STREAM_REDIRECTED && redirected_url) {
+ mp_msg(MSGT_OPEN,MSGL_V, "[%s] open %s redirected to %s\n",
+ sinfo->info, filename, redirected_url);
+ s = open_stream_full(redirected_url, mode, options, file_format);
+ free(redirected_url);
+ return s;
+ }
+ else if(r != STREAM_UNSUPPORTED) {
mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_FailedToOpen,filename);
return NULL;
}
Modified: trunk/stream/stream.h
==============================================================================
--- trunk/stream/stream.h (original)
+++ trunk/stream/stream.h Mon Nov 26 01:41:21 2007
@@ -43,6 +43,7 @@
#define STREAM_SEEK (STREAM_SEEK_BW|STREAM_SEEK_FW)
//////////// Open return code
+#define STREAM_REDIRECTED -2
/// This can't open the requested protocol (used by stream wich have a
/// * protocol when they don't know the requested protocol)
#define STREAM_UNSUPPORTED -1
More information about the MPlayer-cvslog
mailing list