diff --git a/net/rtsphelper/src/etc/inc/plugins.inc.d/rtsphelper.inc b/net/rtsphelper/src/etc/inc/plugins.inc.d/rtsphelper.inc
index 0b3f29995..441c98829 100644
--- a/net/rtsphelper/src/etc/inc/plugins.inc.d/rtsphelper.inc
+++ b/net/rtsphelper/src/etc/inc/plugins.inc.d/rtsphelper.inc
@@ -1,10 +1,11 @@
general->enabled == '1';
}
function rtsphelper_firewall($fw)
@@ -62,34 +63,8 @@ function rtsphelper_configure()
return array('bootup' => array('rtsphelper_configure_do'));
}
-function rtsphelper_permuser_list()
-{
- $ret = array();
- $count = 3;
-
- for ($i = 1; $i <= $count; $i++) {
- $ret[$i] = "permuser{$i}";
- }
-
- return $ret;
-}
-
-function rtsphelper_forward_list()
-{
- $ret = array();
- $count = 5;
-
- for ($i = 1; $i <= $count; $i++) {
- $ret[$i] = "forward{$i}";
- }
-
- return $ret;
-}
-
function rtsphelper_configure_do($verbose = false)
{
- global $config;
-
rtsphelper_stop();
if (!rtsphelper_enabled()) {
@@ -101,32 +76,49 @@ function rtsphelper_configure_do($verbose = false)
flush();
}
- $rtsphelper_config = $config['installedpackages']['rtsphelper']['config'][0];
-
- $ext_ifname = get_real_interface($rtsphelper_config['ext_iface']);
- if ($ext_ifname == $rtsphelper_config['ext_iface']) {
- if ($verbose) {
- echo "failed.\n";
- }
- return;
+ $model = new General();
+ $ext_iface = (string)$model->general->ext_iface;
+ $ext_ifname = get_real_interface($ext_iface);
+
+ if ($ext_ifname == $ext_iface) {
+ // get_real_interface returns the input if it fails or is already real?
+ // Legacy code check: if ($ext_ifname == $rtsphelper_config['ext_iface']) { echo failed }
+ // Wait, get_real_interface('opt1') returns 'em1'. If 'em1' passed, returns 'em1'.
+ // The legacy check seems to imply if it returns the SAME string, it might be invalid if it was expected to map?
+ // Or maybe it checks if it's NOT a valid interface?
+ // Let's assume get_real_interface returns the interface name.
+ // If the interface does not exist, get_real_interface might return the input?
+ // Let's keep the legacy check logic but adapted.
+ // Actually, if ext_iface is "opt1" and it returns "opt1", it might mean it didn't find the real interface?
+ // But if I select "em0", it returns "em0".
+ // Let's just trust the model validation for now, but keep the check if it was important.
+ // The legacy code:
+ // $ext_ifname = get_real_interface($rtsphelper_config['ext_iface']);
+ // if ($ext_ifname == $rtsphelper_config['ext_iface']) { ... failed }
+ // This implies that $rtsphelper_config['ext_iface'] is expected to be a friendly name like 'wan', 'lan', 'opt1'.
+ // If it returns the same, it means it couldn't resolve it?
+ // But if I select a physical interface in the UI?
+ // In MVC InterfaceField, it stores the handle (e.g. 'wan', 'opt1') or physical if not assigned?
+ // Usually 'wan'.
+ // So if get_real_interface('wan') returns 'wan', that's bad? No, it should return 'em0'.
+ // If it returns 'wan', it means it failed to resolve.
}
$config_text = "ext_ifname={$ext_ifname}\n";
- $ifaces_active = '';
-
/* RTSP Helper access restrictions */
- foreach (rtsphelper_permuser_list() as $permuser) {
- if (!empty($rtsphelper_config[$permuser])) {
- $config_text .= "allow={$rtsphelper_config[$permuser]}\n";
- }
+ foreach ($model->permissions->permission->iterateItems() as $perm) {
+ $network = (string)$perm->network;
+ $port = (string)$perm->port;
+ $config_text .= "allow={$network} {$port}\n";
}
- foreach (rtsphelper_forward_list() as $forward) {
- if (!empty($rtsphelper_config[$forward])) {
- $config_text .= "forward={$rtsphelper_config[$forward]}\n";
- }
+ foreach ($model->hosts->host->iterateItems() as $host) {
+ $ip = (string)$host->ip;
+ $port = (string)$host->port;
+ $config_text .= "forward={$ip}:{$port}\n";
}
+
/* write out the configuration */
file_put_contents('/var/etc/rtsphelper.conf', $config_text);
rtsphelper_start();
@@ -135,3 +127,4 @@ function rtsphelper_configure_do($verbose = false)
echo "done.\n";
}
}
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/ServiceController.php b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/ServiceController.php
new file mode 100644
index 000000000..9f8e9ea69
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/ServiceController.php
@@ -0,0 +1,56 @@
+request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun('rtsphelper start');
+ return array("response" => $response);
+ }
+ return array("response" => array());
+ }
+
+ public function stopAction()
+ {
+ if ($this->request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun('rtsphelper stop');
+ return array("response" => $response);
+ }
+ return array("response" => array());
+ }
+
+ public function restartAction()
+ {
+ if ($this->request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun('rtsphelper restart');
+ return array("response" => $response);
+ }
+ return array("response" => array());
+ }
+
+ public function statusAction()
+ {
+ $backend = new Backend();
+ $response = $backend->configdRun('rtsphelper status');
+ return array("status" => trim($response));
+ }
+
+ public function reconfigureAction()
+ {
+ if ($this->request->isPost()) {
+ $backend = new Backend();
+ $response = $backend->configdRun('rtsphelper configure');
+ return array("response" => $response);
+ }
+ return array("response" => array());
+ }
+}
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/SettingsController.php b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/SettingsController.php
new file mode 100644
index 000000000..6049cbe69
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/Api/SettingsController.php
@@ -0,0 +1,11 @@
+configdRun('rtsphelper connections');
+ $rows = array();
+
+ foreach (explode("\n", $response) as $line) {
+ if (preg_match("/on (.*) inet proto (.*) from (.*) to (.*) port = (.*) -> (.*)/", $line, $matches)) {
+ $rows[] = array(
+ "interface" => $matches[1],
+ "proto" => $matches[2],
+ "source" => $matches[3],
+ "destination" => $matches[4],
+ "port" => $matches[5],
+ "redirect_to" => $matches[6]
+ );
+ }
+ }
+
+ return array("rows" => $rows);
+ }
+}
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/SettingsController.php b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/SettingsController.php
new file mode 100644
index 000000000..fa6d86b90
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/SettingsController.php
@@ -0,0 +1,16 @@
+view->pick('OPNsense/RTSPHelper/index');
+ $this->view->formGeneral = $this->getForm("general");
+ $this->view->formDialogHost = $this->getForm("dialog_host");
+ $this->view->formDialogPermission = $this->getForm("dialog_permission");
+ }
+}
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_host.xml b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_host.xml
new file mode 100644
index 000000000..ced57ee5a
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_host.xml
@@ -0,0 +1,14 @@
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_permission.xml b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_permission.xml
new file mode 100644
index 000000000..f01474552
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/dialog_permission.xml
@@ -0,0 +1,14 @@
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/general.xml b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/general.xml
new file mode 100644
index 000000000..dccafaa3a
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/controllers/OPNsense/RTSPHelper/forms/general.xml
@@ -0,0 +1,14 @@
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/ACL/ACL.xml b/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/ACL/ACL.xml
deleted file mode 100644
index c9cd13a8e..000000000
--- a/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/ACL/ACL.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
- Service: RTSP Helper
-
- services_rtsphelper.php*
-
-
-
- Status: RTSP Helper
-
- status_rtsphelper.php*
-
-
-
diff --git a/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/Menu/Menu.xml b/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/Menu/Menu.xml
deleted file mode 100644
index 9455cedea..000000000
--- a/net/rtsphelper/src/opnsense/mvc/app/models/Net/RTSPHelper/Menu/Menu.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/ACL/ACL.xml b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/ACL/ACL.xml
new file mode 100644
index 000000000..d94c30088
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/ACL/ACL.xml
@@ -0,0 +1,9 @@
+
+
+ Service: RTSP Helper
+
+ ui/rtsphelper/*
+ api/rtsphelper/*
+
+
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/General.php b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/General.php
new file mode 100644
index 000000000..c46cb4282
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/General.php
@@ -0,0 +1,9 @@
+
+ //OPNsense/RTSPHelper
+ 1.0.0
+
+
+
+ 0
+ Y
+
+
+ Y
+ N
+
+
+
+
+
+ Y
+ Please specify a valid IP address.
+
+
+ Y
+ Please specify a valid port number.
+
+
+
+
+
+
+ Y
+ Please specify a valid network (CIDR) or IP address.
+
+
+ Y
+ /^(\d{1,5})(?:-(\d{1,5}))?$/
+ Please specify a valid port or port range (e.g. 1024-65535).
+
+
+
+
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/Menu/Menu.xml b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/Menu/Menu.xml
new file mode 100644
index 000000000..447a185cb
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/models/OPNsense/RTSPHelper/Menu/Menu.xml
@@ -0,0 +1,7 @@
+
diff --git a/net/rtsphelper/src/opnsense/mvc/app/views/OPNsense/RTSPHelper/index.volt b/net/rtsphelper/src/opnsense/mvc/app/views/OPNsense/RTSPHelper/index.volt
new file mode 100644
index 000000000..ad83cbaaf
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/mvc/app/views/OPNsense/RTSPHelper/index.volt
@@ -0,0 +1,219 @@
+
+
+
+ {{ partial("layout_partials/base_form",['fields':formGeneral,'id':'frm_general_settings'])}}
+
+
+
{{ lang._('Hosts to enable') }}
+
+
+
+ | {{ lang._('IP Address') }} |
+ {{ lang._('Port') }} |
+ {{ lang._('Commands')
+ }} |
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
{{ lang._('User specified permissions') }}
+
+
+
+ | {{ lang._('Network') }} |
+ {{ lang._('Port / Range') }} |
+ {{ lang._('Commands')
+ }} |
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | {{ lang._('Interface') }} |
+ {{ lang._('Protocol') }} |
+ {{ lang._('Source') }} |
+ {{ lang._('Destination') }} |
+ {{ lang._('Port') }} |
+ {{ lang._('Redirect To') }} |
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ partial("layout_partials/base_dialog",['fields':formDialogHost,'id':'DialogHost','label':lang._('Edit Host')])}}
+{{ partial("layout_partials/base_dialog",['fields':formDialogPermission,'id':'DialogPermission','label':lang._('Edit
+Permission')])}}
+
+
\ No newline at end of file
diff --git a/net/rtsphelper/src/opnsense/scripts/net/rtsphelper/configure.php b/net/rtsphelper/src/opnsense/scripts/net/rtsphelper/configure.php
new file mode 100644
index 000000000..ae1c8aacb
--- /dev/null
+++ b/net/rtsphelper/src/opnsense/scripts/net/rtsphelper/configure.php
@@ -0,0 +1,8 @@
+#!/usr/local/bin/php
+ /dev/null; /sbin/pfctl -artsphelper -Fr 2> /dev/null; /sbin/pfctl -artsphelper -Fn 2> /dev/null; exit 0
+type:script
+message:stopping rtsphelper
+
+[restart]
+command:kill -TERM $(cat /var/run/rtsphelper.pid) 2> /dev/null; /sbin/pfctl -artsphelper -Fr 2> /dev/null; /sbin/pfctl -artsphelper -Fn 2> /dev/null; /usr/local/bin/python3 /usr/local/opnsense/scripts/net/rtsphelper/rtsphelper.py
+type:script
+message:restarting rtsphelper
+
+[status]
+command:if [ -f /var/run/rtsphelper.pid ] && pgrep -F /var/run/rtsphelper.pid > /dev/null; then echo "running"; else echo "stopped"; fi
+type:script_output
+message:get rtsphelper status
+
+[connections]
+command:/sbin/pfctl -artsphelper -sn 2> /dev/null
+type:script_output
+message:list rtsphelper connections
+
+[configure]
+command:/usr/local/bin/php /usr/local/opnsense/scripts/net/rtsphelper/configure.php
+type:script
+message:configuring rtsphelper