summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-14 20:45:30 +0000
committerbertrand <bertrand@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-14 20:45:30 +0000
commit3ea29912ef6367871359b6d2d66f23a1fc4e9c5c (patch)
tree01f4d0f63b788c4d59115c86736c23b15c0831b9
parent5b38c5c2515efe76b35259b817bcbb9deebf09bf (diff)
downloadmpv-3ea29912ef6367871359b6d2d66f23a1fc4e9c5c.tar.bz2
mpv-3ea29912ef6367871359b6d2d66f23a1fc4e9c5c.tar.xz
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. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3495 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--libmpdemux/asf_streaming.c14
-rw-r--r--libmpdemux/network.c15
-rw-r--r--libmpdemux/url.c5
3 files changed, 26 insertions, 8 deletions
diff --git a/libmpdemux/asf_streaming.c b/libmpdemux/asf_streaming.c
index 37ca079b16..47d8e2d337 100644
--- a/libmpdemux/asf_streaming.c
+++ b/libmpdemux/asf_streaming.c
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include "config.h"
@@ -468,13 +469,16 @@ asf_http_streaming_start( stream_t *stream ) {
//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 );
diff --git a/libmpdemux/network.c b/libmpdemux/network.c
index 53ce3c94d4..91d920ff57 100644
--- a/libmpdemux/network.c
+++ b/libmpdemux/network.c
@@ -137,6 +137,17 @@ connect2Server(char *host, int port) {
// 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 @@ printf("read %d bytes from buffer\n", len );
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 );
diff --git a/libmpdemux/url.c b/libmpdemux/url.c
index 0ace717d90..410664368c 100644
--- a/libmpdemux/url.c
+++ b/libmpdemux/url.c
@@ -17,7 +17,7 @@ URL_t*
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 @@ url_new(char* url) {
// 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