summaryrefslogtreecommitdiff
path: root/src/streamer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/streamer.c')
-rw-r--r--src/streamer.c46
1 files changed, 43 insertions, 3 deletions
diff --git a/src/streamer.c b/src/streamer.c
index fd1223d..82cb0f4 100644
--- a/src/streamer.c
+++ b/src/streamer.c
@@ -26,10 +26,16 @@
#include <gst/gst.h>
#include <sys/types.h>
-
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
#include <errno.h>
#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
#include "streamer.h"
#include "datatypes.h"
@@ -56,12 +62,46 @@ static void fdremoved_cb(GstElement* sink, gint fd, gpointer data)
log_printf(INFO, "fdsink: successfully removed fd %d (sink has now %d fds)", fd, num_fds);
}
+int init_server(const char* host, const char* port)
+{
+ int server = socket(AF_INET, SOCK_STREAM, 0);
+ if(server < 0) {
+ perror("streamer: socket() call failed");
+ return -1;
+ }
+
+ // TODO: resolve host and port
+
+ struct sockaddr_in local_addr;
+ memset((char *) &local_addr, 0, sizeof(local_addr));
+ local_addr.sin_family = AF_INET;
+ local_addr.sin_port = htons(9001);
+ local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+ if(bind(server, (struct sockaddr *)&local_addr, sizeof(local_addr))==-1) {
+ perror("streamer: bind() call failed");
+ return -1;
+ }
+
+ if(listen(server, 5)==-1) {
+ perror("streamer: listen() call failed");
+ return -1;
+ }
+
+ return server;
+}
+
int streamer_init(streamer_t* streamer, GMainLoop *loop, const char* host, const char* port)
{
if(!streamer)
return -1;
- // TODO: init server socket here
+ streamer->host_ = host;
+ streamer->port_ = port;
+ streamer->fd_ = init_server(host, port);
+ if(streamer->fd_ < 0) {
+ return streamer->fd_;
+ }
streamer->loop_ = loop;
streamer->sink_ = gst_element_factory_make("multifdsink", "streamer");
@@ -128,7 +168,7 @@ void streamer_stop(streamer_t* streamer)
if(!streamer)
return;
- // TODO: close server socket here
+ close(streamer->fd_);
if(streamer->thread_) {
log_printf(NOTICE, "waiting for streamer thread to stop");