SessionData.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. //---------------------------------------------------------------------------
  2. #ifndef SessionDataH
  3. #define SessionDataH
  4. #include "FileBuffer.h"
  5. #include "NamedObjs.h"
  6. #include "HierarchicalStorage.h"
  7. //---------------------------------------------------------------------------
  8. #define SET_SESSION_PROPERTY(Property) \
  9. if (F##Property != value) { F##Property = value; FModified = true; }
  10. //---------------------------------------------------------------------------
  11. enum TCipher { cipWarn, cip3DES, cipBlowfish, cipAES, cipDES };
  12. #define CIPHER_COUNT (cipDES+1)
  13. enum TProtocol { ptRaw, ptTelnet, ptRLogin, ptSSH };
  14. enum TFSProtocol { fsSCPonly, fsSFTP, fsSFTPonly };
  15. #define FSPROTOCOL_COUNT (fsSFTPonly+1)
  16. enum TProxyType { pxNone, pxHTTP, pxSocks, pxTelnet }; // 0.53b and older
  17. enum TProxyMethod { pmNone, pmSocks4, pmSocks5, pmHTTP, pmTelnet, pmCmd }; // after 0.53b
  18. enum TSshProt { ssh1only, ssh1, ssh2, ssh2only };
  19. enum TSshBug { sbIgnore1, sbPlainPW1, sbRSA1, sbHMAC2, sbDeriveKey2, sbRSAPad2,
  20. sbDHGEx2, sbPKSessID2 };
  21. #define BUG_COUNT (sbPKSessID2+1)
  22. enum TAutoSwitch { asOn, asOff, asAuto };
  23. enum TPingType { ptOff, ptNullPacket, ptDummyCommand };
  24. const puRequireUsername = 0x01;
  25. const puExcludeLeadingSlash = 0x02;
  26. const puExtractFileName = 0x04;
  27. //---------------------------------------------------------------------------
  28. extern const char CipherNames[CIPHER_COUNT][10];
  29. extern const char SshProtList[][10];
  30. extern const char ProxyMethodList[][10];
  31. extern const TCipher DefaultCipherList[CIPHER_COUNT];
  32. extern const char FSProtocolNames[FSPROTOCOL_COUNT][11];
  33. //---------------------------------------------------------------------------
  34. class TSessionData : public TNamedObject
  35. {
  36. private:
  37. AnsiString FHostName;
  38. int FPortNumber;
  39. AnsiString FUserName;
  40. AnsiString FPassword;
  41. int FPingInterval;
  42. TPingType FPingType;
  43. bool FAgentFwd;
  44. bool FAliasGroupList;
  45. bool FAuthTIS;
  46. bool FAuthKI;
  47. bool FAuthKIPassword;
  48. bool FAuthGSSAPI;
  49. bool FCompression;
  50. TSshProt FSshProt;
  51. bool FSsh2DES;
  52. TCipher FCiphers[CIPHER_COUNT];
  53. bool FClearAliases;
  54. TEOLType FEOLType;
  55. AnsiString FPublicKeyFile;
  56. TProtocol FProtocol;
  57. TFSProtocol FFSProtocol;
  58. bool FModified;
  59. AnsiString FLocalDirectory;
  60. AnsiString FRemoteDirectory;
  61. bool FLockInHome;
  62. bool FSpecial;
  63. bool FUpdateDirectories;
  64. bool FCacheDirectories;
  65. bool FCacheDirectoryChanges;
  66. bool FPreserveDirectoryChanges;
  67. bool FSelected;
  68. bool FLookupUserGroups;
  69. AnsiString FReturnVar;
  70. bool FScp1Compatibility;
  71. AnsiString FShell;
  72. int FTimeout;
  73. bool FUnsetNationalVars;
  74. bool FIgnoreLsWarnings;
  75. bool FTcpNoDelay;
  76. TProxyMethod FProxyMethod;
  77. AnsiString FProxyHost;
  78. int FProxyPort;
  79. AnsiString FProxyUsername;
  80. AnsiString FProxyPassword;
  81. AnsiString FProxyTelnetCommand;
  82. TAutoSwitch FProxyDNS;
  83. bool FProxyLocalhost;
  84. TAutoSwitch FBugs[BUG_COUNT];
  85. AnsiString FCustomParam1;
  86. AnsiString FCustomParam2;
  87. bool FResolveSymlinks;
  88. TDateTime FTimeDifference;
  89. int FSFTPDownloadQueue;
  90. int FSFTPUploadQueue;
  91. int FSFTPListingQueue;
  92. int FSFTPMaxVersion;
  93. bool FConsiderDST;
  94. TAutoSwitch FSFTPSymlinkBug;
  95. void __fastcall SetHostName(AnsiString value);
  96. void __fastcall SetPortNumber(int value);
  97. void __fastcall SetUserName(AnsiString value);
  98. void __fastcall SetPassword(AnsiString value);
  99. AnsiString __fastcall GetPassword();
  100. void __fastcall SetPingInterval(int value);
  101. void __fastcall SetAgentFwd(bool value);
  102. void __fastcall SetAuthTIS(bool value);
  103. void __fastcall SetAuthKI(bool value);
  104. void __fastcall SetAuthKIPassword(bool value);
  105. void __fastcall SetAuthGSSAPI(bool value);
  106. void __fastcall SetCompression(bool value);
  107. void __fastcall SetSshProt(TSshProt value);
  108. void __fastcall SetSsh2DES(bool value);
  109. void __fastcall SetCipher(int Index, TCipher value);
  110. TCipher __fastcall GetCipher(int Index) const;
  111. void __fastcall SetPublicKeyFile(AnsiString value);
  112. void __fastcall SetProtocolStr(AnsiString value);
  113. AnsiString __fastcall GetProtocolStr() const;
  114. bool __fastcall GetCanLogin();
  115. void __fastcall SetPingIntervalDT(TDateTime value);
  116. TDateTime __fastcall GetPingIntervalDT();
  117. void __fastcall SetTimeDifference(TDateTime value);
  118. void __fastcall SetPingType(TPingType value);
  119. AnsiString __fastcall GetSessionName();
  120. void __fastcall SetFSProtocol(TFSProtocol value);
  121. AnsiString __fastcall GetFSProtocolStr();
  122. void __fastcall SetLocalDirectory(AnsiString value);
  123. void __fastcall SetRemoteDirectory(AnsiString value);
  124. void __fastcall SetUpdateDirectories(bool value);
  125. void __fastcall SetCacheDirectories(bool value);
  126. void __fastcall SetCacheDirectoryChanges(bool value);
  127. void __fastcall SetPreserveDirectoryChanges(bool value);
  128. void __fastcall SetLockInHome(bool value);
  129. void __fastcall SetSpecial(bool value);
  130. AnsiString __fastcall GetInfoTip();
  131. AnsiString __fastcall GetDefaultLogFileName();
  132. bool __fastcall GetDefaultShell();
  133. void __fastcall SetDetectReturnVar(bool value);
  134. bool __fastcall GetDetectReturnVar();
  135. void __fastcall SetAliasGroupList(bool value);
  136. void __fastcall SetClearAliases(bool value);
  137. void __fastcall SetDefaultShell(bool value);
  138. void __fastcall SetEOLType(TEOLType value);
  139. void __fastcall SetLookupUserGroups(bool value);
  140. void __fastcall SetReturnVar(AnsiString value);
  141. void __fastcall SetScp1Compatibility(bool value);
  142. void __fastcall SetShell(AnsiString value);
  143. void __fastcall SetTimeout(int value);
  144. void __fastcall SetUnsetNationalVars(bool value);
  145. void __fastcall SetIgnoreLsWarnings(bool value);
  146. void __fastcall SetTcpNoDelay(bool value);
  147. AnsiString __fastcall GetSshProtStr();
  148. void __fastcall SetCipherList(AnsiString value);
  149. AnsiString __fastcall GetCipherList() const;
  150. void __fastcall SetProxyMethod(TProxyMethod value);
  151. void __fastcall SetProxyHost(AnsiString value);
  152. void __fastcall SetProxyPort(int value);
  153. void __fastcall SetProxyUsername(AnsiString value);
  154. void __fastcall SetProxyPassword(AnsiString value);
  155. void __fastcall SetProxyTelnetCommand(AnsiString value);
  156. void __fastcall SetProxyDNS(TAutoSwitch value);
  157. void __fastcall SetProxyLocalhost(bool value);
  158. AnsiString __fastcall GetProxyPassword();
  159. void __fastcall SetBug(TSshBug Bug, TAutoSwitch value);
  160. TAutoSwitch __fastcall GetBug(TSshBug Bug) const;
  161. AnsiString __fastcall GetSessionKey();
  162. void __fastcall SetCustomParam1(AnsiString value);
  163. void __fastcall SetCustomParam2(AnsiString value);
  164. void __fastcall SetResolveSymlinks(bool value);
  165. void __fastcall SetSFTPDownloadQueue(int value);
  166. void __fastcall SetSFTPUploadQueue(int value);
  167. void __fastcall SetSFTPListingQueue(int value);
  168. void __fastcall SetSFTPMaxVersion(int value);
  169. void __fastcall SetSFTPSymlinkBug(TAutoSwitch value);
  170. AnsiString __fastcall GetStorageKey();
  171. void __fastcall SetConsiderDST(bool value);
  172. public:
  173. __fastcall TSessionData(AnsiString aName);
  174. void __fastcall Default();
  175. void __fastcall NonPersistant();
  176. virtual void __fastcall StoreToConfig(void * config);
  177. void __fastcall Load(THierarchicalStorage * Storage);
  178. void __fastcall Save(THierarchicalStorage * Storage, bool PuttyExport,
  179. const TSessionData * Default = NULL);
  180. void __fastcall Remove();
  181. virtual void __fastcall Assign(TPersistent * Source);
  182. bool __fastcall ParseUrl(AnsiString Url, int Params, AnsiString * FileName);
  183. static bool __fastcall ParseUrl(AnsiString Url, int Params,
  184. AnsiString * ConnectInfo, AnsiString * HostName, int * PortNumber,
  185. AnsiString * UserName, AnsiString * Password, AnsiString * Path,
  186. AnsiString * FileName);
  187. __property AnsiString HostName = { read=FHostName, write=SetHostName };
  188. __property int PortNumber = { read=FPortNumber, write=SetPortNumber };
  189. __property AnsiString UserName = { read=FUserName, write=SetUserName };
  190. __property AnsiString Password = { read=GetPassword, write=SetPassword };
  191. __property int PingInterval = { read=FPingInterval, write=SetPingInterval };
  192. __property bool AgentFwd = { read=FAgentFwd, write=SetAgentFwd };
  193. __property bool AliasGroupList = { read = FAliasGroupList, write = SetAliasGroupList };
  194. __property bool AuthTIS = { read=FAuthTIS, write=SetAuthTIS };
  195. __property bool AuthKI = { read=FAuthKI, write=SetAuthKI };
  196. __property bool AuthKIPassword = { read=FAuthKIPassword, write=SetAuthKIPassword };
  197. __property bool AuthGSSAPI = { read=FAuthGSSAPI, write=SetAuthGSSAPI };
  198. __property bool Compression = { read=FCompression, write=SetCompression };
  199. __property TSshProt SshProt = { read=FSshProt, write=SetSshProt };
  200. __property bool Ssh2DES = { read=FSsh2DES, write=SetSsh2DES };
  201. __property TCipher Cipher[int Index] = { read=GetCipher, write=SetCipher };
  202. __property AnsiString PublicKeyFile = { read=FPublicKeyFile, write=SetPublicKeyFile };
  203. __property TProtocol Protocol = { read=FProtocol };
  204. __property AnsiString ProtocolStr = { read=GetProtocolStr, write=SetProtocolStr };
  205. __property TFSProtocol FSProtocol = { read=FFSProtocol, write=SetFSProtocol };
  206. __property AnsiString FSProtocolStr = { read=GetFSProtocolStr };
  207. __property bool Modified = { read=FModified, write=FModified };
  208. __property bool CanLogin = { read=GetCanLogin };
  209. __property bool ClearAliases = { read = FClearAliases, write = SetClearAliases };
  210. __property TDateTime PingIntervalDT = { read = GetPingIntervalDT, write = SetPingIntervalDT };
  211. __property TDateTime TimeDifference = { read = FTimeDifference, write = SetTimeDifference };
  212. __property TPingType PingType = { read = FPingType, write = SetPingType };
  213. __property AnsiString SessionName = { read=GetSessionName };
  214. __property AnsiString LocalDirectory = { read=FLocalDirectory, write=SetLocalDirectory };
  215. __property AnsiString RemoteDirectory = { read=FRemoteDirectory, write=SetRemoteDirectory };
  216. __property bool UpdateDirectories = { read=FUpdateDirectories, write=SetUpdateDirectories };
  217. __property bool CacheDirectories = { read=FCacheDirectories, write=SetCacheDirectories };
  218. __property bool CacheDirectoryChanges = { read=FCacheDirectoryChanges, write=SetCacheDirectoryChanges };
  219. __property bool PreserveDirectoryChanges = { read=FPreserveDirectoryChanges, write=SetPreserveDirectoryChanges };
  220. __property bool LockInHome = { read=FLockInHome, write=SetLockInHome };
  221. __property bool Special = { read=FSpecial, write=SetSpecial };
  222. __property bool Selected = { read=FSelected, write=FSelected };
  223. __property AnsiString InfoTip = { read=GetInfoTip };
  224. __property AnsiString DefaultLogFileName = { read=GetDefaultLogFileName };
  225. __property bool DefaultShell = { read = GetDefaultShell, write = SetDefaultShell };
  226. __property bool DetectReturnVar = { read = GetDetectReturnVar, write = SetDetectReturnVar };
  227. __property TEOLType EOLType = { read = FEOLType, write = SetEOLType };
  228. __property bool LookupUserGroups = { read = FLookupUserGroups, write = SetLookupUserGroups };
  229. __property AnsiString ReturnVar = { read = FReturnVar, write = SetReturnVar };
  230. __property bool Scp1Compatibility = { read = FScp1Compatibility, write = SetScp1Compatibility };
  231. __property AnsiString Shell = { read = FShell, write = SetShell };
  232. __property int Timeout = { read = FTimeout, write = SetTimeout };
  233. __property bool UnsetNationalVars = { read = FUnsetNationalVars, write = SetUnsetNationalVars };
  234. __property bool IgnoreLsWarnings = { read=FIgnoreLsWarnings, write=SetIgnoreLsWarnings };
  235. __property bool TcpNoDelay = { read=FTcpNoDelay, write=SetTcpNoDelay };
  236. __property AnsiString SshProtStr = { read=GetSshProtStr };
  237. __property AnsiString CipherList = { read=GetCipherList, write=SetCipherList };
  238. __property TProxyMethod ProxyMethod = { read=FProxyMethod, write=SetProxyMethod };
  239. __property AnsiString ProxyHost = { read=FProxyHost, write=SetProxyHost };
  240. __property int ProxyPort = { read=FProxyPort, write=SetProxyPort };
  241. __property AnsiString ProxyUsername = { read=FProxyUsername, write=SetProxyUsername };
  242. __property AnsiString ProxyPassword = { read=GetProxyPassword, write=SetProxyPassword };
  243. __property AnsiString ProxyTelnetCommand = { read=FProxyTelnetCommand, write=SetProxyTelnetCommand };
  244. __property TAutoSwitch ProxyDNS = { read=FProxyDNS, write=SetProxyDNS };
  245. __property bool ProxyLocalhost = { read=FProxyLocalhost, write=SetProxyLocalhost };
  246. __property TAutoSwitch Bug[TSshBug Bug] = { read=GetBug, write=SetBug };
  247. __property AnsiString CustomParam1 = { read = FCustomParam1, write = SetCustomParam1 };
  248. __property AnsiString CustomParam2 = { read = FCustomParam2, write = SetCustomParam2 };
  249. __property AnsiString SessionKey = { read = GetSessionKey };
  250. __property bool ResolveSymlinks = { read = FResolveSymlinks, write = SetResolveSymlinks };
  251. __property int SFTPDownloadQueue = { read = FSFTPDownloadQueue, write = SetSFTPDownloadQueue };
  252. __property int SFTPUploadQueue = { read = FSFTPUploadQueue, write = SetSFTPUploadQueue };
  253. __property int SFTPListingQueue = { read = FSFTPListingQueue, write = SetSFTPListingQueue };
  254. __property int SFTPMaxVersion = { read = FSFTPMaxVersion, write = SetSFTPMaxVersion };
  255. __property TAutoSwitch SFTPSymlinkBug = { read = FSFTPSymlinkBug, write = SetSFTPSymlinkBug };
  256. __property bool ConsiderDST = { read = FConsiderDST, write = SetConsiderDST };
  257. __property AnsiString StorageKey = { read = GetStorageKey };
  258. };
  259. //---------------------------------------------------------------------------
  260. class TStoredSessionList : public TNamedObjectList
  261. {
  262. public:
  263. __fastcall TStoredSessionList(bool aReadOnly = false);
  264. void __fastcall Load(AnsiString aKey);
  265. void __fastcall Load();
  266. void __fastcall Save(AnsiString aKey);
  267. void __fastcall Save();
  268. void __fastcall Load(THierarchicalStorage * Storage, bool AsModified = false);
  269. void __fastcall Save(THierarchicalStorage * Storage);
  270. void __fastcall SelectAll(bool Select);
  271. void __fastcall Import(TStoredSessionList * From, bool OnlySelected);
  272. TSessionData * __fastcall AtSession(int Index)
  273. { return (TSessionData*)AtObject(Index); }
  274. void __fastcall SelectSessionsToImport(TStoredSessionList * Dest, bool SSHOnly);
  275. void __fastcall Cleanup();
  276. int __fastcall IndexOf(TSessionData * Data);
  277. TSessionData * __fastcall NewSession(AnsiString SessionName, TSessionData * Session);
  278. virtual __fastcall ~TStoredSessionList();
  279. __property TSessionData * Sessions[int Index] = { read=AtSession };
  280. __property TSessionData * DefaultSettings = { read=FDefaultSettings, write=SetDefaultSettings };
  281. static void __fastcall ImportHostKeys(const AnsiString TargetKey,
  282. const AnsiString SourceKey, TStoredSessionList * Sessions,
  283. bool OnlySelected);
  284. private:
  285. TStorage LastStorage;
  286. TSessionData * FDefaultSettings;
  287. bool FReadOnly;
  288. void __fastcall SetDefaultSettings(TSessionData * value);
  289. };
  290. //---------------------------------------------------------------------------
  291. #endif