chiark / gitweb /
Correct setting of rtp-source-port.
[disorder] / lib / uaudio-rtp.c
index 00609404372ab9e8778d65bc04b3acb7a256fc50..01be09b52ed1cb638840ba0142db381cba13dcb6 100644 (file)
@@ -23,6 +23,8 @@
 #include <sys/socket.h>
 #include <ifaddrs.h>
 #include <net/if.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
 #include <gcrypt.h>
 #include <unistd.h>
 #include <time.h>
@@ -36,6 +38,7 @@
 #include "addr.h"
 #include "ifreq.h"
 #include "timeval.h"
+#include "configuration.h"
 
 /** @brief Bytes to send per network packet
  *
@@ -278,7 +281,8 @@ static void rtp_start(uaudio_callback *callback,
                       rtp_play,
                       256 / uaudio_sample_size,
                       (NETWORK_BYTES - sizeof(struct rtp_header))
-                      / uaudio_sample_size);
+                      / uaudio_sample_size,
+                      0);
 }
 
 static void rtp_stop(void) {
@@ -296,13 +300,33 @@ static void rtp_deactivate(void) {
   uaudio_thread_deactivate();
 }
 
+static void rtp_configure(void) {
+  char buffer[64];
+
+  uaudio_set("rtp-destination", config->broadcast.s[0]);
+  uaudio_set("rtp-destination-port", config->broadcast.s[1]);
+  if(config->broadcast_from.n) {
+    uaudio_set("rtp-source", config->broadcast_from.s[0]);
+    uaudio_set("rtp-source-port", config->broadcast_from.s[1]);
+  } else {
+    uaudio_set("rtp-source", NULL);
+    uaudio_set("rtp-source-port", NULL);
+  }
+  snprintf(buffer, sizeof buffer, "%ld", config->multicast_ttl);
+  uaudio_set("multicast-ttl", buffer);
+  uaudio_set("multicast-loop", config->multicast_loop ? "yes" : "no");
+  snprintf(buffer, sizeof buffer, "%ld", config->rtp_delay_threshold);
+  uaudio_set("delay-threshold", buffer);
+}
+
 const struct uaudio uaudio_rtp = {
   .name = "rtp",
   .options = rtp_options,
   .start = rtp_start,
   .stop = rtp_stop,
   .activate = rtp_activate,
-  .deactivate = rtp_deactivate
+  .deactivate = rtp_deactivate,
+  .configure = rtp_configure,
 };
 
 /*