changeset 3494:fb9de639ed30

Applied the patch from Alban Bedel <albeu@free.fr>. He added some errors checking on network code. Added a check on the port number parsing in the url.
author bertrand
date Fri, 14 Dec 2001 20:45:30 +0000
parents a4721884eaf5
children cc1c879533ee
files libmpdemux/asf_streaming.c libmpdemux/network.c libmpdemux/url.c
diffstat 3 files changed, 26 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/asf_streaming.c	Fri Dec 14 20:14:59 2001 +0000
+++ b/libmpdemux/asf_streaming.c	Fri Dec 14 20:45:30 2001 +0000
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <errno.h>
 
 #include "config.h"
 
@@ -468,13 +469,16 @@
 		//http_hdr = asf_http_request( url );
 		http_hdr = asf_http_request( stream->streaming_ctrl );
 printf("Request [%s]\n", http_hdr->buffer );
-		write( fd, http_hdr->buffer, http_hdr->buffer_size );
-printf("1\n");
+                                for(i=0; i <  http_hdr->buffer_size ; ) {
+			int r = write( fd, http_hdr->buffer+i, http_hdr->buffer_size-i );
+			if(r <0) {
+			  printf("Socket write error : %s\n",strerror(errno));
+			  return -1;
+			}
+			i += r;
+		}       
 	//	http_free( http_hdr );
-printf("2\n");
-
 		http_hdr = http_new_header();
-printf("3\n");
 		do {
 			i = read( fd, buffer, BUFFER_SIZE );
 printf("read: %d\n", i );
--- a/libmpdemux/network.c	Fri Dec 14 20:14:59 2001 +0000
+++ b/libmpdemux/network.c	Fri Dec 14 20:45:30 2001 +0000
@@ -137,6 +137,17 @@
 
 	// Turn back the socket as blocking
 	fcntl( socket_server_fd, F_SETFL, fcntl(socket_server_fd, F_GETFL) & ~O_NONBLOCK );
+	// Check if there were any error
+	err_len = sizeof(int);
+	ret =  getsockopt(socket_server_fd,SOL_SOCKET,SO_ERROR,&err,&err_len);
+	if(ret < 0) {
+		printf("getsockopt failed : %s\n",strerror(errno));
+		return -1;
+	}
+	if(err > 0) {
+		printf("Connect error : %s\n",strerror(err));
+		return -1;
+	}
 	return socket_server_fd;
 }
 
@@ -356,8 +367,8 @@
 	if( len<size ) {
 		int ret;
 		ret = read( fd, buffer+len, size-len );
-		if( ret==0 ) {
-			printf("nop_streaming_read read 0 -ie- EOF\n");
+		if( ret<0 ) {
+			printf("nop_streaming_read error : %s\n",strerror(errno));
 		}
 		len += ret;
 //printf("read %d bytes from network\n", len );
--- a/libmpdemux/url.c	Fri Dec 14 20:14:59 2001 +0000
+++ b/libmpdemux/url.c	Fri Dec 14 20:45:30 2001 +0000
@@ -17,7 +17,7 @@
 url_new(char* url) {
 	int pos1, pos2;
 	URL_t* Curl;
-	char *ptr1, *ptr2;
+	char *ptr1, *ptr2, *ptr3;
 
 	// Create the URL container
 	Curl = (URL_t*)malloc(sizeof(URL_t));
@@ -49,6 +49,9 @@
 
 	// look if the port is given
 	ptr2 = strstr(ptr1+3, ":");
+	// If the : is after the first / it isn't the port
+	ptr3 = strstr(ptr1+3, "/");
+	if(ptr3 && ptr3 - ptr2 < 0) ptr2 = NULL;
 	if( ptr2==NULL ) {
 		// No port is given
 		// Look if a path is given