[Mplayer-cvslog] CVS: main asf_streaming.c,1.2,1.3

Bertrand Baudet bertrand at users.sourceforge.net
Tue May 29 19:09:21 CEST 2001


Update of /cvsroot/mplayer/main
In directory usw-pr-cvs1:/tmp/cvs-serv5704

Modified Files:
	asf_streaming.c 
Log Message:
Continue implementation.


Index: asf_streaming.c
===================================================================
RCS file: /cvsroot/mplayer/main/asf_streaming.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** asf_streaming.c	2001/05/25 14:01:21	1.2
--- asf_streaming.c	2001/05/29 17:09:19	1.3
***************
*** 6,10 ****
--- 6,12 ----
  #include "url.h"
  #include "http.h"
+ #include "network.h"
  
+ #define BUFFER_SIZE	2048
  
  const char *temp_response = 
***************
*** 20,27 ****
  */	"\r\n";
  
! static ASF_StreamType_e stream_type = ASF_Unknown_e;
  
- 
- 
  void 
  asf_streaming(char *data, int length) {
--- 22,27 ----
  */	"\r\n";
  
! static ASF_StreamType_e streaming_type = ASF_Unknown_e;
  
  void 
  asf_streaming(char *data, int length) {
***************
*** 56,69 ****
  }
  
! void 
! asf_stream_type(char *content_type, char *features) {
! 	stream_type = ASF_Unknown_e;
  	if( !strcasecmp(content_type, "application/octet-stream") ) {
! 		if( strstr(features, "broadcast")) {
  			printf("=====> Live stream\n");
! 			stream_type = ASF_Live_e;
  		} else {
  			printf("=====> Prerecorded\n");
! 			stream_type = ASF_Prerecorded_e;
  		}
  	} else {
--- 56,72 ----
  }
  
! int
! asf_http_streaming_type(char *content_type, char *features) {
! 	if( content_type==NULL ) return ASF_Unknown_e;
  	if( !strcasecmp(content_type, "application/octet-stream") ) {
! 		if( features==NULL ) {
! 			printf("=====> Prerecorded\n");
! 			return ASF_Prerecorded_e;
! 		} else if( strstr(features, "broadcast")) {
  			printf("=====> Live stream\n");
! 			return ASF_Live_e;
  		} else {
  			printf("=====> Prerecorded\n");
! 			return ASF_Prerecorded_e;
  		}
  	} else {
***************
*** 76,97 ****
  			(!strcasecmp(content_type, "video/x-ms-wma")) ) {
  			printf("=====> Redirector\n");
! 			stream_type = ASF_Redirector_e;
  		} else {
  			printf("=====> unknown content-type: %s\n", content_type );
! 			stream_type = ASF_Unknown_e;
  		}
  	}
  }
  
  //void asf_http_request(stream_t *stream, URL_t *url) {
! void 
  asf_http_request(URL_t *url) {
  	HTTP_header_t *http_hdr;
  	char str[250];
  	char *request;
- //	int size;
  
  	int offset_hi=0, offset_lo=0, req_nb=1, length=0;
! 	int asf_nb_stream=1; 
  
  	// Common header for all requests.
--- 79,100 ----
  			(!strcasecmp(content_type, "video/x-ms-wma")) ) {
  			printf("=====> Redirector\n");
! 			return ASF_Redirector_e;
  		} else {
  			printf("=====> unknown content-type: %s\n", content_type );
! 			return ASF_Unknown_e;
  		}
  	}
+ 	return ASF_Unknown_e;
  }
  
  //void asf_http_request(stream_t *stream, URL_t *url) {
