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

index cad8095177ab3df79f5b53e6916b50ada0357d6c..8dd35ba8f479a2ed8f0f9ff09a321b7c1aa1e5a8 100644 (file)
@@ -17,9 +17,9 @@
 :global GlobalFuncReady false;
 
 # Git commit id & info, expected configuration version
-:global CommitId "main/578/c7ab46ac";
+:global CommitId "main/579/0878acaa";
 :global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 17:45:03 04.05.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 18:00:03 04.05.2026.";
 
 # The variables are received right here.
 :global GlobalConfVersion 140;
   :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 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={
+    :log 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;
+    }
+    :log warning ($0 . " Failed downloading from " . $Url . " - " . $Err);
+    $RmDir $DirName;
+    :return false;
+  }
+
+  :if ([ $WaitForFile $FileName 5s ] = false) do={
+    :log warning ($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 ];
 
   }
   :return true;
 }
+
 :set VersionToNum do={
   :local Input [ :tostr $1 ];
   :local Multi 0x1000000;