From 0430a644dfcd0fcc0ea6494bdb8d431073b8361d Mon Sep 17 00:00:00 2001
From: Matthew James <matt@Matthews-MacBook-Pro.local>
Date: Fri, 22 Jul 2022 00:44:28 +0800
Subject: [PATCH] Enable Parameters on TSSRT listener

---
 lib/socket_srt.cpp          | 7 +++----
 lib/socket_srt.h            | 2 +-
 src/input/input_tssrt.cpp   | 4 +++-
 src/output/output_tssrt.cpp | 3 ++-
 4 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/socket_srt.cpp b/lib/socket_srt.cpp
index a01117db..3e03bce4 100644
--- a/lib/socket_srt.cpp
+++ b/lib/socket_srt.cpp
@@ -462,12 +462,11 @@ namespace Socket{
 
   SRTServer::SRTServer(int fromSock){conn = SRTConnection(fromSock);}
 
-  SRTServer::SRTServer(int port, std::string hostname, bool nonblock, const std::string &_direction){
+  SRTServer::SRTServer(int port, std::string hostname, std::map<std::string, std::string> _params, bool nonblock, const std::string &_direction){
     // We always create a server as listening
-    std::map<std::string, std::string> listenMode;
-    listenMode["mode"] = "listener";
+    _params["mode"] = "listener";
     if (hostname == ""){hostname = "0.0.0.0";}
-    conn.connect(hostname, port, _direction, listenMode);
+    conn.connect(hostname, port, _direction, _params);
     conn.setBlocking(true);
     if (!conn){
       ERROR_MSG("Unable to create socket");
diff --git a/lib/socket_srt.h b/lib/socket_srt.h
index 5101d38d..07e947f8 100644
--- a/lib/socket_srt.h
+++ b/lib/socket_srt.h
@@ -97,7 +97,7 @@ namespace Socket{
   public:
     SRTServer();
     SRTServer(int existingSock);
-    SRTServer(int port, std::string hostname, bool nonblock = false, const std::string &_direction = "input");
+    SRTServer(int port, std::string hostname, std::map<std::string, std::string> params, bool nonblock = false, const std::string &_direction = "input");
     SRTConnection accept(bool nonblock = false, const std::string &direction = "input");
     void setBlocking(bool blocking);
     bool connected() const;
diff --git a/src/input/input_tssrt.cpp b/src/input/input_tssrt.cpp
index 4a7adcef..d12f9cba 100644
--- a/src/input/input_tssrt.cpp
+++ b/src/input/input_tssrt.cpp
@@ -137,7 +137,9 @@ namespace Mist{
       HTTP::URL u(source);
       INFO_MSG("Parsed url: %s", u.getUrl().c_str());
       if (Socket::interpretSRTMode(u) == "listener"){
-        sSock = Socket::SRTServer(u.getPort(), u.host, false);
+        std::map<std::string, std::string> arguments;
+        HTTP::parseVars(u.args, arguments);
+        sSock = Socket::SRTServer(u.getPort(), u.host, arguments, false);
         struct sigaction new_action;
         struct sigaction cur_action;
         new_action.sa_sigaction = signal_handler;
diff --git a/src/output/output_tssrt.cpp b/src/output/output_tssrt.cpp
index aa06189e..fb07b11e 100644
--- a/src/output/output_tssrt.cpp
+++ b/src/output/output_tssrt.cpp
@@ -434,7 +434,8 @@ int main(int argc, char *argv[]){
       sigaction(SIGUSR1, &new_action, NULL);
     }
     if (conf.getInteger("port") && conf.getString("interface").size()){
-      server_socket = Socket::SRTServer(conf.getInteger("port"), conf.getString("interface"), false, "output");
+      std::map<std::string, std::string> arguments;
+      server_socket = Socket::SRTServer(conf.getInteger("port"), conf.getString("interface"), arguments, false, "output");
     }
     if (!server_socket.connected()){
       DEVEL_MSG("Failure to open socket");