SessionData.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  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. //---------------------------------------------------------------------------
  11. #define SET_SESSION_PROPERTY(Property) \
  12. if (F##Property != value) { F##Property = value; Modify(); }
  13. //---------------------------------------------------------------------------
  14. enum TCipher { cipWarn, cip3DES, cipBlowfish, cipAES, cipDES, cipArcfour };
  15. #define CIPHER_COUNT (cipArcfour+1)
  16. enum TProtocol { ptRaw, ptTelnet, ptRLogin, ptSSH };
  17. #define PROTOCOL_COUNT (ptSSH+1)
  18. // explicit values to skip obsoleted fsExternalSSH, fsExternalSFTP
  19. enum TFSProtocol { fsSCPonly = 0, fsSFTP = 1, fsSFTPonly = 2, fsFTP = 5 };
  20. #define FSPROTOCOL_COUNT (fsFTP+1)
  21. enum TProxyMethod { pmNone, pmSocks4, pmSocks5, pmHTTP, pmTelnet, pmCmd };
  22. enum TSshProt { ssh1only, ssh1, ssh2, ssh2only };
  23. enum TKex { kexWarn, kexDHGroup1, kexDHGroup14, kexDHGEx, kexRSA };
  24. #define KEX_COUNT (kexRSA+1)
  25. enum TSshBug { sbIgnore1, sbPlainPW1, sbRSA1, sbHMAC2, sbDeriveKey2, sbRSAPad2,
  26. sbRekey2, sbPKSessID2, sbMaxPkt2 };
  27. #define BUG_COUNT (sbMaxPkt2+1)
  28. enum TSftpBug { sbSymlink, sbSignedTS };
  29. #define SFTP_BUG_COUNT (sbSignedTS+1)
  30. enum TPingType { ptOff, ptNullPacket, ptDummyCommand };
  31. enum TAddressFamily { afAuto, afIPv4, afIPv6 };
  32. enum TFtps { ftpsNone, ftpsImplicit, ftpsExplicitSsl, ftpsExplicitTls };
  33. enum TSessionSource { ssNone, ssStored, ssStoredModified };
  34. //---------------------------------------------------------------------------
  35. extern const char CipherNames[CIPHER_COUNT][10];
  36. extern const char KexNames[KEX_COUNT][20];
  37. extern const char ProtocolNames[PROTOCOL_COUNT][10];
  38. extern const char SshProtList[][10];
  39. extern const char ProxyMethodList[][10];
  40. extern const TCipher DefaultCipherList[CIPHER_COUNT];
  41. extern const TKex DefaultKexList[KEX_COUNT];
  42. extern const char FSProtocolNames[FSPROTOCOL_COUNT][11];
  43. //---------------------------------------------------------------------------
  44. class TStoredSessionList;
  45. //---------------------------------------------------------------------------
  46. class TSessionData : public TNamedObject
  47. {
  48. friend class TStoredSessionList;
  49. private:
  50. AnsiString FHostName;
  51. int FPortNumber;
  52. AnsiString FUserName;
  53. AnsiString FPassword;
  54. bool FPasswordless;
  55. int FPingInterval;
  56. TPingType FPingType;
  57. bool FTryAgent;
  58. bool FAgentFwd;
  59. AnsiString FListingCommand;
  60. bool FAuthTIS;
  61. bool FAuthKI;
  62. bool FAuthKIPassword;
  63. bool FAuthGSSAPI;
  64. bool FGSSAPIFwdTGT; // not supported anymore
  65. AnsiString FGSSAPIServerRealm; // not supported anymore
  66. bool FChangeUsername;
  67. bool FCompression;
  68. TSshProt FSshProt;
  69. bool FSsh2DES;
  70. bool FSshNoUserAuth;
  71. TCipher FCiphers[CIPHER_COUNT];
  72. TKex FKex[KEX_COUNT];
  73. bool FClearAliases;
  74. TEOLType FEOLType;
  75. AnsiString FPublicKeyFile;
  76. TProtocol FProtocol;
  77. TFSProtocol FFSProtocol;
  78. bool FModified;
  79. AnsiString FLocalDirectory;
  80. AnsiString FRemoteDirectory;
  81. bool FLockInHome;
  82. bool FSpecial;
  83. bool FUpdateDirectories;
  84. bool FCacheDirectories;
  85. bool FCacheDirectoryChanges;
  86. bool FPreserveDirectoryChanges;
  87. bool FSelected;
  88. bool FLookupUserGroups;
  89. AnsiString FReturnVar;
  90. bool FScp1Compatibility;
  91. AnsiString FShell;
  92. AnsiString FSftpServer;
  93. int FTimeout;
  94. bool FUnsetNationalVars;
  95. bool FIgnoreLsWarnings;
  96. bool FTcpNoDelay;
  97. TProxyMethod FProxyMethod;
  98. AnsiString FProxyHost;
  99. int FProxyPort;
  100. AnsiString FProxyUsername;
  101. AnsiString FProxyPassword;
  102. AnsiString FProxyTelnetCommand;
  103. AnsiString FProxyLocalCommand;
  104. TAutoSwitch FProxyDNS;
  105. bool FProxyLocalhost;
  106. int FFtpProxyLogonType;
  107. TAutoSwitch FBugs[BUG_COUNT];
  108. AnsiString FCustomParam1;
  109. AnsiString FCustomParam2;
  110. bool FResolveSymlinks;
  111. TDateTime FTimeDifference;
  112. int FSFTPDownloadQueue;
  113. int FSFTPUploadQueue;
  114. int FSFTPListingQueue;
  115. int FSFTPMaxVersion;
  116. unsigned long FSFTPMaxPacketSize;
  117. TDSTMode FDSTMode;
  118. TAutoSwitch FSFTPBugs[SFTP_BUG_COUNT];
  119. bool FDeleteToRecycleBin;
  120. bool FOverwrittenToRecycleBin;
  121. AnsiString FRecycleBinPath;
  122. AnsiString FPostLoginCommands;
  123. TAutoSwitch FSCPLsFullTime;
  124. TAutoSwitch FFtpListAll;
  125. TAddressFamily FAddressFamily;
  126. AnsiString FRekeyData;
  127. unsigned int FRekeyTime;
  128. int FColor;
  129. bool FTunnel;
  130. AnsiString FTunnelHostName;
  131. int FTunnelPortNumber;
  132. AnsiString FTunnelUserName;
  133. AnsiString FTunnelPassword;
  134. AnsiString FTunnelPublicKeyFile;
  135. int FTunnelLocalPortNumber;
  136. AnsiString FTunnelPortFwd;
  137. bool FFtpPasvMode;
  138. bool FFtpForcePasvIp;
  139. AnsiString FFtpAccount;
  140. int FFtpPingInterval;
  141. TPingType FFtpPingType;
  142. TFtps FFtps;
  143. TAutoSwitch FNotUtf;
  144. AnsiString FHostKey;
  145. AnsiString FOrigHostName;
  146. int FOrigPortNumber;
  147. TProxyMethod FOrigProxyMethod;
  148. TSessionSource FSource;
  149. void __fastcall SetHostName(AnsiString value);
  150. void __fastcall SetPortNumber(int value);
  151. void __fastcall SetUserName(AnsiString value);
  152. void __fastcall SetPassword(AnsiString value);
  153. AnsiString __fastcall GetPassword();
  154. void __fastcall SetPasswordless(bool value);
  155. void __fastcall SetPingInterval(int value);
  156. void __fastcall SetTryAgent(bool value);
  157. void __fastcall SetAgentFwd(bool value);
  158. void __fastcall SetAuthTIS(bool value);
  159. void __fastcall SetAuthKI(bool value);
  160. void __fastcall SetAuthKIPassword(bool value);
  161. void __fastcall SetAuthGSSAPI(bool value);
  162. void __fastcall SetGSSAPIFwdTGT(bool value);
  163. void __fastcall SetGSSAPIServerRealm(AnsiString value);
  164. void __fastcall SetChangeUsername(bool value);
  165. void __fastcall SetCompression(bool value);
  166. void __fastcall SetSshProt(TSshProt value);
  167. void __fastcall SetSsh2DES(bool value);
  168. void __fastcall SetSshNoUserAuth(bool value);
  169. void __fastcall SetCipher(int Index, TCipher value);
  170. TCipher __fastcall GetCipher(int Index) const;
  171. void __fastcall SetKex(int Index, TKex value);
  172. TKex __fastcall GetKex(int Index) const;
  173. void __fastcall SetPublicKeyFile(AnsiString value);
  174. void __fastcall SetProtocolStr(AnsiString value);
  175. AnsiString __fastcall GetProtocolStr() const;
  176. bool __fastcall GetCanLogin();
  177. void __fastcall SetPingIntervalDT(TDateTime value);
  178. TDateTime __fastcall GetPingIntervalDT();
  179. TDateTime __fastcall GetFtpPingIntervalDT();
  180. void __fastcall SetTimeDifference(TDateTime value);
  181. void __fastcall SetPingType(TPingType value);
  182. AnsiString __fastcall GetSessionName();
  183. bool __fastcall HasSessionName();
  184. AnsiString __fastcall GetDefaultSessionName();
  185. AnsiString __fastcall GetSessionUrl();
  186. void __fastcall SetProtocol(TProtocol value);
  187. void __fastcall SetFSProtocol(TFSProtocol value);
  188. AnsiString __fastcall GetFSProtocolStr();
  189. void __fastcall SetLocalDirectory(AnsiString value);
  190. void __fastcall SetRemoteDirectory(AnsiString value);
  191. void __fastcall SetUpdateDirectories(bool value);
  192. void __fastcall SetCacheDirectories(bool value);
  193. void __fastcall SetCacheDirectoryChanges(bool value);
  194. void __fastcall SetPreserveDirectoryChanges(bool value);
  195. void __fastcall SetLockInHome(bool value);
  196. void __fastcall SetSpecial(bool value);
  197. AnsiString __fastcall GetInfoTip();
  198. bool __fastcall GetDefaultShell();
  199. void __fastcall SetDetectReturnVar(bool value);
  200. bool __fastcall GetDetectReturnVar();
  201. void __fastcall SetListingCommand(AnsiString value);
  202. void __fastcall SetClearAliases(bool value);
  203. void __fastcall SetDefaultShell(bool value);
  204. void __fastcall SetEOLType(TEOLType value);
  205. void __fastcall SetLookupUserGroups(bool value);
  206. void __fastcall SetReturnVar(AnsiString value);
  207. void __fastcall SetScp1Compatibility(bool value);
  208. void __fastcall SetShell(AnsiString value);
  209. void __fastcall SetSftpServer(AnsiString value);
  210. void __fastcall SetTimeout(int value);
  211. void __fastcall SetUnsetNationalVars(bool value);
  212. void __fastcall SetIgnoreLsWarnings(bool value);
  213. void __fastcall SetTcpNoDelay(bool value);
  214. AnsiString __fastcall GetSshProtStr();
  215. bool __fastcall GetUsesSsh();
  216. void __fastcall SetCipherList(AnsiString value);
  217. AnsiString __fastcall GetCipherList() const;
  218. void __fastcall SetKexList(AnsiString value);
  219. AnsiString __fastcall GetKexList() const;
  220. void __fastcall SetProxyMethod(TProxyMethod value);
  221. void __fastcall SetProxyHost(AnsiString value);
  222. void __fastcall SetProxyPort(int value);
  223. void __fastcall SetProxyUsername(AnsiString value);
  224. void __fastcall SetProxyPassword(AnsiString value);
  225. void __fastcall SetProxyTelnetCommand(AnsiString value);
  226. void __fastcall SetProxyLocalCommand(AnsiString value);
  227. void __fastcall SetProxyDNS(TAutoSwitch value);
  228. void __fastcall SetProxyLocalhost(bool value);
  229. AnsiString __fastcall GetProxyPassword() const;
  230. void __fastcall SetFtpProxyLogonType(int value);
  231. void __fastcall SetBug(TSshBug Bug, TAutoSwitch value);
  232. TAutoSwitch __fastcall GetBug(TSshBug Bug) const;
  233. AnsiString __fastcall GetSessionKey();
  234. void __fastcall SetCustomParam1(AnsiString value);
  235. void __fastcall SetCustomParam2(AnsiString value);
  236. void __fastcall SetResolveSymlinks(bool value);
  237. void __fastcall SetSFTPDownloadQueue(int value);
  238. void __fastcall SetSFTPUploadQueue(int value);
  239. void __fastcall SetSFTPListingQueue(int value);
  240. void __fastcall SetSFTPMaxVersion(int value);
  241. void __fastcall SetSFTPMaxPacketSize(unsigned long value);
  242. void __fastcall SetSFTPBug(TSftpBug Bug, TAutoSwitch value);
  243. TAutoSwitch __fastcall GetSFTPBug(TSftpBug Bug) const;
  244. void __fastcall SetSCPLsFullTime(TAutoSwitch value);
  245. void __fastcall SetFtpListAll(TAutoSwitch value);
  246. AnsiString __fastcall GetStorageKey();
  247. AnsiString __fastcall GetInternalStorageKey();
  248. void __fastcall SetDSTMode(TDSTMode value);
  249. void __fastcall SetDeleteToRecycleBin(bool value);
  250. void __fastcall SetOverwrittenToRecycleBin(bool value);
  251. void __fastcall SetRecycleBinPath(AnsiString value);
  252. void __fastcall SetPostLoginCommands(AnsiString value);
  253. void __fastcall SetAddressFamily(TAddressFamily value);
  254. void __fastcall SetRekeyData(AnsiString value);
  255. void __fastcall SetRekeyTime(unsigned int value);
  256. void __fastcall SetColor(int value);
  257. void __fastcall SetTunnel(bool value);
  258. void __fastcall SetTunnelHostName(AnsiString value);
  259. void __fastcall SetTunnelPortNumber(int value);
  260. void __fastcall SetTunnelUserName(AnsiString value);
  261. void __fastcall SetTunnelPassword(AnsiString value);
  262. AnsiString __fastcall GetTunnelPassword();
  263. void __fastcall SetTunnelPublicKeyFile(AnsiString value);
  264. void __fastcall SetTunnelPortFwd(AnsiString value);
  265. void __fastcall SetTunnelLocalPortNumber(int value);
  266. bool __fastcall GetTunnelAutoassignLocalPortNumber();
  267. void __fastcall SetFtpPasvMode(bool value);
  268. void __fastcall SetFtpForcePasvIp(bool value);
  269. void __fastcall SetFtpAccount(AnsiString value);
  270. void __fastcall SetFtpPingInterval(int value);
  271. void __fastcall SetFtpPingType(TPingType value);
  272. void __fastcall SetFtps(TFtps value);
  273. void __fastcall SetNotUtf(TAutoSwitch value);
  274. void __fastcall SetHostKey(AnsiString value);
  275. TDateTime __fastcall GetTimeoutDT();
  276. void __fastcall SavePasswords(THierarchicalStorage * Storage, bool PuttyExport);
  277. AnsiString __fastcall GetLocalName();
  278. void __fastcall Modify();
  279. AnsiString __fastcall GetSource();
  280. static AnsiString __fastcall EncryptPassword(const AnsiString & Password, AnsiString Key);
  281. static AnsiString __fastcall DecryptPassword(const AnsiString & Password, AnsiString Key);
  282. static AnsiString __fastcall StronglyRecryptPassword(const AnsiString & Password, AnsiString Key);
  283. __property AnsiString InternalStorageKey = { read = GetInternalStorageKey };
  284. public:
  285. __fastcall TSessionData(AnsiString aName);
  286. void __fastcall Default();
  287. void __fastcall NonPersistant();
  288. void __fastcall Load(THierarchicalStorage * Storage);
  289. void __fastcall Save(THierarchicalStorage * Storage, bool PuttyExport,
  290. const TSessionData * Default = NULL);
  291. void __fastcall SaveRecryptedPasswords(THierarchicalStorage * Storage);
  292. void __fastcall RecryptPasswords();
  293. bool __fastcall HasAnyPassword();
  294. void __fastcall Remove();
  295. virtual void __fastcall Assign(TPersistent * Source);
  296. bool __fastcall ParseUrl(AnsiString Url, TOptions * Options,
  297. TStoredSessionList * StoredSessions, bool & DefaultsOnly,
  298. AnsiString * FileName, bool * AProtocolDefined);
  299. bool __fastcall ParseOptions(TOptions * Options);
  300. void __fastcall ConfigureTunnel(int PortNumber);
  301. void __fastcall RollbackTunnel();
  302. void __fastcall ExpandEnvironmentVariables();
  303. static void __fastcall ValidatePath(const AnsiString Path);
  304. static void __fastcall ValidateName(const AnsiString Name);
  305. __property AnsiString HostName = { read=FHostName, write=SetHostName };
  306. __property int PortNumber = { read=FPortNumber, write=SetPortNumber };
  307. __property AnsiString UserName = { read=FUserName, write=SetUserName };
  308. __property AnsiString Password = { read=GetPassword, write=SetPassword };
  309. __property bool Passwordless = { read=FPasswordless, write=SetPasswordless };
  310. __property int PingInterval = { read=FPingInterval, write=SetPingInterval };
  311. __property bool TryAgent = { read=FTryAgent, write=SetTryAgent };
  312. __property bool AgentFwd = { read=FAgentFwd, write=SetAgentFwd };
  313. __property AnsiString ListingCommand = { read = FListingCommand, write = SetListingCommand };
  314. __property bool AuthTIS = { read=FAuthTIS, write=SetAuthTIS };
  315. __property bool AuthKI = { read=FAuthKI, write=SetAuthKI };
  316. __property bool AuthKIPassword = { read=FAuthKIPassword, write=SetAuthKIPassword };
  317. __property bool AuthGSSAPI = { read=FAuthGSSAPI, write=SetAuthGSSAPI };
  318. __property bool GSSAPIFwdTGT = { read=FGSSAPIFwdTGT, write=SetGSSAPIFwdTGT };
  319. __property AnsiString GSSAPIServerRealm = { read=FGSSAPIServerRealm, write=SetGSSAPIServerRealm };
  320. __property bool ChangeUsername = { read=FChangeUsername, write=SetChangeUsername };
  321. __property bool Compression = { read=FCompression, write=SetCompression };
  322. __property TSshProt SshProt = { read=FSshProt, write=SetSshProt };
  323. __property bool UsesSsh = { read = GetUsesSsh };
  324. __property bool Ssh2DES = { read=FSsh2DES, write=SetSsh2DES };
  325. __property bool SshNoUserAuth = { read=FSshNoUserAuth, write=SetSshNoUserAuth };
  326. __property TCipher Cipher[int Index] = { read=GetCipher, write=SetCipher };
  327. __property TKex Kex[int Index] = { read=GetKex, write=SetKex };
  328. __property AnsiString PublicKeyFile = { read=FPublicKeyFile, write=SetPublicKeyFile };
  329. __property TProtocol Protocol = { read=FProtocol, write=SetProtocol };
  330. __property AnsiString ProtocolStr = { read=GetProtocolStr, write=SetProtocolStr };
  331. __property TFSProtocol FSProtocol = { read=FFSProtocol, write=SetFSProtocol };
  332. __property AnsiString FSProtocolStr = { read=GetFSProtocolStr };
  333. __property bool Modified = { read=FModified, write=FModified };
  334. __property bool CanLogin = { read=GetCanLogin };
  335. __property bool ClearAliases = { read = FClearAliases, write = SetClearAliases };
  336. __property TDateTime PingIntervalDT = { read = GetPingIntervalDT, write = SetPingIntervalDT };
  337. __property TDateTime TimeDifference = { read = FTimeDifference, write = SetTimeDifference };
  338. __property TPingType PingType = { read = FPingType, write = SetPingType };
  339. __property AnsiString SessionName = { read=GetSessionName };
  340. __property AnsiString DefaultSessionName = { read=GetDefaultSessionName };
  341. __property AnsiString SessionUrl = { read=GetSessionUrl };
  342. __property AnsiString LocalDirectory = { read=FLocalDirectory, write=SetLocalDirectory };
  343. __property AnsiString RemoteDirectory = { read=FRemoteDirectory, write=SetRemoteDirectory };
  344. __property bool UpdateDirectories = { read=FUpdateDirectories, write=SetUpdateDirectories };
  345. __property bool CacheDirectories = { read=FCacheDirectories, write=SetCacheDirectories };
  346. __property bool CacheDirectoryChanges = { read=FCacheDirectoryChanges, write=SetCacheDirectoryChanges };
  347. __property bool PreserveDirectoryChanges = { read=FPreserveDirectoryChanges, write=SetPreserveDirectoryChanges };
  348. __property bool LockInHome = { read=FLockInHome, write=SetLockInHome };
  349. __property bool Special = { read=FSpecial, write=SetSpecial };
  350. __property bool Selected = { read=FSelected, write=FSelected };
  351. __property AnsiString InfoTip = { read=GetInfoTip };
  352. __property bool DefaultShell = { read = GetDefaultShell, write = SetDefaultShell };
  353. __property bool DetectReturnVar = { read = GetDetectReturnVar, write = SetDetectReturnVar };
  354. __property TEOLType EOLType = { read = FEOLType, write = SetEOLType };
  355. __property bool LookupUserGroups = { read = FLookupUserGroups, write = SetLookupUserGroups };
  356. __property AnsiString ReturnVar = { read = FReturnVar, write = SetReturnVar };
  357. __property bool Scp1Compatibility = { read = FScp1Compatibility, write = SetScp1Compatibility };
  358. __property AnsiString Shell = { read = FShell, write = SetShell };
  359. __property AnsiString SftpServer = { read = FSftpServer, write = SetSftpServer };
  360. __property int Timeout = { read = FTimeout, write = SetTimeout };
  361. __property TDateTime TimeoutDT = { read = GetTimeoutDT };
  362. __property bool UnsetNationalVars = { read = FUnsetNationalVars, write = SetUnsetNationalVars };
  363. __property bool IgnoreLsWarnings = { read=FIgnoreLsWarnings, write=SetIgnoreLsWarnings };
  364. __property bool TcpNoDelay = { read=FTcpNoDelay, write=SetTcpNoDelay };
  365. __property AnsiString SshProtStr = { read=GetSshProtStr };
  366. __property AnsiString CipherList = { read=GetCipherList, write=SetCipherList };
  367. __property AnsiString KexList = { read=GetKexList, write=SetKexList };
  368. __property TProxyMethod ProxyMethod = { read=FProxyMethod, write=SetProxyMethod };
  369. __property AnsiString ProxyHost = { read=FProxyHost, write=SetProxyHost };
  370. __property int ProxyPort = { read=FProxyPort, write=SetProxyPort };
  371. __property AnsiString ProxyUsername = { read=FProxyUsername, write=SetProxyUsername };
  372. __property AnsiString ProxyPassword = { read=GetProxyPassword, write=SetProxyPassword };
  373. __property AnsiString ProxyTelnetCommand = { read=FProxyTelnetCommand, write=SetProxyTelnetCommand };
  374. __property AnsiString ProxyLocalCommand = { read=FProxyLocalCommand, write=SetProxyLocalCommand };
  375. __property TAutoSwitch ProxyDNS = { read=FProxyDNS, write=SetProxyDNS };
  376. __property bool ProxyLocalhost = { read=FProxyLocalhost, write=SetProxyLocalhost };
  377. __property int FtpProxyLogonType = { read=FFtpProxyLogonType, write=SetFtpProxyLogonType };
  378. __property TAutoSwitch Bug[TSshBug Bug] = { read=GetBug, write=SetBug };
  379. __property AnsiString CustomParam1 = { read = FCustomParam1, write = SetCustomParam1 };
  380. __property AnsiString CustomParam2 = { read = FCustomParam2, write = SetCustomParam2 };
  381. __property AnsiString SessionKey = { read = GetSessionKey };
  382. __property bool ResolveSymlinks = { read = FResolveSymlinks, write = SetResolveSymlinks };
  383. __property int SFTPDownloadQueue = { read = FSFTPDownloadQueue, write = SetSFTPDownloadQueue };
  384. __property int SFTPUploadQueue = { read = FSFTPUploadQueue, write = SetSFTPUploadQueue };
  385. __property int SFTPListingQueue = { read = FSFTPListingQueue, write = SetSFTPListingQueue };
  386. __property int SFTPMaxVersion = { read = FSFTPMaxVersion, write = SetSFTPMaxVersion };
  387. __property unsigned long SFTPMaxPacketSize = { read = FSFTPMaxPacketSize, write = SetSFTPMaxPacketSize };
  388. __property TAutoSwitch SFTPBug[TSftpBug Bug] = { read=GetSFTPBug, write=SetSFTPBug };
  389. __property TAutoSwitch SCPLsFullTime = { read = FSCPLsFullTime, write = SetSCPLsFullTime };
  390. __property TAutoSwitch FtpListAll = { read = FFtpListAll, write = SetFtpListAll };
  391. __property TDSTMode DSTMode = { read = FDSTMode, write = SetDSTMode };
  392. __property bool DeleteToRecycleBin = { read = FDeleteToRecycleBin, write = SetDeleteToRecycleBin };
  393. __property bool OverwrittenToRecycleBin = { read = FOverwrittenToRecycleBin, write = SetOverwrittenToRecycleBin };
  394. __property AnsiString RecycleBinPath = { read = FRecycleBinPath, write = SetRecycleBinPath };
  395. __property AnsiString PostLoginCommands = { read = FPostLoginCommands, write = SetPostLoginCommands };
  396. __property TAddressFamily AddressFamily = { read = FAddressFamily, write = SetAddressFamily };
  397. __property AnsiString RekeyData = { read = FRekeyData, write = SetRekeyData };
  398. __property unsigned int RekeyTime = { read = FRekeyTime, write = SetRekeyTime };
  399. __property int Color = { read = FColor, write = SetColor };
  400. __property bool Tunnel = { read = FTunnel, write = SetTunnel };
  401. __property AnsiString TunnelHostName = { read = FTunnelHostName, write = SetTunnelHostName };
  402. __property int TunnelPortNumber = { read = FTunnelPortNumber, write = SetTunnelPortNumber };
  403. __property AnsiString TunnelUserName = { read = FTunnelUserName, write = SetTunnelUserName };
  404. __property AnsiString TunnelPassword = { read = GetTunnelPassword, write = SetTunnelPassword };
  405. __property AnsiString TunnelPublicKeyFile = { read = FTunnelPublicKeyFile, write = SetTunnelPublicKeyFile };
  406. __property bool TunnelAutoassignLocalPortNumber = { read = GetTunnelAutoassignLocalPortNumber };
  407. __property int TunnelLocalPortNumber = { read = FTunnelLocalPortNumber, write = SetTunnelLocalPortNumber };
  408. __property AnsiString TunnelPortFwd = { read = FTunnelPortFwd, write = SetTunnelPortFwd };
  409. __property bool FtpPasvMode = { read = FFtpPasvMode, write = SetFtpPasvMode };
  410. __property bool FtpForcePasvIp = { read = FFtpForcePasvIp, write = SetFtpForcePasvIp };
  411. __property AnsiString FtpAccount = { read = FFtpAccount, write = SetFtpAccount };
  412. __property int FtpPingInterval = { read=FFtpPingInterval, write=SetFtpPingInterval };
  413. __property TDateTime FtpPingIntervalDT = { read=GetFtpPingIntervalDT };
  414. __property TPingType FtpPingType = { read = FFtpPingType, write = SetFtpPingType };
  415. __property TFtps Ftps = { read = FFtps, write = SetFtps };
  416. __property TAutoSwitch NotUtf = { read = FNotUtf, write = SetNotUtf };
  417. __property AnsiString HostKey = { read = FHostKey, write = SetHostKey };
  418. __property AnsiString StorageKey = { read = GetStorageKey };
  419. __property AnsiString OrigHostName = { read = FOrigHostName };
  420. __property int OrigPortNumber = { read = FOrigPortNumber };
  421. __property AnsiString LocalName = { read = GetLocalName };
  422. __property AnsiString Source = { read = GetSource };
  423. };
  424. //---------------------------------------------------------------------------
  425. class TStoredSessionList : public TNamedObjectList
  426. {
  427. public:
  428. __fastcall TStoredSessionList(bool aReadOnly = false);
  429. void __fastcall Load(AnsiString aKey, bool UseDefaults);
  430. void __fastcall Load();
  431. void __fastcall Save(bool All, bool Explicit);
  432. void __fastcall Saved();
  433. void __fastcall Export(const AnsiString FileName);
  434. void __fastcall Load(THierarchicalStorage * Storage, bool AsModified = false,
  435. bool UseDefaults = false);
  436. void __fastcall Save(THierarchicalStorage * Storage, bool All = false);
  437. void __fastcall SelectAll(bool Select);
  438. void __fastcall Import(TStoredSessionList * From, bool OnlySelected);
  439. void __fastcall RecryptPasswords();
  440. TSessionData * __fastcall AtSession(int Index)
  441. { return (TSessionData*)AtObject(Index); }
  442. void __fastcall SelectSessionsToImport(TStoredSessionList * Dest, bool SSHOnly);
  443. void __fastcall Cleanup();
  444. int __fastcall IndexOf(TSessionData * Data);
  445. TSessionData * __fastcall NewSession(AnsiString SessionName, TSessionData * Session);
  446. TSessionData * __fastcall ParseUrl(AnsiString Url, TOptions * Options, bool & DefaultsOnly,
  447. AnsiString * FileName = NULL, bool * ProtocolDefined = NULL);
  448. virtual __fastcall ~TStoredSessionList();
  449. __property TSessionData * Sessions[int Index] = { read=AtSession };
  450. __property TSessionData * DefaultSettings = { read=FDefaultSettings, write=SetDefaultSettings };
  451. static void __fastcall ImportHostKeys(const AnsiString TargetKey,
  452. const AnsiString SourceKey, TStoredSessionList * Sessions,
  453. bool OnlySelected);
  454. private:
  455. TSessionData * FDefaultSettings;
  456. bool FReadOnly;
  457. void __fastcall SetDefaultSettings(TSessionData * value);
  458. void __fastcall DoSave(THierarchicalStorage * Storage, bool All, bool RecryptPasswordOnly);
  459. void __fastcall DoSave(bool All, bool Explicit, bool RecryptPasswordOnly);
  460. void __fastcall DoSave(THierarchicalStorage * Storage,
  461. TSessionData * Data, bool All, bool RecryptPasswordOnly,
  462. TSessionData * FactoryDefaults);
  463. };
  464. //---------------------------------------------------------------------------
  465. #endif