From be1b8068a4e93b774b05f0704fb81c4d4c1afdbf Mon Sep 17 00:00:00 2001 From: Thulinma Date: Wed, 17 Nov 2010 01:05:36 +0100 Subject: [PATCH 1/2] Werkende RTMP connector! WHEEEE! Also, RTMPf weggegooit. Er is geen ruimte voor faal in dit bedrijf! --- util/ddv_socket.cpp | 16 ++++++++-------- util/flv_sock.cpp | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/util/ddv_socket.cpp b/util/ddv_socket.cpp index d8babf7a..dc4002c3 100644 --- a/util/ddv_socket.cpp +++ b/util/ddv_socket.cpp @@ -46,12 +46,12 @@ int DDV_Listen(int port){ if (ret == 0){ return s; }else{ - printf("Listen failed! Error: %s\n", strerror(errno)); + fprintf(stderr, "Listen failed! Error: %s\n", strerror(errno)); close(s); return 0; } }else{ - printf("Binding failed! Error: %s\n", strerror(errno)); + fprintf(stderr, "Binding failed! Error: %s\n", strerror(errno)); close(s); return 0; } @@ -77,7 +77,7 @@ bool DDV_write(void * buffer, int todo, int sock){ case EWOULDBLOCK: socketBlocking = true; break; default: socketError = true; - printf("Could not write! %s\n", strerror(errno)); + fprintf(stderr, "Could not write! %s\n", strerror(errno)); return false; break; } @@ -87,14 +87,14 @@ bool DDV_write(void * buffer, int todo, int sock){ return true; } -bool DDV_ready(int sock){ +signed int DDV_ready(int sock){ char tmp; int preflags = fcntl(sock, F_GETFL, 0); int postflags = preflags | O_NONBLOCK; fcntl(sock, F_SETFL, postflags); int r = recv(sock, &tmp, 1, MSG_PEEK); fcntl(sock, F_SETFL, preflags); - return (r == 1); + return r; } bool DDV_read(void * buffer, int todo, int sock){ @@ -107,7 +107,7 @@ bool DDV_read(void * buffer, int todo, int sock){ case EWOULDBLOCK: socketBlocking = true; break; default: socketError = true; - printf("Could not read! %s\n", strerror(errno)); + fprintf(stderr, "Could not read! %s\n", strerror(errno)); return false; break; } @@ -129,7 +129,7 @@ int DDV_iwrite(void * buffer, int todo, int sock){ case EWOULDBLOCK: break; default: socketError = true; - printf("Could not write! %s\n", strerror(errno)); + fprintf(stderr, "Could not write! %s\n", strerror(errno)); return false; break; } @@ -144,7 +144,7 @@ int DDV_iread(void * buffer, int todo, int sock){ case EWOULDBLOCK: break; default: socketError = true; - printf("Could not read! %s\n", strerror(errno)); + fprintf(stderr, "Could not read! %s\n", strerror(errno)); return false; break; } diff --git a/util/flv_sock.cpp b/util/flv_sock.cpp index 426aa7bd..be752d73 100644 --- a/util/flv_sock.cpp +++ b/util/flv_sock.cpp @@ -69,6 +69,7 @@ bool FLV_GetPacket(FLV_Pack *& p, int sock){ if (FLV_Checkheader(p->data)){ sofar = 0; memcpy(FLVHeader, p->data, 13); + //fwrite(p->data, 13, 1, stdout);//output raw stream }else{ All_Hell_Broke_Loose = true; fprintf(stderr, "Invalid FLV header. All Hell Broke Loose!\n"); @@ -94,12 +95,11 @@ bool FLV_GetPacket(FLV_Pack *& p, int sock){ testlen += (p->data[p->len-2] << 8); testlen += (p->data[p->len-3] << 16); testlen += (p->data[p->len-4] << 24); - if (p->len == testlen){ - fprintf(stderr, "Correct length tag...\n"); - }else{ + //fwrite(p->data, p->len, 1, stdout);//output raw stream + if (p->len != testlen){ fprintf(stderr, "Len: %i, testlen: %i\n", p->len, testlen); All_Hell_Broke_Loose = true; - fprintf(stderr, "ReadUntil fail: > 500kb tag? All Hell Broke Loose!\n", strerror(errno)); + fprintf(stderr, "ReadUntil fail: Wrong size tag? All Hell Broke Loose!\n"); return false; } done = true; From 3978783f2811edbd794d1338021dff9a74340831 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 20 Nov 2010 19:54:44 +0100 Subject: [PATCH 2/2] Rewrite Buffer programma --- util/ddv_socket.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/util/ddv_socket.cpp b/util/ddv_socket.cpp index dc4002c3..e7b6c099 100644 --- a/util/ddv_socket.cpp +++ b/util/ddv_socket.cpp @@ -33,7 +33,6 @@ int DDV_OpenUnix(std::string adres, bool nonblock = false){ int DDV_Listen(int port){ int s = socket(AF_INET, SOCK_STREAM, 0); - int on = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); struct sockaddr_in addr; @@ -57,9 +56,37 @@ int DDV_Listen(int port){ } } +int DDV_UnixListen(std::string adres, bool nonblock = false){ + unlink(adres.c_str()); + int s = socket(AF_UNIX, SOCK_STREAM, 0); + if (nonblock){ + int flags = fcntl(s, F_GETFL, 0); + flags |= O_NONBLOCK; + fcntl(s, F_SETFL, flags); + } + sockaddr_un addr; + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, adres.c_str(), adres.size()+1); + int ret = bind(s, (sockaddr*)&addr, sizeof(addr)); + if (ret == 0){ + ret = listen(s, 100);//start listening, backlog of 100 allowed + if (ret == 0){ + return s; + }else{ + fprintf(stderr, "Listen failed! Error: %s\n", strerror(errno)); + close(s); + return 0; + } + }else{ + fprintf(stderr, "Binding failed! Error: %s\n", strerror(errno)); + close(s); + return 0; + } +} + int DDV_Accept(int sock, bool nonblock = false){ int r = accept(sock, 0, 0); - if ((r > 0) && nonblock){ + if ((r >= 0) && nonblock){ int flags = fcntl(r, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(r, F_SETFL, flags); @@ -126,11 +153,11 @@ int DDV_iwrite(void * buffer, int todo, int sock){ int r = send(sock, buffer, todo, 0); if (r < 0){ switch (errno){ - case EWOULDBLOCK: break; + case EWOULDBLOCK: return 0; break; default: socketError = true; fprintf(stderr, "Could not write! %s\n", strerror(errno)); - return false; + return 0; break; } } @@ -145,7 +172,7 @@ int DDV_iread(void * buffer, int todo, int sock){ default: socketError = true; fprintf(stderr, "Could not read! %s\n", strerror(errno)); - return false; + return 0; break; } }