]> Git [git.vados.ru] :: Repos - Mikrotiks/ros.vados.ru.git/commitdiff
Autocommit in repo: ros.vados.ru, generated by owner: root, in 07:50:03 04.05.2026.
authorvados-dev <192440777+vados-dev@users.noreply.github.com>
Mon, 4 May 2026 04:50:03 +0000 (07:50 +0300)
committervados-dev <192440777+vados-dev@users.noreply.github.com>
Mon, 4 May 2026 04:50:03 +0000 (07:50 +0300)
html/AM-GlobalFunc.rsc

index 56d815e46686441f08a89b30d151f8bcde1f51fa..27fe6c85c8287f7eca2a2f005b5cca187a60207c 100644 (file)
@@ -17,9 +17,9 @@
 :global GlobalFuncReady false;
 
 # Git commit id & info, expected configuration version
-:global CommitId "main/522/d18befd3";
+:global CommitId "main/523/1221239d";
 :global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 07:45:02 04.05.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 07:50:03 04.05.2026.";
 
 # The variables are received right here.
 :global GlobalConfVersion 138;
   :return $Return;
 }
 
+# fetch huge data to file, read in chunks
+:set FetchHuge do={
+  :local ScriptName [ :tostr $1 ];
+  :local Url        [ :tostr $2 ];
+  :local CheckCert  [ :tostr $3 ];
+
+  :global CleanName;
+  :global FetchUserAgentStr;
+  :global GetRandom20CharAlNum;
+  :global IfThenElse;
+  :global LogPrint;
+  :global MkDir;
+  :global RmDir;
+  :global RmFile;
+  :global WaitForFile;
+
+  :set CheckCert [ $IfThenElse ($CheckCert = "false") "no" "yes-without-crl" ];
+
+  :local DirName ("tmpfs/" . [ $CleanName $ScriptName ]);
+  :if ([ $MkDir $DirName ] = false) do={
+    $LogPrint error $0 ("Failed creating directory!");
+    :return false;
+  }
+
+  :local FileName ($DirName . "/" . [ $CleanName $0 ] . "-" . [ $GetRandom20CharAlNum ]);
+  :onerror Err {
+    /tool/fetch check-certificate=$CheckCert $Url dst-path=$FileName \
+      http-header-field=({ [ $FetchUserAgentStr $ScriptName ] }) as-value;
+  } do={
+    :if ([ $WaitForFile $FileName 500ms ] = true) do={
+      $RmFile $FileName;
+    }
+    $LogPrint debug $0 ("Failed downloading from " . $Url . " - " . $Err);
+    $RmDir $DirName;
+    :return false;
+  }
+
+  :if ([ $WaitForFile $FileName 5s ] = false) do={
+    $LogPrint debug $0 ("The file downloaded from " . $Url . " did not show up.");
+    :return false;
+  }
+
+  :local FileSize [ /file/get $FileName size ];
+  :local Return "";
+  :local VarSize 0;
+  :while ($VarSize != $FileSize) do={
+    :set Return ($Return . ([ /file/read offset=$VarSize chunk-size=32768 file=$FileName as-value ]->"data"));
+    :set FileSize [ /file/get $FileName size ];
+    :set VarSize [ :len $Return ];
+    :if ($VarSize > $FileSize) do={
+      :delay 100ms;
+    }
+  }
+  $RmDir $DirName;
+  :return $Return;
+}
 
 :set FetchUserAgentStr do={
   :local Caller [ :tostr $1 ];