! HTTP_header_t *
  asf_http_request(URL_t *url) {
  	HTTP_header_t *http_hdr;
  	char str[250];
  	char *request;
  
  	int offset_hi=0, offset_lo=0, req_nb=1, length=0;
! 	int asf_nb_stream=1; 	// FIXME
  
  	// Common header for all requests.
***************
*** 108,112 ****
  	http_set_field( http_hdr, str );
  
! 	switch( stream_type ) {
  		case ASF_Live_e:
  		case ASF_Prerecorded_e:
--- 111,115 ----
  	http_set_field( http_hdr, str );
  
! 	switch( streaming_type ) {
  		case ASF_Live_e:
  		case ASF_Prerecorded_e:
***************
*** 114,118 ****
  			sprintf( str, "Pragma: stream-switch-count=%d", asf_nb_stream );
  			http_set_field( http_hdr, str );
! 			http_set_field( http_hdr, "Pragma: stream-switch-entry=ffff:1:0" );
  			break;
  		case ASF_Redirector_e:
--- 117,121 ----
  			sprintf( str, "Pragma: stream-switch-count=%d", asf_nb_stream );
  			http_set_field( http_hdr, str );
! 			http_set_field( http_hdr, "Pragma: stream-switch-entry=ffff:1:0" );	// FIXME
  			break;
  		case ASF_Redirector_e:
***************
*** 126,144 ****
  
  	http_set_field( http_hdr, "Connection: Close" );
! 	request = http_get_request( http_hdr );
! 
! printf("%s\n", request );
  
  }
  
  int
! asf_http_parse_response( char *response, int length ) {
! 	HTTP_header_t *http_hdr;
  	char *content_type, *pragma;
  	char features[64] = "\0";
  	int len;
! 
! 	http_hdr = http_new_response( response, length );
! 	
  	if( http_hdr->status_code!=200 ) {
  		printf("Server return %d:%s\n", http_hdr->status_code, http_hdr->reason_phrase);
--- 129,146 ----
  
  	http_set_field( http_hdr, "Connection: Close" );
! 	http_build_request( http_hdr );
  
+ 	return http_hdr;
  }
  
  int
! asf_http_parse_response( HTTP_header_t *http_hdr ) {
  	char *content_type, *pragma;
  	char features[64] = "\0";
  	int len;
! 	if( http_response_parse(http_hdr)<0 ) {
! 		printf("Failed to parse HTTP response\n");
! 		return -1;
! 	}
  	if( http_hdr->status_code!=200 ) {
  		printf("Server return %d:%s\n", http_hdr->status_code, http_hdr->reason_phrase);
***************
*** 149,153 ****
  
  	pragma = http_get_field( http_hdr, "Pragma");
! 	do {
  		char *comma_ptr=NULL;
  		char *end;
--- 151,155 ----
  
  	pragma = http_get_field( http_hdr, "Pragma");
! 	while( pragma!=NULL ) {
  		char *comma_ptr=NULL;
  		char *end;
***************
*** 173,190 ****
  		} while( comma_ptr!=NULL );
  		pragma = http_get_next_field( http_hdr );
! 	} while( pragma!=NULL );
  
! 	asf_stream_type( content_type, features );
  
  	return 0;
  }
  
! #ifdef STREAMING_TEST
! int main() {
! 	URL_t *url = set_url("http://toto.com:12/coucou");
! 	asf_http_request( url );
! 	asf_http_parse_response( temp_response, strlen(temp_response) );
! 	asf_http_request( url );
! 	return 0;
  }
! #endif
--- 175,264 ----
  		} while( comma_ptr!=NULL );
  		pragma = http_get_next_field( http_hdr );
! 	}
  
! 	streaming_type = asf_http_streaming_type( content_type, features );
  
+ 	if( http_hdr->body_size>0 ) {
+ 		asf_streaming( http_hdr->body, http_hdr->body_size );
+ 	}
+ 
  	return 0;
  }
  
! 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( URL_t **url_ref ) {
! 	HTTP_header_t *http_hdr=NULL;
! 	URL_t *url_next=NULL;
! 	URL_t *url=*url_ref;
! 	char buffer[BUFFER_SIZE];
! 	int i;
! 	int fd=-1;
! 	int done=1;
! 	do {
! 		if( fd>0 ) close( fd );
! 		fd = connect2Server( url->hostname, url->port );
! 		if( fd<0 ) return -1;
! 
! 		http_hdr = asf_http_request( url );
! //printf("[%s]\n", http_hdr->buffer );
! 		write( fd, http_hdr->buffer, http_hdr->buffer_size );
! 		http_free( http_hdr );
! 
! 		http_hdr = http_new_header();
! 		do {
! 			i = read( fd, buffer, BUFFER_SIZE );
! printf("read: %d\n", i );
! 			http_response_append( http_hdr, buffer, i );
! 		} while( !http_is_header_entired( http_hdr ) );
! //http_hdr->buffer[http_hdr->buffer_len]='\0';
! //printf("[%s]\n", http_hdr->buffer );
! 		if( asf_http_parse_response(http_hdr)<0 ) {
! 			printf("Failed to parse header\n");
! 			return -1;
! 		}
! 
! 		switch(streaming_type) {
! 			case ASF_Live_e:
! 			case ASF_Prerecorded_e:
! 				if( http_hdr->body_size==0 ) {
! 					i = read( fd, buffer, BUFFER_SIZE );
! printf("read: %d\n", i );
! 					asf_streaming( buffer, i );
! 				}
! 				break;
! 			case ASF_Redirector_e:
! 				url_next = asf_http_ASX_redirect( http_hdr );
! 				if( url_next==NULL ) {
! 					printf("Failed to parse ASX file\n");
! 					close(fd);
! 					return -1;
! 				}
! 				if( url_next->port==0 ) url_next->port=80;
! 				url_free( url );
! 				url = url_next;
! 				*url_ref = url_next;
! 				url_next = NULL;
! 				break;
! 			case ASF_Unknown_e:
! 			default:
! 				printf("Unknown ASF streaming type\n");
! 				close(fd);
! 				return -1;
! 		}
! 
! 		// Check if we got a redirect.	
! 	} while(!done);
! 
! 	return fd;
! }
! 


_______________________________________________
Mplayer-cvslog mailing list
Mplayer-cvslog at lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog



More information about the MPlayer-cvslog mailing list