summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/inputstreamer.cc43
-rw-r--r--src/inputstreamer.h11
2 files changed, 50 insertions, 4 deletions
diff --git a/src/inputstreamer.cc b/src/inputstreamer.cc
index 495f199..04edc7b 100644
--- a/src/inputstreamer.cc
+++ b/src/inputstreamer.cc
@@ -34,14 +34,36 @@
#define CSRC_A 43
InputStreamer::InputStreamer(QHostAddress addr, quint16 port)
- : socket(this)
+// : socket(this)
{
total = 0;
- socket.bind(port);
+
this->addr = addr;
this->port = port;
+ name.sin_family = AF_INET;
+ sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if(sock < 0) {
+ perror("socket()");
+ return;
+ }
+
+ name.sin_port = htons(port);
+
+ name.sin_addr.s_addr = inet_addr(addr.toString().toStdString().c_str());
+ if(INADDR_NONE == name.sin_addr.s_addr) {
+ printf("Could not parse IP address: %s\n",
+ addr.toString().toStdString().c_str());
+ return;
+ }
+
+ if(bind(sock, (struct sockaddr *)&name, sizeof(name)) < 0) {
+ close(sock);
+ perror("bind()");
+ return;
+ }
+
running = true;
start();
}
@@ -50,6 +72,8 @@ InputStreamer::~InputStreamer()
{
running = false;
wait();
+
+ close(sock);
}
#include <unistd.h>
@@ -69,6 +93,7 @@ void InputStreamer::run()
char packet[64*1024];
while(running) {
+ /*
if(!socket.hasPendingDatagrams()) {
qApp->processEvents();
usleep(2000); // sleep 2ms
@@ -79,6 +104,20 @@ void InputStreamer::run()
if(packetsize < 1) {
continue;
}
+ */
+
+ ssize_t packetsize = recv(sock, (char*)packet, sizeof(packet), 0);
+ if(packetsize == -1) {
+ perror("recv()");
+ usleep(100); // sleep 2ms
+ continue;
+ }
+
+ if(packetsize == 0) {
+ usleep(100); // sleep 2ms
+ continue;
+ }
+
total += packetsize;
// Now decode the sucker....
diff --git a/src/inputstreamer.h b/src/inputstreamer.h
index 168485e..842e0d2 100644
--- a/src/inputstreamer.h
+++ b/src/inputstreamer.h
@@ -28,8 +28,12 @@
#define __SIMPLERTP_INPUTSTREAMER_H__
#include <QObject>
-#include <QUdpSocket>
#include <QThread>
+#include <QHostAddress>
+//#include <QUdpSocket>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#include <lrtp.h>
@@ -55,7 +59,10 @@ private:
QHostAddress addr;
quint16 port;
- QUdpSocket socket;
+ // QUdpSocket socket;
+ int sock;
+ struct sockaddr_in name;
+ struct ip_mreq mreq;
size_t total;