Script.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. //---------------------------------------------------------------------------
  2. #ifndef ScriptH
  3. #define ScriptH
  4. //---------------------------------------------------------------------------
  5. #include <time.h>
  6. #include "Option.h"
  7. #include "Terminal.h"
  8. #include "FileOperationProgress.h"
  9. //---------------------------------------------------------------------------
  10. class TTerminal;
  11. class TScript;
  12. class TScriptCommands;
  13. class TStoredSessionList;
  14. class TTerminalList;
  15. //---------------------------------------------------------------------------
  16. class TScriptProgress
  17. {
  18. public:
  19. TFileOperation Operation;
  20. TOperationSide Side;
  21. UnicodeString FileName;
  22. UnicodeString Directory;
  23. unsigned int OverallProgress;
  24. unsigned int FileProgress;
  25. unsigned int CPS;
  26. bool Cancel;
  27. };
  28. //---------------------------------------------------------------------------
  29. typedef void __fastcall (__closure *TScriptPrintEvent)(TScript * Script, const UnicodeString Str, bool Error);
  30. typedef void __fastcall (__closure *TScriptSynchronizeStartStop)(TScript * Script,
  31. const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,
  32. const TCopyParamType & CopyParam, int SynchronizeParams);
  33. typedef void __fastcall (__closure *TScriptProgressEvent)(TScript * Script, TScriptProgress & Progress);
  34. //---------------------------------------------------------------------------
  35. class TScriptProcParams : public TOptions
  36. {
  37. public:
  38. __fastcall TScriptProcParams(const UnicodeString & FullCommand, const UnicodeString & ParamsStr);
  39. __property UnicodeString ParamsStr = { read = FParamsStr };
  40. __property UnicodeString FullCommand = { read = FFullCommand };
  41. private:
  42. UnicodeString FParamsStr;
  43. UnicodeString FFullCommand;
  44. };
  45. //---------------------------------------------------------------------------
  46. class TScript
  47. {
  48. public:
  49. enum TBatchMode { BatchOff, BatchOn, BatchAbort, BatchContinue };
  50. __fastcall TScript(bool LimitedOutput);
  51. virtual __fastcall ~TScript();
  52. void __fastcall Command(UnicodeString Cmd);
  53. void __fastcall Log(TLogLineType Type, const UnicodeString & Str, TTerminal * ATerminal = NULL);
  54. void __fastcall PrintLine(const UnicodeString Str, bool Error = false, TTerminal * ATerminal = NULL);
  55. void __fastcall StartInteractive();
  56. void __fastcall Synchronize(const UnicodeString LocalDirectory,
  57. const UnicodeString RemoteDirectory, const TCopyParamType & CopyParam,
  58. int SynchronizeParams, TSynchronizeChecklist ** Checklist);
  59. static void __fastcall RequireParams(TScriptProcParams * Parameters, int MinParams);
  60. __property TScriptPrintEvent OnPrint = { read = FOnPrint, write = FOnPrint };
  61. __property TExtendedExceptionEvent OnShowExtendedException = { read = FOnShowExtendedException, write = FOnShowExtendedException };
  62. __property TSynchronizeDirectory OnTerminalSynchronizeDirectory = { read = FOnTerminalSynchronizeDirectory, write = FOnTerminalSynchronizeDirectory };
  63. __property TScriptSynchronizeStartStop OnSynchronizeStartStop = { read = FOnSynchronizeStartStop, write = FOnSynchronizeStartStop };
  64. __property TScriptProgressEvent OnProgress = { read = FOnProgress, write = FOnProgress };
  65. __property TCopyParamType CopyParam = { read = FCopyParam, write = SetCopyParam };
  66. __property int SynchronizeParams = { read = FSynchronizeParams, write = SetSynchronizeParams };
  67. __property TBatchMode Batch = { read = FBatch };
  68. __property TTerminal * Terminal = { read = FTerminal };
  69. __property bool Groups = { read = FGroups, write = FGroups };
  70. __property bool WantsProgress = { read = FWantsProgress, write = FWantsProgress };
  71. __property bool UsageWarnings = { read = FUsageWarnings, write = FUsageWarnings };
  72. __property TTransferOutEvent OnTransferOut = { read = FOnTransferOut, write = FOnTransferOut };
  73. __property TTransferInEvent OnTransferIn = { read = FOnTransferIn, write = FOnTransferIn };
  74. protected:
  75. TTerminal * FTerminal;
  76. TTerminal * FLoggingTerminal;
  77. TScriptCommands * FCommands;
  78. TScriptPrintEvent FOnPrint;
  79. TExtendedExceptionEvent FOnShowExtendedException;
  80. TSynchronizeDirectory FOnTerminalSynchronizeDirectory;
  81. TScriptSynchronizeStartStop FOnSynchronizeStartStop;
  82. TScriptProgressEvent FOnProgress;
  83. TCopyParamType FCopyParam;
  84. bool FIncludeFileMaskOptionUsed;
  85. TBatchMode FBatch;
  86. TBatchMode FInteractiveBatch;
  87. bool FConfirm;
  88. bool FInteractiveConfirm;
  89. bool FEcho;
  90. bool FFailOnNoMatch;
  91. int FSynchronizeParams;
  92. int FSynchronizeMode;
  93. bool FKeepingUpToDate;
  94. UnicodeString FSynchronizeIntro;
  95. bool FLimitedOutput;
  96. int FSessionReopenTimeout;
  97. int FInteractiveSessionReopenTimeout;
  98. bool FGroups;
  99. bool FWantsProgress;
  100. bool FUsageWarnings;
  101. TTransferOutEvent FOnTransferOut;
  102. TTransferInEvent FOnTransferIn;
  103. TStrings * FPendingLogLines;
  104. bool FWarnNonDefaultCopyParam;
  105. bool FWarnNonDefaultSynchronizeParams;
  106. bool FPrintInformation;
  107. virtual void __fastcall ResetTransfer();
  108. virtual void __fastcall ConnectTerminal(TTerminal * ATerminal);
  109. bool __fastcall EnsureCommandSessionFallback(
  110. TFSCapability Capability, TSessionAction * Action);
  111. void __fastcall Print(const UnicodeString Str, bool Error = false);
  112. void __fastcall CheckSession();
  113. void __fastcall CheckParams(TScriptProcParams * Parameters);
  114. void __fastcall CopyParamParams(TCopyParamType & CopyParam, TScriptProcParams * Parameters);
  115. void __fastcall TransferParamParams(int & Params, TScriptProcParams * Parameters);
  116. enum TFileListType
  117. {
  118. fltDefault = 0x00,
  119. fltDirectories = 0x01,
  120. fltQueryServer = 0x02,
  121. fltMask = 0x04,
  122. fltLatest = 0x08,
  123. fltOnlyFile = 0x10,
  124. };
  125. TStrings * __fastcall CreateFileList(TScriptProcParams * Parameters, int Start,
  126. int End, TFileListType ListType = fltDefault);
  127. TStrings * __fastcall CreateLocalFileList(TScriptProcParams * Parameters,
  128. int Start, int End, TFileListType ListType);
  129. void __fastcall FreeFiles(TStrings * FileList);
  130. void __fastcall FreeFileList(TStrings * FileList);
  131. void __fastcall LogPendingLines(TTerminal * ATerminal);
  132. void __fastcall HelpProc(TScriptProcParams * Parameters);
  133. void __fastcall CallProc(TScriptProcParams * Parameters);
  134. void __fastcall PwdProc(TScriptProcParams * Parameters);
  135. void __fastcall CdProc(TScriptProcParams * Parameters);
  136. void __fastcall LsProc(TScriptProcParams * Parameters);
  137. void __fastcall RmProc(TScriptProcParams * Parameters);
  138. void __fastcall RmDirProc(TScriptProcParams * Parameters);
  139. void __fastcall MvProc(TScriptProcParams * Parameters);
  140. void __fastcall CpProc(TScriptProcParams * Parameters);
  141. void __fastcall ChModProc(TScriptProcParams * Parameters);
  142. void __fastcall LnProc(TScriptProcParams * Parameters);
  143. void __fastcall MkDirProc(TScriptProcParams * Parameters);
  144. void __fastcall GetProc(TScriptProcParams * Parameters);
  145. void __fastcall PutProc(TScriptProcParams * Parameters);
  146. void __fastcall OptionProc(TScriptProcParams * Parameters);
  147. void __fastcall AsciiProc(TScriptProcParams * Parameters);
  148. void __fastcall BinaryProc(TScriptProcParams * Parameters);
  149. void __fastcall SynchronizeProc(TScriptProcParams * Parameters);
  150. void __fastcall KeepUpToDateProc(TScriptProcParams * Parameters);
  151. void __fastcall EchoProc(TScriptProcParams * Parameters);
  152. void __fastcall StatProc(TScriptProcParams * Parameters);
  153. void __fastcall ChecksumProc(TScriptProcParams * Parameters);
  154. void __fastcall CopyIdProc(TScriptProcParams * Parameters);
  155. void __fastcall OptionImpl(UnicodeString OptionName, UnicodeString ValueName);
  156. void __fastcall SynchronizeDirectories(TScriptProcParams * Parameters,
  157. UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int FirstParam);
  158. virtual bool __fastcall HandleExtendedException(Exception * E,
  159. TTerminal * Terminal = NULL);
  160. void __fastcall TerminalCaptureLog(const UnicodeString & AddedLine, TCaptureOutputType OutputType);
  161. virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,
  162. const UnicodeString & Command, const UnicodeString & Params);
  163. void __fastcall SynchronizePreview(
  164. UnicodeString LocalDirectory, UnicodeString RemoteDirectory,
  165. TSynchronizeChecklist * Checklist);
  166. UnicodeString __fastcall SynchronizeFileRecord(
  167. const UnicodeString & RootDirectory, const TSynchronizeChecklist::TItem * Item,
  168. bool Local);
  169. UnicodeString __fastcall ListingSysErrorMessage();
  170. void __fastcall NoMatch(const UnicodeString & Mask, const UnicodeString & Error);
  171. void __fastcall NoMatch(const UnicodeString & Message);
  172. private:
  173. void __fastcall Init();
  174. void __fastcall SetCopyParam(const TCopyParamType & value);
  175. void __fastcall SetSynchronizeParams(int value);
  176. TTransferMode __fastcall ParseTransferModeName(UnicodeString Name);
  177. inline bool __fastcall IsTerminalLogging(TTerminal * ATerminal);
  178. void __fastcall CheckDefaultCopyParam();
  179. bool __fastcall HasNonDefaultCopyParams();
  180. void __fastcall CheckDefaultSynchronizeParams();
  181. void __fastcall CheckMultiFilesToOne(TStrings * FileList, const UnicodeString & Target, bool Unix);
  182. void __fastcall LogOption(const UnicodeString & LogStr);
  183. void __fastcall DoMvOrCp(TScriptProcParams * Parameters, TFSCapability Capability, bool Cp);
  184. void __fastcall DoCalculatedChecksum(
  185. const UnicodeString & FileName, const UnicodeString & Alg, const UnicodeString & Hash);
  186. };
  187. //---------------------------------------------------------------------------
  188. typedef void __fastcall (__closure *TScriptInputEvent)(TScript * Script, const UnicodeString Prompt, UnicodeString & Str);
  189. typedef void __fastcall (__closure *TScriptQueryCancelEvent)(TScript * Script, bool & Cancel);
  190. typedef void __fastcall (__closure *TScriptPrintProgressEvent)(TScript * Script, bool First, const UnicodeString Str);
  191. //---------------------------------------------------------------------------
  192. class TManagementScript : public TScript
  193. {
  194. public:
  195. __fastcall TManagementScript(TStoredSessionList * StoredSessions, bool LimitedOutput);
  196. virtual __fastcall ~TManagementScript();
  197. void __fastcall Connect(const UnicodeString Session, TOptions * Options, bool CheckParams);
  198. void __fastcall ReflectSettings();
  199. void __fastcall MaskPasswordInCommandLine(UnicodeString & Command, bool Recurse);
  200. __property TScriptInputEvent OnInput = { read = FOnInput, write = FOnInput };
  201. __property TScriptQueryCancelEvent OnQueryCancel = { read = FOnQueryCancel, write = FOnQueryCancel };
  202. __property TPromptUserEvent OnTerminalPromptUser = { read = FOnTerminalPromptUser, write = FOnTerminalPromptUser };
  203. __property TQueryUserEvent OnTerminalQueryUser = { read = FOnTerminalQueryUser, write = FOnTerminalQueryUser };
  204. __property TScriptPrintProgressEvent OnPrintProgress = { read = FOnPrintProgress, write = FOnPrintProgress };
  205. __property bool Continue = { read = FContinue };
  206. protected:
  207. TScriptInputEvent FOnInput;
  208. TScriptQueryCancelEvent FOnQueryCancel;
  209. TPromptUserEvent FOnTerminalPromptUser;
  210. TQueryUserEvent FOnTerminalQueryUser;
  211. TScriptPrintProgressEvent FOnPrintProgress;
  212. TStoredSessionList * FStoredSessions;
  213. TTerminalList * FTerminalList;
  214. UnicodeString FLastProgressFile;
  215. UnicodeString FLastProgressMessage;
  216. time_t FLastProgressTime;
  217. time_t FLastProgressEventTime;
  218. UnicodeString FLastProgressEventDoneFileName;
  219. bool FLastProgressOverallDone;
  220. bool FContinue;
  221. virtual void __fastcall ResetTransfer();
  222. void __fastcall Input(const UnicodeString Prompt, UnicodeString & Str, bool AllowEmpty);
  223. void __fastcall TerminalInformation(
  224. TTerminal * Terminal, const UnicodeString & Str, int Phase, const UnicodeString & Additional);
  225. void __fastcall TerminalOperationProgress(TFileOperationProgressType & ProgressData);
  226. void __fastcall TerminalOperationFinished(TFileOperation Operation, TOperationSide Side,
  227. bool Temp, const UnicodeString & FileName, bool Success, bool NotCancelled,
  228. TOnceDoneOperation & OnceDoneOperation);
  229. void __fastcall PrintActiveSession();
  230. TTerminal * __fastcall FindSession(const UnicodeString Index);
  231. void __fastcall FreeTerminal(TTerminal * Terminal);
  232. void __fastcall PrintProgress(bool First, const UnicodeString Str);
  233. bool __fastcall QueryCancel();
  234. void __fastcall TerminalSynchronizeDirectory(
  235. const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,
  236. bool & Continue, bool Collect, const TSynchronizeOptions * Options);
  237. void __fastcall DoChangeLocalDirectory(UnicodeString Directory);
  238. void __fastcall DoClose(TTerminal * Terminal);
  239. virtual bool __fastcall HandleExtendedException(Exception * E,
  240. TTerminal * Terminal = NULL);
  241. void __fastcall TerminalPromptUser(TTerminal * Terminal, TPromptKind Kind,
  242. UnicodeString Name, UnicodeString Instructions, TStrings * Prompts,
  243. TStrings * Results, bool & Result, void * Arg);
  244. void __fastcall TerminalInitializeLog(TObject * Sender);
  245. inline bool __fastcall Synchronizing();
  246. inline void __fastcall ShowPendingProgress();
  247. virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,
  248. const UnicodeString & Command, const UnicodeString & Params);
  249. UnicodeString __fastcall MaskPasswordInCommand(const UnicodeString & FullCommand,
  250. const UnicodeString & Command);
  251. void __fastcall ExitProc(TScriptProcParams * Parameters);
  252. void __fastcall OpenProc(TScriptProcParams * Parameters);
  253. void __fastcall CloseProc(TScriptProcParams * Parameters);
  254. void __fastcall SessionProc(TScriptProcParams * Parameters);
  255. void __fastcall LPwdProc(TScriptProcParams * Parameters);
  256. void __fastcall LCdProc(TScriptProcParams * Parameters);
  257. void __fastcall LLsProc(TScriptProcParams * Parameters);
  258. };
  259. //---------------------------------------------------------------------------
  260. #define COPYID_COMMAND L"copyid"
  261. #define EXIT_COMMAND L"exit"
  262. //---------------------------------------------------------------------------
  263. #endif