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

index e2cb21e4e0de5f844857049aaef986a994108643..411f82fc11a07805790c6a4ba31ab807843322cc 100644 (file)
@@ -17,9 +17,9 @@
 :global GlobalFuncReady false;
 
 # Git commit id & info, expected configuration version
-:global CommitId "main/517/16a2cff2";
+:global CommitId "main/518/537cf968";
 :global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 06:50:02 04.05.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 07:20:03 04.05.2026.";
 
 # The variables are received right here.
 :global GlobalConfVersion 138;
 :global VersionToNum;
 :global RequiredRouterOS;
 :global FetchLargeFiles;
+:global FetchHuge;
 :global FetchUserAgentStr;
 :global CertificateAvailable;
 :global CertificateDownload;
   :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 ];
   :global IfThenElse;
   :local Resource [ /system/resource/get ];
   :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . $Resource->"architecture-name" . \
-    " " . $Caller . "/Fetch (https://amster.vados.ru/; main/3419/3ee19780)");
+    " " . $Caller . "/Fetch (" . $GlobalScriptsUrl . "; " . [ $CommitBrief ] . ")");
 }
 
 :set Grep do={