diff --git a/amf.c b/amf.c index 6fae3ba..b57a474 100644 --- a/amf.c +++ b/amf.c @@ -11,12 +11,12 @@ char data1[1536]; char data2[1536]; - recLen = recv(fd,&cmd,1,0); + recLen = sReadSocket(fd,&cmd,1); if (cmd != 0x03) { return(-1); } - recLen = recv(fd,&data1,1536,0); + recLen = sReadSocket(fd,&data1,1536); for (i = 0;i < 1536;i++) { data2[i] = (char)i; @@ -33,8 +33,8 @@ printf("Error Sending Hand1\n"); return(-1); } - if (recv(fd,&data1,1536,MSG_WAITALL) != 1536) { - printf("Error getting handshake\n"); + if (sReadSocket(fd,&data1,1536) != 1536) { + printf("Error: getting handshake\n"); return(-1); } printf("Got all data!\n"); diff --git a/rtmp.h b/rtmp.h index 2139a1e..3a2cd2a 100644 --- a/rtmp.h +++ b/rtmp.h @@ -25,10 +25,9 @@ int socketFD; } myConnections_t; -extern int listenerFD; - int amfDoAccept(int); int amfDoHandshake(int); int sStartListener(); void sListenerThread(int); int sAddConnection(int); +ssize_t sReadSocket(int socketFD,void *buffer,size_t length); diff --git a/socket.c b/socket.c index b167aac..01cd66f 100644 --- a/socket.c +++ b/socket.c @@ -18,7 +18,6 @@ #include "rtmp.h" -int listenerFD = 0x0; pthread_t listenerThread; pthread_mutex_t sConnectionsMutex; @@ -26,6 +25,7 @@ int sStartListener() { int optVal = 0x1; + int listenerFD = 0x0; struct sockaddr_in myAddr; // my address information @@ -49,20 +49,21 @@ exit(1); } + if (listen(listenerFD, BACKLOG) == -1) { perror("listen"); exit(1); } - pthread_mutex_init(&sConnectionsMutex,NULL); pthread_create(&listenerThread,NULL,(void *)sListenerThread,(void *)listenerFD); return(0x0); } -ssize_t sReadSocket(int socketFD,void *buffer,size_t lenght) { +ssize_t sReadSocket(int socketFD,void *buffer,size_t length) { ssize_t recLen = 0x0; + ssize_t recLen2 = 0x0; fd_set readset; FD_ZERO(&readset); @@ -72,7 +73,16 @@ if (FD_ISSET(socketFD,&readset)) break; } - //recv(socketFD,AMFS[amfID].body + (AMFS[amfID].bodyCount - 1),128,0); + recLen = read(socketFD,buffer,length); + if (recLen < length) { + while (select(socketFD + 1,&readset,0x0,0x0,0x0)) { + if (FD_ISSET(socketFD,&readset)) + break; + } + recLen2 = read(socketFD,buffer + (recLen -1),(length - recLen)); + recLen += recLen2; + } + return(recLen); } @@ -88,6 +98,7 @@ perror("accept"); continue; } + fcntl(newFD, F_SETFL, fcntl(newFD, F_GETFL, 0) | O_NONBLOCK); printf("server: got connection from %s\n",inet_ntoa(remoteAddr.sin_addr)); @@ -95,8 +106,7 @@ printf("Error: Bad Handshake\n"); close(newFD); } - printf("Boobies"); - fcntl(newFD, F_SETFL, fcntl(newFD, F_GETFL, 0) | O_NONBLOCK); + printf("A"); sAddConnection(newFD); } } @@ -104,6 +114,8 @@ int sAddConnection(int socketFD) { myConnections_t *tmpConnection = 0x0; + printf("Adding Socket"); + pthread_mutex_lock(&sConnectionsMutex); if (connections == 0x0) {