SessionData.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. //---------------------------------------------------------------------------
  2. #ifndef SessionDataH
  3. #define SessionDataH
  4. #include "Common.h"
  5. #include "Option.h"
  6. #include "FileBuffer.h"
  7. #include "NamedObjs.h"
  8. #include "HierarchicalStorage.h"
  9. #include "Configuration.h"
  10. #include <Xml.XMLIntf.hpp>
  11. //---------------------------------------------------------------------------
  12. #define SET_SESSION_PROPERTY(Property) \
  13. if (F##Property != value) { F##Property = value; Modify(); }
  14. //---------------------------------------------------------------------------
  15. enum TCipher { cipWarn, cip3DES, cipBlowfish, cipAES, cipDES, cipArcfour };
  16. #define CIPHER_COUNT (cipArcfour+1)
  17. // explicit values to skip obsoleted fsExternalSSH, fsExternalSFTP
  18. enum TFSProtocol { fsSCPonly = 0, fsSFTP = 1, fsSFTPonly = 2, fsFTP = 5, fsWebDAV = 6 };
  19. #define FSPROTOCOL_COUNT (fsWebDAV+1)
  20. enum TProxyMethod { pmNone, pmSocks4, pmSocks5, pmHTTP, pmTelnet, pmCmd };
  21. enum TSshProt { ssh1only, ssh1, ssh2, ssh2only };
  22. enum TKex { kexWarn, kexDHGroup1, kexDHGroup14, kexDHGEx, kexRSA };
  23. #define KEX_COUNT (kexRSA+1)
  24. enum TSshBug { sbIgnore1, sbPlainPW1, sbRSA1, sbHMAC2, sbDeriveKey2, sbRSAPad2,
  25. sbPKSessID2, sbRekey2, sbMaxPkt2, sbIgnore2, sbOldGex2, sbWinAdj };
  26. #define BUG_COUNT (sbWinAdj+1)
  27. enum TSftpBug { sbSymlink, sbSignedTS };
  28. #define SFTP_BUG_COUNT (sbSignedTS+1)
  29. enum TPingType { ptOff, ptNullPacket, ptDummyCommand };
  30. enum TAddressFamily { afAuto, afIPv4, afIPv6 };
  31. enum TFtps { ftpsNone, ftpsImplicit, ftpsExplicitSsl, ftpsExplicitTls };
  32. // has to match SSL_VERSION_XXX constants in AsyncSslSocketLayer.h
  33. enum TTlsVersion { ssl2 = 2, ssl3 = 3, tls10 = 10, tls11 = 11, tls12 = 12 };
  34. enum TSessionSource { ssNone, ssStored, ssStoredModified };
  35. enum TSessionUrlFlags
  36. {
  37. sufSpecific = 0x01,
  38. sufUserName = 0x02,
  39. sufPassword = 0x04,
  40. sufHostKey = 0x08,
  41. sufComplete = sufUserName | sufPassword | sufHostKey
  42. };
  43. //---------------------------------------------------------------------------
  44. extern const wchar_t CipherNames[CIPHER_COUNT][10];
  45. extern const wchar_t KexNames[KEX_COUNT][20];
  46. extern const wchar_t SshProtList[][10];
  47. extern const wchar_t ProxyMethodList[][10];
  48. extern const TCipher DefaultCipherList[CIPHER_COUNT];
  49. extern const TKex DefaultKexList[KEX_COUNT];
  50. extern const wchar_t FSProtocolNames[FSPROTOCOL_COUNT][16];
  51. extern const int DefaultSendBuf;
  52. extern const UnicodeString AnonymousUserName;
  53. extern const UnicodeString AnonymousPassword;
  54. extern const int SshPortNumber;
  55. extern const int FtpPortNumber;
  56. extern const int FtpsImplicitPortNumber;
  57. extern const int HTTPPortNumber;
  58. extern const int HTTPSPortNumber;
  59. extern const int TelnetPortNumber;
  60. extern const int ProxyPortNumber;
  61. extern const UnicodeString PuttySshProtocol;
  62. extern const UnicodeString PuttyTelnetProtocol;
  63. extern const UnicodeString SftpProtocol;
  64. extern const UnicodeString ScpProtocol;
  65. extern const UnicodeString FtpProtocol;
  66. extern const UnicodeString FtpsProtocol;
  67. extern const UnicodeString WebDAVProtocol;
  68. extern const UnicodeString WebDAVSProtocol;
  69. extern const UnicodeString ProtocolSeparator;
  70. extern const UnicodeString WinSCPProtocolPrefix;
  71. extern const wchar_t UrlParamSeparator;
  72. extern const wchar_t UrlParamValueSeparator;
  73. extern const UnicodeString UrlHostKeyParamName;
  74. extern const UnicodeString UrlSaveParamName;
  75. //---------------------------------------------------------------------------
  76. class TStoredSessionList;
  77. //---------------------------------------------------------------------------
  78. class TSessionData : public TNamedObject
  79. {
  80. friend class TStoredSessionList;
  81. private:
  82. UnicodeString FHostName;
  83. int FPortNumber;
  84. UnicodeString FUserName;
  85. RawByteString FPassword;
  86. int FPingInterval;
  87. TPingType FPingType;
  88. bool FTryAgent;
  89. bool FAgentFwd;
  90. UnicodeString FListingCommand;
  91. bool FAuthTIS;
  92. bool FAuthKI;
  93. bool FAuthKIPassword;
  94. bool FAuthGSSAPI;
  95. bool FGSSAPIFwdTGT; // not supported anymore
  96. UnicodeString FGSSAPIServerRealm; // not supported anymore
  97. bool FChangeUsername;
  98. bool FCompression;
  99. TSshProt FSshProt;
  100. bool FSsh2DES;
  101. bool FSshNoUserAuth;
  102. TCipher FCiphers[CIPHER_COUNT];
  103. TKex FKex[KEX_COUNT];
  104. bool FClearAliases;
  105. TEOLType FEOLType;
  106. UnicodeString FPublicKeyFile;
  107. UnicodeString FPassphrase;
  108. UnicodeString FPuttyProtocol;
  109. TFSProtocol FFSProtocol;
  110. bool FModified;
  111. UnicodeString FLocalDirectory;
  112. UnicodeString FRemoteDirectory;
  113. bool FLockInHome;
  114. bool FSpecial;
  115. bool FSynchronizeBrowsing;
  116. bool FUpdateDirectories;
  117. bool FCacheDirectories;
  118. bool FCacheDirectoryChanges;
  119. bool FPreserveDirectoryChanges;
  120. bool FSelected;
  121. TAutoSwitch FLookupUserGroups;
  122. UnicodeString FReturnVar;
  123. bool FScp1Compatibility;
  124. UnicodeString FShell;
  125. UnicodeString FSftpServer;
  126. int FTimeout;
  127. bool FUnsetNationalVars;
  128. bool FIgnoreLsWarnings;
  129. bool FTcpNoDelay;
  130. int FSendBuf;
  131. bool FSshSimple;
  132. TProxyMethod FProxyMethod;
  133. UnicodeString FProxyHost;
  134. int FProxyPort;
  135. UnicodeString FProxyUsername;
  136. RawByteString FProxyPassword;
  137. UnicodeString FProxyTelnetCommand;
  138. UnicodeString FProxyLocalCommand;
  139. TAutoSwitch FProxyDNS;
  140. bool FProxyLocalhost;
  141. int FFtpProxyLogonType;
  142. TAutoSwitch FBugs[BUG_COUNT];
  143. UnicodeString FCustomParam1;
  144. UnicodeString FCustomParam2;
  145. bool FResolveSymlinks;
  146. TDateTime FTimeDifference;
  147. bool FTimeDifferenceAuto;
  148. int FSFTPDownloadQueue;
  149. int FSFTPUploadQueue;
  150. int FSFTPListingQueue;
  151. int FSFTPMaxVersion;
  152. unsigned long FSFTPMaxPacketSize;
  153. TDSTMode FDSTMode;
  154. TAutoSwitch FSFTPBugs[SFTP_BUG_COUNT];
  155. bool FDeleteToRecycleBin;
  156. bool FOverwrittenToRecycleBin;
  157. UnicodeString FRecycleBinPath;
  158. UnicodeString FPostLoginCommands;
  159. TAutoSwitch FSCPLsFullTime;
  160. TAutoSwitch FFtpListAll;
  161. TAutoSwitch FFtpHost;
  162. bool FSslSessionReuse;
  163. TAddressFamily FAddressFamily;
  164. UnicodeString FRekeyData;
  165. unsigned int FRekeyTime;
  166. int FColor;
  167. bool FTunnel;
  168. UnicodeString FTunnelHostName;
  169. int FTunnelPortNumber;
  170. UnicodeString FTunnelUserName;
  171. RawByteString FTunnelPassword;
  172. UnicodeString FTunnelPublicKeyFile;
  173. int FTunnelLocalPortNumber;
  174. UnicodeString FTunnelPortFwd;
  175. UnicodeString FTunnelHostKey;
  176. bool FFtpPasvMode;
  177. TAutoSwitch FFtpForcePasvIp;
  178. TAutoSwitch FFtpUseMlsd;
  179. UnicodeString FFtpAccount;
  180. int FFtpPingInterval;
  181. TPingType FFtpPingType;
  182. TAutoSwitch FFtpTransferActiveImmediately;
  183. TFtps FFtps;
  184. TTlsVersion FMinTlsVersion;
  185. TTlsVersion FMaxTlsVersion;
  186. TAutoSwitch FNotUtf;
  187. bool FIsWorkspace;
  188. UnicodeString FLink;
  189. UnicodeString FHostKey;
  190. bool FOverrideCachedHostKey;
  191. UnicodeString FNote;
  192. UnicodeString FOrigHostName;
  193. int FOrigPortNumber;
  194. TProxyMethod FOrigProxyMethod;
  195. TSessionSource FSource;
  196. bool FSaveOnly;
  197. void __fastcall SetHostName(UnicodeString value);
  198. UnicodeString __fastcall GetHostNameExpanded();
  199. void __fastcall SetPortNumber(int value);
  200. void __fastcall SetUserName(UnicodeString value);
  201. UnicodeString __fastcall GetUserNameExpanded();
  202. void __fastcall SetPassword(UnicodeString value);
  203. UnicodeString __fastcall GetPassword() const;
  204. void __fastcall SetPingInterval(int value);
  205. void __fastcall SetTryAgent(bool value);
  206. void __fastcall SetAgentFwd(bool value);
  207. void __fastcall SetAuthTIS(bool value);
  208. void __fastcall SetAuthKI(bool value);
  209. void __fastcall SetAuthKIPassword(bool value);
  210. void __fastcall SetAuthGSSAPI(bool value);
  211. void __fastcall SetGSSAPIFwdTGT(bool value);
  212. void __fastcall SetGSSAPIServerRealm(UnicodeString value);
  213. void __fastcall SetChangeUsername(bool value);
  214. void __fastcall SetCompression(bool value);
  215. void __fastcall SetSshProt(TSshProt value);
  216. void __fastcall SetSsh2DES(bool value);
  217. void __fastcall SetSshNoUserAuth(bool value);
  218. void __fastcall SetCipher(int Index, TCipher value);
  219. TCipher __fastcall GetCipher(int Index) const;
  220. void __fastcall SetKex(int Index, TKex value);
  221. TKex __fastcall GetKex(int Index) const;
  222. void __fastcall SetPublicKeyFile(UnicodeString value);
  223. UnicodeString __fastcall GetPassphrase() const;
  224. void __fastcall SetPassphrase(UnicodeString value);
  225. void __fastcall SetPuttyProtocol(UnicodeString value);
  226. bool __fastcall GetCanLogin();
  227. void __fastcall SetPingIntervalDT(TDateTime value);
  228. TDateTime __fastcall GetPingIntervalDT();
  229. TDateTime __fastcall GetFtpPingIntervalDT();
  230. void __fastcall SetTimeDifference(TDateTime value);
  231. void __fastcall SetTimeDifferenceAuto(bool value);
  232. void __fastcall SetPingType(TPingType value);
  233. UnicodeString __fastcall GetSessionName();
  234. bool __fastcall HasSessionName();
  235. UnicodeString __fastcall GetDefaultSessionName();
  236. UnicodeString __fastcall GetProtocolUrl();
  237. void __fastcall SetFSProtocol(TFSProtocol value);
  238. UnicodeString __fastcall GetFSProtocolStr();
  239. void __fastcall SetLocalDirectory(UnicodeString value);
  240. void __fastcall SetRemoteDirectory(UnicodeString value);
  241. void __fastcall SetSynchronizeBrowsing(bool value);
  242. void __fastcall SetUpdateDirectories(bool value);
  243. void __fastcall SetCacheDirectories(bool value);
  244. void __fastcall SetCacheDirectoryChanges(bool value);
  245. void __fastcall SetPreserveDirectoryChanges(bool value);
  246. void __fastcall SetLockInHome(bool value);
  247. void __fastcall SetSpecial(bool value);
  248. UnicodeString __fastcall GetInfoTip();
  249. bool __fastcall GetDefaultShell();
  250. void __fastcall SetDetectReturnVar(bool value);
  251. bool __fastcall GetDetectReturnVar();
  252. void __fastcall SetListingCommand(UnicodeString value);
  253. void __fastcall SetClearAliases(bool value);
  254. void __fastcall SetDefaultShell(bool value);
  255. void __fastcall SetEOLType(TEOLType value);
  256. void __fastcall SetLookupUserGroups(TAutoSwitch value);
  257. void __fastcall SetReturnVar(UnicodeString value);
  258. void __fastcall SetScp1Compatibility(bool value);
  259. void __fastcall SetShell(UnicodeString value);
  260. void __fastcall SetSftpServer(UnicodeString value);
  261. void __fastcall SetTimeout(int value);
  262. void __fastcall SetUnsetNationalVars(bool value);
  263. void __fastcall SetIgnoreLsWarnings(bool value);
  264. void __fastcall SetTcpNoDelay(bool value);
  265. void __fastcall SetSendBuf(int value);
  266. void __fastcall SetSshSimple(bool value);
  267. UnicodeString __fastcall GetSshProtStr();
  268. bool __fastcall GetUsesSsh();
  269. void __fastcall SetCipherList(UnicodeString value);
  270. UnicodeString __fastcall GetCipherList() const;
  271. void __fastcall SetKexList(UnicodeString value);
  272. UnicodeString __fastcall GetKexList() const;
  273. void __fastcall SetProxyMethod(TProxyMethod value);
  274. void __fastcall SetProxyHost(UnicodeString value);
  275. void __fastcall SetProxyPort(int value);
  276. void __fastcall SetProxyUsername(UnicodeString value);
  277. void __fastcall SetProxyPassword(UnicodeString value);
  278. void __fastcall SetProxyTelnetCommand(UnicodeString value);
  279. void __fastcall SetProxyLocalCommand(UnicodeString value);
  280. void __fastcall SetProxyDNS(TAutoSwitch value);
  281. void __fastcall SetProxyLocalhost(bool value);
  282. UnicodeString __fastcall GetProxyPassword() const;
  283. void __fastcall SetFtpProxyLogonType(int value);
  284. void __fastcall SetBug(TSshBug Bug, TAutoSwitch value);
  285. TAutoSwitch __fastcall GetBug(TSshBug Bug) const;
  286. UnicodeString __fastcall GetSessionKey();
  287. void __fastcall SetCustomParam1(UnicodeString value);
  288. void __fastcall SetCustomParam2(UnicodeString value);
  289. void __fastcall SetResolveSymlinks(bool value);
  290. void __fastcall SetSFTPDownloadQueue(int value);
  291. void __fastcall SetSFTPUploadQueue(int value);
  292. void __fastcall SetSFTPListingQueue(int value);
  293. void __fastcall SetSFTPMaxVersion(int value);
  294. void __fastcall SetSFTPMaxPacketSize(unsigned long value);
  295. void __fastcall SetSFTPBug(TSftpBug Bug, TAutoSwitch value);
  296. TAutoSwitch __fastcall GetSFTPBug(TSftpBug Bug) const;
  297. void __fastcall SetSCPLsFullTime(TAutoSwitch value);
  298. void __fastcall SetFtpListAll(TAutoSwitch value);
  299. void __fastcall SetFtpHost(TAutoSwitch value);
  300. void __fastcall SetSslSessionReuse(bool value);
  301. UnicodeString __fastcall GetStorageKey();
  302. UnicodeString __fastcall GetInternalStorageKey();
  303. UnicodeString __fastcall GetSiteKey();
  304. void __fastcall SetDSTMode(TDSTMode value);
  305. void __fastcall SetDeleteToRecycleBin(bool value);
  306. void __fastcall SetOverwrittenToRecycleBin(bool value);
  307. void __fastcall SetRecycleBinPath(UnicodeString value);
  308. void __fastcall SetPostLoginCommands(UnicodeString value);
  309. void __fastcall SetAddressFamily(TAddressFamily value);
  310. void __fastcall SetRekeyData(UnicodeString value);
  311. void __fastcall SetRekeyTime(unsigned int value);
  312. void __fastcall SetColor(int value);
  313. void __fastcall SetTunnel(bool value);
  314. void __fastcall SetTunnelHostName(UnicodeString value);
  315. void __fastcall SetTunnelPortNumber(int value);
  316. void __fastcall SetTunnelUserName(UnicodeString value);
  317. void __fastcall SetTunnelPassword(UnicodeString value);
  318. UnicodeString __fastcall GetTunnelPassword() const;
  319. void __fastcall SetTunnelPublicKeyFile(UnicodeString value);
  320. void __fastcall SetTunnelPortFwd(UnicodeString value);
  321. void __fastcall SetTunnelLocalPortNumber(int value);
  322. bool __fastcall GetTunnelAutoassignLocalPortNumber();
  323. void __fastcall SetTunnelHostKey(UnicodeString value);
  324. void __fastcall SetFtpPasvMode(bool value);
  325. void __fastcall SetFtpForcePasvIp(TAutoSwitch value);
  326. void __fastcall SetFtpUseMlsd(TAutoSwitch value);
  327. void __fastcall SetFtpAccount(UnicodeString value);
  328. void __fastcall SetFtpPingInterval(int value);
  329. void __fastcall SetFtpPingType(TPingType value);
  330. void __fastcall SetFtpTransferActiveImmediately(TAutoSwitch value);
  331. void __fastcall SetFtps(TFtps value);
  332. void __fastcall SetMinTlsVersion(TTlsVersion value);
  333. void __fastcall SetMaxTlsVersion(TTlsVersion value);
  334. void __fastcall SetNotUtf(TAutoSwitch value);
  335. void __fastcall SetIsWorkspace(bool value);
  336. void __fastcall SetLink(UnicodeString value);
  337. void __fastcall SetHostKey(UnicodeString value);
  338. void __fastcall SetNote(UnicodeString value);
  339. TDateTime __fastcall GetTimeoutDT();
  340. void __fastcall SavePasswords(THierarchicalStorage * Storage, bool PuttyExport);
  341. UnicodeString __fastcall GetLocalName();
  342. UnicodeString __fastcall GetFolderName();
  343. void __fastcall Modify();
  344. UnicodeString __fastcall GetSource();
  345. void __fastcall DoLoad(THierarchicalStorage * Storage, bool & RewritePassword);
  346. UnicodeString __fastcall ReadXmlNode(_di_IXMLNode Node, const UnicodeString & Name, const UnicodeString & Default);
  347. int __fastcall ReadXmlNode(_di_IXMLNode Node, const UnicodeString & Name, int Default);
  348. bool __fastcall IsSame(const TSessionData * Default, bool AdvancedOnly, TStrings * DifferentProperties);
  349. UnicodeString __fastcall GetNameWithoutHiddenPrefix();
  350. bool __fastcall HasStateData();
  351. void __fastcall CopyStateData(TSessionData * SourceData);
  352. static RawByteString __fastcall EncryptPassword(const UnicodeString & Password, UnicodeString Key);
  353. static UnicodeString __fastcall DecryptPassword(const RawByteString & Password, UnicodeString Key);
  354. static RawByteString __fastcall StronglyRecryptPassword(const RawByteString & Password, UnicodeString Key);
  355. static bool __fastcall DoIsProtocolUrl(const UnicodeString & Url, const UnicodeString & Protocol, int & ProtocolLen);
  356. static bool __fastcall IsProtocolUrl(const UnicodeString & Url, const UnicodeString & Protocol, int & ProtocolLen);
  357. __property UnicodeString InternalStorageKey = { read = GetInternalStorageKey };
  358. public:
  359. __fastcall TSessionData(UnicodeString aName);
  360. virtual __fastcall ~TSessionData();
  361. void __fastcall Default();
  362. void __fastcall NonPersistant();
  363. void __fastcall Load(THierarchicalStorage * Storage);
  364. void __fastcall ApplyRawSettings(THierarchicalStorage * Storage);
  365. void __fastcall ImportFromFilezilla(_di_IXMLNode Node, const UnicodeString & Path);
  366. void __fastcall Save(THierarchicalStorage * Storage, bool PuttyExport,
  367. const TSessionData * Default = NULL);
  368. void __fastcall SaveRecryptedPasswords(THierarchicalStorage * Storage);
  369. void __fastcall RecryptPasswords();
  370. bool __fastcall HasPassword();
  371. bool __fastcall HasAnySessionPassword();
  372. bool __fastcall HasAnyPassword();
  373. void __fastcall ClearSessionPasswords();
  374. void __fastcall Remove();
  375. void __fastcall CacheHostKeyIfNotCached();
  376. virtual void __fastcall Assign(TPersistent * Source);
  377. virtual int __fastcall Compare(TNamedObject * Other);
  378. void __fastcall CopyData(TSessionData * Source);
  379. void __fastcall CopyDirectoriesStateData(TSessionData * SourceData);
  380. bool __fastcall ParseUrl(UnicodeString Url, TOptions * Options,
  381. TStoredSessionList * StoredSessions, bool & DefaultsOnly,
  382. UnicodeString * FileName, bool * AProtocolDefined, UnicodeString * MaskedUrl);
  383. bool __fastcall ParseOptions(TOptions * Options);
  384. void __fastcall ConfigureTunnel(int PortNumber);
  385. void __fastcall RollbackTunnel();
  386. void __fastcall ExpandEnvironmentVariables();
  387. bool __fastcall IsSame(const TSessionData * Default, bool AdvancedOnly);
  388. bool __fastcall IsSameSite(const TSessionData * Default);
  389. bool __fastcall IsInFolderOrWorkspace(UnicodeString Name);
  390. UnicodeString __fastcall GenerateSessionUrl(unsigned int Flags);
  391. static void __fastcall ValidatePath(const UnicodeString Path);
  392. static void __fastcall ValidateName(const UnicodeString Name);
  393. static UnicodeString __fastcall MakeValidName(const UnicodeString & Name);
  394. static UnicodeString __fastcall ExtractLocalName(const UnicodeString & Name);
  395. static UnicodeString __fastcall ExtractFolderName(const UnicodeString & Name);
  396. static UnicodeString __fastcall ComposePath(const UnicodeString & Path, const UnicodeString & Name);
  397. static bool __fastcall IsSensitiveOption(const UnicodeString & Option);
  398. static UnicodeString __fastcall FormatSiteKey(const UnicodeString & HostName, int PortNumber);
  399. __property UnicodeString HostName = { read=FHostName, write=SetHostName };
  400. __property UnicodeString HostNameExpanded = { read=GetHostNameExpanded };
  401. __property int PortNumber = { read=FPortNumber, write=SetPortNumber };
  402. __property UnicodeString UserName = { read=FUserName, write=SetUserName };
  403. __property UnicodeString UserNameExpanded = { read=GetUserNameExpanded };
  404. __property UnicodeString Password = { read=GetPassword, write=SetPassword };
  405. __property int PingInterval = { read=FPingInterval, write=SetPingInterval };
  406. __property bool TryAgent = { read=FTryAgent, write=SetTryAgent };
  407. __property bool AgentFwd = { read=FAgentFwd, write=SetAgentFwd };
  408. __property UnicodeString ListingCommand = { read = FListingCommand, write = SetListingCommand };
  409. __property bool AuthTIS = { read=FAuthTIS, write=SetAuthTIS };
  410. __property bool AuthKI = { read=FAuthKI, write=SetAuthKI };
  411. __property bool AuthKIPassword = { read=FAuthKIPassword, write=SetAuthKIPassword };
  412. __property bool AuthGSSAPI = { read=FAuthGSSAPI, write=SetAuthGSSAPI };
  413. __property bool GSSAPIFwdTGT = { read=FGSSAPIFwdTGT, write=SetGSSAPIFwdTGT };
  414. __property UnicodeString GSSAPIServerRealm = { read=FGSSAPIServerRealm, write=SetGSSAPIServerRealm };
  415. __property bool ChangeUsername = { read=FChangeUsername, write=SetChangeUsername };
  416. __property bool Compression = { read=FCompression, write=SetCompression };
  417. __property TSshProt SshProt = { read=FSshProt, write=SetSshProt };
  418. __property bool UsesSsh = { read = GetUsesSsh };
  419. __property bool Ssh2DES = { read=FSsh2DES, write=SetSsh2DES };
  420. __property bool SshNoUserAuth = { read=FSshNoUserAuth, write=SetSshNoUserAuth };
  421. __property TCipher Cipher[int Index] = { read=GetCipher, write=SetCipher };
  422. __property TKex Kex[int Index] = { read=GetKex, write=SetKex };
  423. __property UnicodeString PublicKeyFile = { read=FPublicKeyFile, write=SetPublicKeyFile };
  424. __property UnicodeString Passphrase = { read=GetPassphrase, write=SetPassphrase };
  425. __property UnicodeString PuttyProtocol = { read=FPuttyProtocol, write=SetPuttyProtocol };
  426. __property TFSProtocol FSProtocol = { read=FFSProtocol, write=SetFSProtocol };
  427. __property UnicodeString FSProtocolStr = { read=GetFSProtocolStr };
  428. __property bool Modified = { read=FModified, write=FModified };
  429. __property bool CanLogin = { read=GetCanLogin };
  430. __property bool ClearAliases = { read = FClearAliases, write = SetClearAliases };
  431. __property TDateTime PingIntervalDT = { read = GetPingIntervalDT, write = SetPingIntervalDT };
  432. __property TDateTime TimeDifference = { read = FTimeDifference, write = SetTimeDifference };
  433. __property bool TimeDifferenceAuto = { read = FTimeDifferenceAuto, write = SetTimeDifferenceAuto };
  434. __property TPingType PingType = { read = FPingType, write = SetPingType };
  435. __property UnicodeString SessionName = { read=GetSessionName };
  436. __property UnicodeString DefaultSessionName = { read=GetDefaultSessionName };
  437. __property UnicodeString LocalDirectory = { read=FLocalDirectory, write=SetLocalDirectory };
  438. __property UnicodeString RemoteDirectory = { read=FRemoteDirectory, write=SetRemoteDirectory };
  439. __property bool SynchronizeBrowsing = { read=FSynchronizeBrowsing, write=SetSynchronizeBrowsing };
  440. __property bool UpdateDirectories = { read=FUpdateDirectories, write=SetUpdateDirectories };
  441. __property bool CacheDirectories = { read=FCacheDirectories, write=SetCacheDirectories };
  442. __property bool CacheDirectoryChanges = { read=FCacheDirectoryChanges, write=SetCacheDirectoryChanges };
  443. __property bool PreserveDirectoryChanges = { read=FPreserveDirectoryChanges, write=SetPreserveDirectoryChanges };
  444. __property bool LockInHome = { read=FLockInHome, write=SetLockInHome };
  445. __property bool Special = { read=FSpecial, write=SetSpecial };
  446. __property bool Selected = { read=FSelected, write=FSelected };
  447. __property UnicodeString InfoTip = { read=GetInfoTip };
  448. __property bool DefaultShell = { read = GetDefaultShell, write = SetDefaultShell };
  449. __property bool DetectReturnVar = { read = GetDetectReturnVar, write = SetDetectReturnVar };
  450. __property TEOLType EOLType = { read = FEOLType, write = SetEOLType };
  451. __property TAutoSwitch LookupUserGroups = { read = FLookupUserGroups, write = SetLookupUserGroups };
  452. __property UnicodeString ReturnVar = { read = FReturnVar, write = SetReturnVar };
  453. __property bool Scp1Compatibility = { read = FScp1Compatibility, write = SetScp1Compatibility };
  454. __property UnicodeString Shell = { read = FShell, write = SetShell };
  455. __property UnicodeString SftpServer = { read = FSftpServer, write = SetSftpServer };
  456. __property int Timeout = { read = FTimeout, write = SetTimeout };
  457. __property TDateTime TimeoutDT = { read = GetTimeoutDT };
  458. __property bool UnsetNationalVars = { read = FUnsetNationalVars, write = SetUnsetNationalVars };
  459. __property bool IgnoreLsWarnings = { read=FIgnoreLsWarnings, write=SetIgnoreLsWarnings };
  460. __property bool TcpNoDelay = { read=FTcpNoDelay, write=SetTcpNoDelay };
  461. __property int SendBuf = { read=FSendBuf, write=SetSendBuf };
  462. __property bool SshSimple = { read=FSshSimple, write=SetSshSimple };
  463. __property UnicodeString SshProtStr = { read=GetSshProtStr };
  464. __property UnicodeString CipherList = { read=GetCipherList, write=SetCipherList };
  465. __property UnicodeString KexList = { read=GetKexList, write=SetKexList };
  466. __property TProxyMethod ProxyMethod = { read=FProxyMethod, write=SetProxyMethod };
  467. __property UnicodeString ProxyHost = { read=FProxyHost, write=SetProxyHost };
  468. __property int ProxyPort = { read=FProxyPort, write=SetProxyPort };
  469. __property UnicodeString ProxyUsername = { read=FProxyUsername, write=SetProxyUsername };
  470. __property UnicodeString ProxyPassword = { read=GetProxyPassword, write=SetProxyPassword };
  471. __property UnicodeString ProxyTelnetCommand = { read=FProxyTelnetCommand, write=SetProxyTelnetCommand };
  472. __property UnicodeString ProxyLocalCommand = { read=FProxyLocalCommand, write=SetProxyLocalCommand };
  473. __property TAutoSwitch ProxyDNS = { read=FProxyDNS, write=SetProxyDNS };
  474. __property bool ProxyLocalhost = { read=FProxyLocalhost, write=SetProxyLocalhost };
  475. __property int FtpProxyLogonType = { read=FFtpProxyLogonType, write=SetFtpProxyLogonType };
  476. __property TAutoSwitch Bug[TSshBug Bug] = { read=GetBug, write=SetBug };
  477. __property UnicodeString CustomParam1 = { read = FCustomParam1, write = SetCustomParam1 };
  478. __property UnicodeString CustomParam2 = { read = FCustomParam2, write = SetCustomParam2 };
  479. __property UnicodeString SessionKey = { read = GetSessionKey };
  480. __property bool ResolveSymlinks = { read = FResolveSymlinks, write = SetResolveSymlinks };
  481. __property int SFTPDownloadQueue = { read = FSFTPDownloadQueue, write = SetSFTPDownloadQueue };
  482. __property int SFTPUploadQueue = { read = FSFTPUploadQueue, write = SetSFTPUploadQueue };
  483. __property int SFTPListingQueue = { read = FSFTPListingQueue, write = SetSFTPListingQueue };
  484. __property int SFTPMaxVersion = { read = FSFTPMaxVersion, write = SetSFTPMaxVersion };
  485. __property unsigned long SFTPMaxPacketSize = { read = FSFTPMaxPacketSize, write = SetSFTPMaxPacketSize };
  486. __property TAutoSwitch SFTPBug[TSftpBug Bug] = { read=GetSFTPBug, write=SetSFTPBug };
  487. __property TAutoSwitch SCPLsFullTime = { read = FSCPLsFullTime, write = SetSCPLsFullTime };
  488. __property TAutoSwitch FtpListAll = { read = FFtpListAll, write = SetFtpListAll };
  489. __property TAutoSwitch FtpHost = { read = FFtpHost, write = SetFtpHost };
  490. __property bool SslSessionReuse = { read = FSslSessionReuse, write = SetSslSessionReuse };
  491. __property TDSTMode DSTMode = { read = FDSTMode, write = SetDSTMode };
  492. __property bool DeleteToRecycleBin = { read = FDeleteToRecycleBin, write = SetDeleteToRecycleBin };
  493. __property bool OverwrittenToRecycleBin = { read = FOverwrittenToRecycleBin, write = SetOverwrittenToRecycleBin };
  494. __property UnicodeString RecycleBinPath = { read = FRecycleBinPath, write = SetRecycleBinPath };
  495. __property UnicodeString PostLoginCommands = { read = FPostLoginCommands, write = SetPostLoginCommands };
  496. __property TAddressFamily AddressFamily = { read = FAddressFamily, write = SetAddressFamily };
  497. __property UnicodeString RekeyData = { read = FRekeyData, write = SetRekeyData };
  498. __property unsigned int RekeyTime = { read = FRekeyTime, write = SetRekeyTime };
  499. __property int Color = { read = FColor, write = SetColor };
  500. __property bool Tunnel = { read = FTunnel, write = SetTunnel };
  501. __property UnicodeString TunnelHostName = { read = FTunnelHostName, write = SetTunnelHostName };
  502. __property int TunnelPortNumber = { read = FTunnelPortNumber, write = SetTunnelPortNumber };
  503. __property UnicodeString TunnelUserName = { read = FTunnelUserName, write = SetTunnelUserName };
  504. __property UnicodeString TunnelPassword = { read = GetTunnelPassword, write = SetTunnelPassword };
  505. __property UnicodeString TunnelPublicKeyFile = { read = FTunnelPublicKeyFile, write = SetTunnelPublicKeyFile };
  506. __property bool TunnelAutoassignLocalPortNumber = { read = GetTunnelAutoassignLocalPortNumber };
  507. __property int TunnelLocalPortNumber = { read = FTunnelLocalPortNumber, write = SetTunnelLocalPortNumber };
  508. __property UnicodeString TunnelPortFwd = { read = FTunnelPortFwd, write = SetTunnelPortFwd };
  509. __property UnicodeString TunnelHostKey = { read = FTunnelHostKey, write = SetTunnelHostKey };
  510. __property bool FtpPasvMode = { read = FFtpPasvMode, write = SetFtpPasvMode };
  511. __property TAutoSwitch FtpForcePasvIp = { read = FFtpForcePasvIp, write = SetFtpForcePasvIp };
  512. __property TAutoSwitch FtpUseMlsd = { read = FFtpUseMlsd, write = SetFtpUseMlsd };
  513. __property UnicodeString FtpAccount = { read = FFtpAccount, write = SetFtpAccount };
  514. __property int FtpPingInterval = { read=FFtpPingInterval, write=SetFtpPingInterval };
  515. __property TDateTime FtpPingIntervalDT = { read=GetFtpPingIntervalDT };
  516. __property TPingType FtpPingType = { read = FFtpPingType, write = SetFtpPingType };
  517. __property TAutoSwitch FtpTransferActiveImmediately = { read = FFtpTransferActiveImmediately, write = SetFtpTransferActiveImmediately };
  518. __property TFtps Ftps = { read = FFtps, write = SetFtps };
  519. __property TTlsVersion MinTlsVersion = { read = FMinTlsVersion, write = SetMinTlsVersion };
  520. __property TTlsVersion MaxTlsVersion = { read = FMaxTlsVersion, write = SetMaxTlsVersion };
  521. __property TAutoSwitch NotUtf = { read = FNotUtf, write = SetNotUtf };
  522. __property bool IsWorkspace = { read = FIsWorkspace, write = SetIsWorkspace };
  523. __property UnicodeString Link = { read = FLink, write = SetLink };
  524. __property UnicodeString HostKey = { read = FHostKey, write = SetHostKey };
  525. __property bool OverrideCachedHostKey = { read = FOverrideCachedHostKey };
  526. __property UnicodeString Note = { read = FNote, write = SetNote };
  527. __property UnicodeString StorageKey = { read = GetStorageKey };
  528. __property UnicodeString SiteKey = { read = GetSiteKey };
  529. __property UnicodeString OrigHostName = { read = FOrigHostName };
  530. __property int OrigPortNumber = { read = FOrigPortNumber };
  531. __property UnicodeString LocalName = { read = GetLocalName };
  532. __property UnicodeString FolderName = { read = GetFolderName };
  533. __property UnicodeString Source = { read = GetSource };
  534. __property bool SaveOnly = { read = FSaveOnly };
  535. };
  536. //---------------------------------------------------------------------------
  537. class TStoredSessionList : public TNamedObjectList
  538. {
  539. public:
  540. __fastcall TStoredSessionList(bool aReadOnly = false);
  541. void __fastcall Load();
  542. void __fastcall Save(bool All, bool Explicit);
  543. void __fastcall Saved();
  544. void __fastcall ImportFromFilezilla(const UnicodeString FileName);
  545. void __fastcall Export(const UnicodeString FileName);
  546. void __fastcall Load(THierarchicalStorage * Storage, bool AsModified = false,
  547. bool UseDefaults = false);
  548. void __fastcall Save(THierarchicalStorage * Storage, bool All = false);
  549. void __fastcall SelectAll(bool Select);
  550. void __fastcall Import(TStoredSessionList * From, bool OnlySelected, TList * Imported);
  551. void __fastcall RecryptPasswords(TStrings * RecryptPasswordErrors);
  552. TSessionData * __fastcall AtSession(int Index)
  553. { return (TSessionData*)AtObject(Index); }
  554. void __fastcall SelectSessionsToImport(TStoredSessionList * Dest, bool SSHOnly);
  555. void __fastcall Cleanup();
  556. void __fastcall UpdateStaticUsage();
  557. int __fastcall IndexOf(TSessionData * Data);
  558. TSessionData * __fastcall FindSame(TSessionData * Data);
  559. TSessionData * __fastcall NewSession(UnicodeString SessionName, TSessionData * Session);
  560. void __fastcall NewWorkspace(UnicodeString Name, TList * DataList);
  561. bool __fastcall IsFolder(const UnicodeString & Name);
  562. bool __fastcall IsWorkspace(const UnicodeString & Name);
  563. TSessionData * __fastcall ParseUrl(UnicodeString Url, TOptions * Options, bool & DefaultsOnly,
  564. UnicodeString * FileName = NULL, bool * ProtocolDefined = NULL, UnicodeString * MaskedUrl = NULL);
  565. bool __fastcall IsUrl(UnicodeString Url);
  566. bool __fastcall CanLogin(TSessionData * Data);
  567. void __fastcall GetFolderOrWorkspace(const UnicodeString & Name, TList * List);
  568. TStrings * __fastcall GetFolderOrWorkspaceList(const UnicodeString & Name);
  569. TStrings * __fastcall GetWorkspaces();
  570. bool __fastcall HasAnyWorkspace();
  571. TSessionData * __fastcall SaveWorkspaceData(TSessionData * Data);
  572. virtual __fastcall ~TStoredSessionList();
  573. __property TSessionData * Sessions[int Index] = { read=AtSession };
  574. __property TSessionData * DefaultSettings = { read=FDefaultSettings, write=SetDefaultSettings };
  575. static void __fastcall ImportHostKeys(const UnicodeString TargetKey,
  576. const UnicodeString SourceKey, TStoredSessionList * Sessions,
  577. bool OnlySelected);
  578. private:
  579. TSessionData * FDefaultSettings;
  580. bool FReadOnly;
  581. void __fastcall SetDefaultSettings(TSessionData * value);
  582. void __fastcall DoSave(THierarchicalStorage * Storage, bool All,
  583. bool RecryptPasswordOnly, TStrings * RecryptPasswordErrors);
  584. void __fastcall DoSave(bool All, bool Explicit, bool RecryptPasswordOnly,
  585. TStrings * RecryptPasswordErrors);
  586. void __fastcall DoSave(THierarchicalStorage * Storage,
  587. TSessionData * Data, bool All, bool RecryptPasswordOnly,
  588. TSessionData * FactoryDefaults);
  589. TSessionData * __fastcall ResolveWorkspaceData(TSessionData * Data);
  590. bool __fastcall IsFolderOrWorkspace(const UnicodeString & Name, bool Workspace);
  591. TSessionData * __fastcall CheckIsInFolderOrWorkspaceAndResolve(
  592. TSessionData * Data, const UnicodeString & Name);
  593. void __fastcall ImportLevelFromFilezilla(_di_IXMLNode Node, const UnicodeString & Path);
  594. };
  595. //---------------------------------------------------------------------------
  596. UnicodeString GetExpandedLogFileName(UnicodeString LogFileName, TSessionData * SessionData);
  597. bool __fastcall IsSshProtocol(TFSProtocol FSProtocol);
  598. int __fastcall DefaultPort(TFSProtocol FSProtocol, TFtps Ftps);
  599. //---------------------------------------------------------------------------
  600. #endif