aboutsummaryrefslogtreecommitdiffstats
path: root/sms-forward.rsc
diff options
context:
space:
mode:
Diffstat (limited to 'sms-forward.rsc')
-rw-r--r--sms-forward.rsc44
1 files changed, 30 insertions, 14 deletions
diff --git a/sms-forward.rsc b/sms-forward.rsc
index 477d11e..feb640e 100644
--- a/sms-forward.rsc
+++ b/sms-forward.rsc
@@ -1,18 +1,19 @@
#!rsc by RouterOS
# RouterOS script: sms-forward
-# Copyright (c) 2013-2024 Christian Hesse <mail@eworm.de>
+# Copyright (c) 2013-2025 Christian Hesse <mail@eworm.de>
# Anatoly Bubenkov <bubenkoff@gmail.com>
-# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
+# https://rsc.eworm.de/COPYING.md
#
-# requires RouterOS, version=7.13
+# requires RouterOS, version=7.15
#
# forward SMS to e-mail
-# https://git.eworm.de/cgit/routeros-scripts/about/doc/sms-forward.md
+# https://rsc.eworm.de/doc/sms-forward.md
-:global GlobalFunctionsReady;
-:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
-
-:do {
+:local ExitOK false;
+:onerror Err {
+ :global GlobalConfigReady; :global GlobalFunctionsReady;
+ :retry { :if ($GlobalConfigReady != true || $GlobalFunctionsReady != true) \
+ do={ :error ("Global config and/or functions not ready."); }; } delay=500ms max=50;
:local ScriptName [ :jobname ];
:global Identity;
@@ -28,11 +29,13 @@
:global WaitFullyConnected;
:if ([ $ScriptLock $ScriptName ] = false) do={
+ :set ExitOK true;
:error false;
}
:if ([ /tool/sms/get receive-enabled ] = false) do={
$LogPrintOnce warning $ScriptName ("Receiving of SMS is not enabled.");
+ :set ExitOK true;
:error false;
}
@@ -42,6 +45,7 @@
:if ([ /interface/lte/get ($Settings->"port") running ] != true) do={
$LogPrint info $ScriptName ("The LTE interface is not in running state, skipping.");
+ :set ExitOK true;
:error true;
}
@@ -57,7 +61,12 @@
:if ($Phone = $Settings->"allowed-number" && \
($SmsVal->"message")~("^:cmd " . $Settings->"secret" . " script ")) do={
$LogPrint debug $ScriptName ("Removing SMS, which started a script.");
- /tool/sms/inbox/remove $Sms;
+ :onerror Err {
+ /tool/sms/inbox/remove $Sms;
+ :delay 50ms;
+ } do={
+ $LogPrint warning $ScriptName ("Failed to remove message: " . $Err);
+ }
} else={
:set Messages ($Messages . "\n\nOn " . $SmsVal->"timestamp" . \
" type " . $SmsVal->"type" . ":\n" . $SmsVal->"message");
@@ -65,12 +74,12 @@
:if ($Phone~($Hook->"allowed-number") && ($SmsVal->"message")~($Hook->"match")) do={
:if ([ $ValidateSyntax ($Hook->"command") ] = true) do={
$LogPrint info $ScriptName ("Running hook '" . $Hook->"match" . "': " . $Hook->"command");
- :do {
+ :onerror Err {
:local Command [ :parse ($Hook->"command") ];
$Command Phone=$Phone Message=($SmsVal->"message");
:set Messages ($Messages . "\n\nRan hook '" . $Hook->"match" . "':\n" . $Hook->"command");
- } on-error={
- $LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed to run!");
+ } do={
+ $LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed to run: " . $Err);
}
} else={
$LogPrint warning $ScriptName ("The code for hook '" . $Hook->"match" . "' failed syntax validation!");
@@ -88,8 +97,15 @@
message=("Received " . [ $IfThenElse ($Count = 1) "this message" ("these " . $Count . " messages") ] . \
" by " . $Identity . " from " . $Phone . ":" . $Messages) });
:foreach Sms in=$Delete do={
- /tool/sms/inbox/remove $Sms;
+ :onerror Err {
+ /tool/sms/inbox/remove $Sms;
+ :delay 50ms;
+ } do={
+ $LogPrint warning $ScriptName ("Failed to remove message: " . $Err);
+ }
}
}
}
-} on-error={ }
+} do={
+ :global ExitError; $ExitError $ExitOK [ :jobname ] $Err;
+}