diff stream/http.c @ 25135:66f628d13442

Support stream redirection from http to mms, fix bug #927.
author ulion
date Mon, 26 Nov 2007 00:41:21 +0000
parents d261f5109660
children c1d17bd6683c
line wrap: on
line diff
--- a/stream/http.c	Mon Nov 26 00:28:05 2007 +0000
+++ b/stream/http.c	Mon Nov 26 00:41:21 2007 +0000
@@ -721,7 +721,7 @@
 	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 @@
 						*file_format = DEMUXER_TYPE_AAC;
 					else
 						*file_format = DEMUXER_TYPE_AUDIO;
+					res = STREAM_ERROR;
 					goto out;
 				}
 				case 400: // Server Full
@@ -836,6 +837,14 @@
 				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 @@
 err_out:
 	if (fd > 0) closesocket( fd );
 	fd = -1;
-	res = STREAM_UNSUPPORTED;
 	http_free( http_hdr );
 	http_hdr = NULL;
 out:
@@ -908,6 +916,8 @@
 		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;