Options.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:14k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
  2. // Copyright 1996 by Jarle Aase. All rights reserved.
  3. // See the "War Software Series Licende Agreement" for details concerning 
  4. // use and distribution.
  5. // ---
  6. // This source code, executables and programs containing source code or
  7. // binaries or proprietetary technology from the War Software Series are
  8. // NOT alloed used, viewed or tested by any governmental agencies in
  9. // any countries. This includes the government, departments, police, 
  10. // military etc.
  11. // ---
  12. // This file is intended for use with Tab space = 2
  13. // Created and maintained in MSVC Developer Studio
  14. // ---
  15. // NAME : Options.h
  16. // PURPOSE : All options and options member declarations.
  17. // Option implementation goes in the different implementation files
  18. // PROGRAM : 
  19. // DATE : Nov. 17 1996
  20. // AUTHOR : Jarle Aase
  21. // ---
  22. // REVISION HISTORY
  23. // 
  24. ///////////////////////////////////////////////////////////////////////////////////////
  25. // COptions
  26. // Handle local and remote options (.ini file settings)
  27. // Override to add app spesific settings
  28. class DLL_WAR_SOFTWARE_ COptions
  29. {
  30. private:
  31. CString m_IniName;
  32. LPVOID m_Remote;
  33. LPSTR m_Section;
  34. static CString m_DefaultIniFile;
  35. public:
  36. static CLookupList m_OptionsList; // List of all object groups
  37. CLookupList m_Options; // List for each datamember in this option group
  38. public:
  39. COptions();
  40. ~COptions();
  41. void Create(LPVOID Remote, LPCSTR Origin, LPCSTR Section, int SymbolicNumber);
  42. static BOOL SetOption(LPCSTR Option, BOOL DoMap = FALSE);
  43. static BOOL GetOption(LPCSTR Option, CString& cValue, BOOL DoMap = FALSE);
  44. static CString GetOption(int Grp, int Item);
  45. virtual BOOL SaveAll();
  46. virtual BOOL LoadAll();
  47. BOOL ListGroupOptions(CString& cReturnBuf);
  48. static void IniCallback(int nErrorCode, LPVOID ReplyBuf, LPVOID Arg);
  49. static COptions *FindOptionGroup(LPCSTR Name);
  50. CLookupListItem *FindOption(LPCSTR Name);
  51. static BOOL ListOptions(LPCSTR OptionGroupName, CString& cReturnBuf);
  52. static void SetDefaultIniFile(LPCSTR Name) {m_DefaultIniFile = Name;}
  53. protected:
  54. void ResetSection(LPCSTR Section);
  55. void GetIniItem(LPCSTR Key, CString& Value, LPCSTR DefValue);
  56. void GetIniItem(LPCSTR Key, int& Value, int DefValue);
  57. void PutIniItem(LPCSTR Key, CString& Value);
  58. void PutIniItem(LPCSTR Key, int Value);
  59. static CLookupListItem *ResolveOption(LPCSTR Option, CString& cPending);
  60. };
  61. // Declare an option
  62. #define DeclOpt(Name, DataMember, DefVal, Symbol, DataType) 
  63. m_Options.AddItem((LPVOID)&DataMember, Symbol, Name, DataType); DataMember = DefVal;
  64. //////////////////////////////////////////////////////////////////////////////////
  65. // Ini file
  66. DLL_WAR_SOFTWARE_ LPCSTR ConvertToMultiline(CString& cDest, LPCSTR Src);
  67. DLL_WAR_SOFTWARE_ LPCSTR ConvertToSingelline(CString& cDest, LPCSTR Src);
  68. DLL_WAR_SOFTWARE_ void ResetSection(LPVOID Remote, LPCSTR IniName, LPCSTR Section);
  69. DLL_WAR_SOFTWARE_ void GetIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, CString& Value, LPCSTR DefValue);
  70. DLL_WAR_SOFTWARE_ void GetIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, int& Value, int DefValue);
  71. DLL_WAR_SOFTWARE_ void PutIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, LPCSTR Value);
  72. DLL_WAR_SOFTWARE_ void PutIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, int Value);
  73. DLL_WAR_SOFTWARE_ DWORD GetIniItemSectionNames(LPVOID Remote, LPCSTR IniName, LPCSTR Pattern, CString& cBuf);
  74. DLL_WAR_SOFTWARE_ DWORD GetIniItemSection(LPVOID Remote, LPCSTR IniName, LPCSTR SectKey, LPCSTR Pattern, CString& cBuf);
  75. /////////////////////////////////////////////////////////////////////////////////
  76. /////////////////////////////////////////////////////////////////////////////////
  77. // I N T E R - M O D U L E   A B S S T R A C T   O P T I O N S
  78. /////////////////////////////////////////////////////////////////////////////////
  79. /////////////////////////////////////////////////////////////////////////////////
  80. class DLL_WAR_SOFTWARE_ CLogOptions : public COptions
  81. {
  82. public:
  83. BOOL m_LogDebug;
  84. BOOL m_LogErrors;
  85. CString m_LogFile;
  86. CString m_WuLogFile;
  87. CString m_DataCh;
  88. CString m_CntrCh;
  89. BOOL m_LogFileAccess;
  90. BOOL m_LogInOut;
  91. BOOL m_LogSecurity;
  92. BOOL m_LogWarnings;
  93. BOOL m_LogWinsock;
  94. int m_LogLines;
  95. int m_Delay; // Flush delay in seconds
  96. CLogOptions();
  97. };
  98. // These manifests must *not* be changed after the server
  99. // is released.
  100. #define LOG_OPTIONS__LOG_DEBUG 1
  101. #define LOG_OPTIONS__LOG_ERRORS 2
  102. #define LOG_OPTIONS__LOG_FILE 3
  103. #define LOG_OPTIONS__LOG_FILE_ACCESS 4
  104. #define LOG_OPTIONS__LOG_LOG_IN_OUT 5
  105. #define LOG_OPTIONS__LOG_SECURITY 6
  106. #define LOG_OPTIONS__LOG_WARNINGS 7
  107. #define LOG_OPTIONS__LOG_WINSOCK 8
  108. #define LOG_OPTIONS__LOG_LINES 9
  109. #define LOG_OPTIONS__LOG_DELAY 10
  110. #define LOG_OPTIONS__LOG_WUFTPD 11
  111. #define LOG_OPTIONS__LOG_CNTRCH 12
  112. #define LOG_OPTIONS__LOG_DATACH 13
  113. #define DECLARE_LOG_OPTIONS 
  114. DeclOpt("Show Debug Messages",m_LogDebug, FALSE, LOG_OPTIONS__LOG_DEBUG, DATATYPE_BOOL); 
  115. DeclOpt("Show Errors",m_LogErrors, TRUE, LOG_OPTIONS__LOG_ERRORS, DATATYPE_BOOL); 
  116. DeclOpt("File Name",m_LogFile, "Log\Log%y%m%d.Log", LOG_OPTIONS__LOG_WUFTPD, DATATYPE_CSTRING); 
  117. DeclOpt("WU File Name",m_WuLogFile, "", LOG_OPTIONS__LOG_FILE, DATATYPE_CSTRING); 
  118. DeclOpt("Data CH File Name",m_DataCh, "", LOG_OPTIONS__LOG_DATACH, DATATYPE_CSTRING); 
  119. DeclOpt("Cntr CH File Name",m_CntrCh, "", LOG_OPTIONS__LOG_CNTRCH, DATATYPE_CSTRING); 
  120. DeclOpt("Show Logins and Logouts",m_LogInOut, TRUE, LOG_OPTIONS__LOG_LOG_IN_OUT, DATATYPE_BOOL); 
  121. DeclOpt("Show Security Violations",m_LogSecurity, TRUE, LOG_OPTIONS__LOG_SECURITY, DATATYPE_BOOL); 
  122. DeclOpt("Show System Warnings",m_LogWarnings, TRUE, LOG_OPTIONS__LOG_WARNINGS, DATATYPE_BOOL); 
  123. DeclOpt("Show File Access",m_LogFileAccess, TRUE, LOG_OPTIONS__LOG_FILE_ACCESS, DATATYPE_BOOL); 
  124. DeclOpt("Show Winsock Activity",m_LogWinsock, FALSE, LOG_OPTIONS__LOG_WINSOCK, DATATYPE_BOOL); 
  125. DeclOpt("Lines to remember",m_LogLines, 50, LOG_OPTIONS__LOG_LINES, DATATYPE_INT); 
  126. DeclOpt("Log flush delay",m_Delay, 5, LOG_OPTIONS__LOG_DELAY, DATATYPE_INT); 
  127. //////////////////////////////////////////////////////////////////
  128. // CFtpDaemonCore - The core of a working FTP daemon. Contains
  129. // global (static) data to maintain the connections.
  130. #define FTPDCORE_OPTIONS__SERVER_NAME 1
  131. #define FTPDCORE_OPTIONS__SERVER_EMAIL 2
  132. #define FTPDCORE_OPTIONS__ALLOW_ANON 3
  133. #define FTPDCORE_OPTIONS__MAX_CONNECTIONS 4
  134. #define FTPDCORE_OPTIONS__MAX_ANON_CONNECTOIONS 5
  135. #define FTPDCORE_OPTIONS__PORT 6
  136. #define FTPDCORE_OPTIONS__PASV_PORT 7
  137. #define FTPDCORE_OPTIONS__IP_NAME 8
  138. class DLL_WAR_SOFTWARE_ CFTPDaemonCoreOptions : public COptions
  139. {
  140. public:
  141. CString m_ServerName;
  142. CString m_ServerEmail;
  143. BOOL m_AllowAnonLogin;
  144. int m_MaxConnections;
  145. int m_MaxAnonConnections;
  146. int m_Port;
  147. int m_PasvPort;
  148. CString m_IPname;
  149. public:
  150. CFTPDaemonCoreOptions();
  151. };
  152. #define DECLARE_FTPDCORE_OPTIONS 
  153. DeclOpt("Server Name",m_ServerName, "Jgaa's Fan club FTP server", FTPDCORE_OPTIONS__SERVER_NAME, DATATYPE_CSTRING);
  154. DeclOpt("Server Email",m_ServerEmail, "Someone@somewhere.com", FTPDCORE_OPTIONS__SERVER_EMAIL, DATATYPE_CSTRING);
  155. DeclOpt("Allow Anon Login",m_AllowAnonLogin, TRUE, FTPDCORE_OPTIONS__ALLOW_ANON, DATATYPE_BOOL);
  156. DeclOpt("Max Connections",m_MaxConnections, 50, FTPDCORE_OPTIONS__MAX_CONNECTIONS, DATATYPE_INT);
  157. DeclOpt("Max Anon Connections",m_MaxAnonConnections, 10, FTPDCORE_OPTIONS__MAX_ANON_CONNECTOIONS, DATATYPE_INT);
  158. DeclOpt("FTP port",m_Port, 21, FTPDCORE_OPTIONS__PORT, DATATYPE_INT);
  159. DeclOpt("FTP default data port",m_PasvPort, 20, FTPDCORE_OPTIONS__PASV_PORT, DATATYPE_INT);
  160. DeclOpt("FTPD Listen IP", m_IPname, "0.0.0.0", FTPDCORE_OPTIONS__IP_NAME, DATATYPE_CSTRING);
  161. #define RA_OPTIONS__IP_NAME 1
  162. #define RA_OPTIONS__PORT 2
  163. #define RA_OPTIONS__ALLOWNETWORK 3
  164. #define RA_OPTIONS__TIMEOUT 4
  165. #define RA_OPTIONS__MAXQUEUE 5
  166. class DLL_WAR_SOFTWARE_ CRemoteAdminOptions : public COptions
  167. {
  168. public:
  169. CString m_IPname;
  170. int m_Port;
  171. int m_Timeout; // Seconds
  172. int m_MaxQueue; 
  173. BOOL m_AllowNetworkAccess;
  174. public:
  175. CRemoteAdminOptions();
  176. };
  177. #define DECLARE_RA_OPTIONS
  178. DeclOpt("RA Listen IP", m_IPname, "0.0.0.0", RA_OPTIONS__IP_NAME, DATATYPE_CSTRING);
  179. DeclOpt("FTP default data port",m_Port, 22, RA_OPTIONS__PORT, DATATYPE_INT);
  180. DeclOpt("Allow Network Access",m_AllowNetworkAccess, TRUE, RA_OPTIONS__ALLOWNETWORK, DATATYPE_BOOL);
  181. DeclOpt("Timeout",m_Timeout, 120, RA_OPTIONS__TIMEOUT, DATATYPE_INT);
  182. DeclOpt("Max Queue",m_MaxQueue, 500, RA_OPTIONS__MAXQUEUE, DATATYPE_INT);
  183. #define NTSERVICE__SERVICENAME 1
  184. #define NTSERVICE__VISUALNAME 2
  185. #define NTSERVICE__SERVICEMODE 3
  186. #define NTSERVICE__LOGINASLOCALADMIN 4
  187. #define NTSERVICE__LOGINUSERNAME 5
  188. #define NTSERVICE__LOGINUSERPWD 6
  189. class DLL_WAR_SOFTWARE_ CDaemonNTSOptions : public COptions
  190. {
  191. public:
  192. CString m_ServiceName;
  193. CString m_VisualName;
  194. int m_ServiceMode;
  195. BOOL m_LoginAsLocalAdmin;
  196. CString m_LoginUserName;
  197. CString m_LoginUserPwd;
  198. public:
  199. CDaemonNTSOptions();
  200. };
  201. #define DECLARE_NTSERVICE_OPTIONS
  202. DeclOpt("Service Name", m_ServiceName, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);
  203. DeclOpt("Visual Name", m_VisualName, "", NTSERVICE__VISUALNAME, DATATYPE_CSTRING);
  204. DeclOpt("Service Mode", m_ServiceMode, 3, NTSERVICE__SERVICENAME, DATATYPE_INT);
  205. DeclOpt("Login as Local Administrator", m_LoginAsLocalAdmin, TRUE, NTSERVICE__SERVICENAME, DATATYPE_BOOL);
  206. DeclOpt("Login aa User Name", m_LoginUserName, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);
  207. DeclOpt("Login Password", m_LoginUserPwd, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);
  208. #define GUIOPTIONS_PANETRACKING 1
  209. #define GUIOPTIONS_DIRCHMSG 2
  210. #define GUIOPTIONS_SITEMSGPOPUP 3
  211. #define GUIOPTIONS_CMDLINE 4
  212. class DLL_WAR_SOFTWARE_ CGUIOptions : public COptions
  213. {
  214. public:
  215. BOOL m_EnablePaneTracking;
  216. BOOL m_EnableDirChMsg;
  217. BOOL m_EnableSiteMsgsPopup;
  218. BOOL m_EnableCmdLine;
  219. public:
  220. CGUIOptions();
  221. };
  222. #define DECLARE_GUI_OPTIONS
  223. DeclOpt("Pane Tracking", m_EnablePaneTracking, FALSE, GUIOPTIONS_PANETRACKING, DATATYPE_BOOL);
  224. DeclOpt("Change DIR Popup", m_EnableDirChMsg, TRUE, GUIOPTIONS_DIRCHMSG, DATATYPE_BOOL);
  225. DeclOpt("SITE MSG popup", m_EnableSiteMsgsPopup, TRUE, GUIOPTIONS_SITEMSGPOPUP, DATATYPE_BOOL);
  226. DeclOpt("CMD Line", m_EnableCmdLine, TRUE, GUIOPTIONS_CMDLINE, DATATYPE_BOOL);
  227. #define FTPCOPTIONS_EMAIL 1
  228. #define FTPCOPTIONS_LOCALPATH 2
  229. #define FTPCOPTIONS_TXTEXT 3
  230. #define FTPCOPTIONS_USEPASV 4
  231. #define FTPCOPTIONS_OPTIMIZECMDS 5
  232. #define FTPCOPTIONS_INDEX 6
  233. #define FTPCOPTIONS_SHOWINDEX 7
  234. #define FTPCOPTIONS_MAXINDEXLEN 7
  235. class DLL_WAR_SOFTWARE_ CFTPClientOptions : public COptions
  236. {
  237. public:
  238. CString m_Email;
  239. CString m_LocalPath;
  240. CString m_TextExtentions;
  241. int m_UsePASV;
  242. BOOL m_DoOptimizeCommands;
  243. CString m_Index;
  244. BOOL m_ShowIndex;
  245. int m_MaxIndexLen;
  246. public:
  247. CFTPClientOptions();
  248. };
  249. #define DECLARE_FTPC_OPTIONS
  250. DeclOpt("Email", m_Email, "WarGuest@", FTPCOPTIONS_EMAIL, DATATYPE_CSTRING);
  251. DeclOpt("Local Path", m_LocalPath, "", FTPCOPTIONS_LOCALPATH, DATATYPE_CSTRING);
  252. DeclOpt("Text Extentions", m_TextExtentions, "*.txtrn*.htmrn*.htmlrn*.lstrn*.inirn*.crn*.cpprn*.hrn*.makrnmakefile", FTPCOPTIONS_TXTEXT, DATATYPE_CSTRING);
  253. DeclOpt("Use PASV mode", m_UsePASV, FALSE, FTPCOPTIONS_USEPASV, DATATYPE_BOOL);
  254. DeclOpt("Optimize Commands", m_DoOptimizeCommands, TRUE, FTPCOPTIONS_OPTIMIZECMDS, DATATYPE_BOOL);
  255. DeclOpt("Index Patterns", m_Index, "*index*.txt", FTPCOPTIONS_INDEX, DATATYPE_CSTRING);
  256. DeclOpt("Show Index", m_ShowIndex, TRUE, FTPCOPTIONS_SHOWINDEX, DATATYPE_BOOL);
  257. DeclOpt("Max Index Length", m_MaxIndexLen, (1024 * 5), FTPCOPTIONS_MAXINDEXLEN, DATATYPE_INT);
  258. #define ADVANCEDOPTIONS_OVERLAPPEDIO 1
  259. #define ADVANCEDOPTIONS_TASKPRIORITY 2
  260. class DLL_WAR_SOFTWARE_ CAdvancedOptions : public COptions
  261. {
  262. public:
  263. int m_OverlappedIO;
  264. int m_TaskPriority;
  265. static int m_PriMap[4];
  266. static int m_OverlappedMap[9];
  267. public:
  268. CAdvancedOptions();
  269. static GetPriority(int map) {ASSERT((map >= 0) && (map <= 3)); return m_PriMap[map]; }
  270. static GetOvlMap(int map) {ASSERT((map >= 0) && (map <= 8)); return m_OverlappedMap[map]; }
  271. };
  272. #define DECLARE_ADVANCED_OPTIONS
  273. DeclOpt("Overlapped IO", m_OverlappedIO, 0, ADVANCEDOPTIONS_OVERLAPPEDIO, DATATYPE_INT);
  274. DeclOpt("Task Priority", m_TaskPriority, 2, ADVANCEDOPTIONS_TASKPRIORITY, DATATYPE_INT);
  275. #define CFTPCLIENTOPTIONS_FIREWALLHOST 1
  276. #define CFTPCLIENTOPTIONS_FIREWALLPORT 2
  277. #define CFTPCLIENTOPTIONS_FIREWALLTYPE 3
  278. class DLL_WAR_SOFTWARE_ CFTPClientFirewallOptions : public COptions
  279. {
  280. public:
  281. CString m_FirewallHost;
  282. CString m_FirewallPort;
  283. int m_FirewallType;
  284. public:
  285. CFTPClientFirewallOptions();
  286. };
  287. #define DECLARE_FTPCFIREWALL_OPTIONS
  288. DeclOpt("Firewall Host", m_FirewallHost, "", CFTPCLIENTOPTIONS_FIREWALLHOST, DATATYPE_CSTRING);
  289. DeclOpt("Firewall Port", m_FirewallPort, "21", CFTPCLIENTOPTIONS_FIREWALLPORT, DATATYPE_CSTRING);
  290. DeclOpt("Firewall Type", m_FirewallType, 0, CFTPCLIENTOPTIONS_FIREWALLTYPE, DATATYPE_INT);
  291. #define CAPIHANDLEROPTIONS_SCANDIR 1
  292. #define DECLARE_APIHANDLER_OPTIONS
  293. DeclOpt("Firewall Host", m_ScanDir, "..\Extentions", CAPIHANDLEROPTIONS_SCANDIR, DATATYPE_CSTRING);
  294. enum // COptions groups
  295. {
  296. COPTION_GROUP_FTPLOG = 1,
  297. COPTION_FTPD_CORE,
  298. COPTION_GROUP_CLIENTLOG,
  299. COPTION_RA_DAEMON, // Remote Admin server side
  300. COPTION_NTSERVICE, 
  301. COPTION_GUIOPTIONS,
  302. COPTION_FTPCLIENT,
  303. COPTION_ADVANCEDOPTIONS,
  304. COPTION_CFTPCLIENTFIREWALL,
  305. COPTION_APIHANDLER,
  306. COPTION_INVALID
  307. };