www.pudn.com > warsrc.rar > Options.h
// This is part of the WAR SOFTWARE SERIES initiated by Jarle Aase
// Copyright 1996 by Jarle Aase. All rights reserved.
// See the "War Software Series Licende Agreement" for details concerning
// use and distribution.
// ---
// This source code, executables and programs containing source code or
// binaries or proprietetary technology from the War Software Series are
// NOT alloed used, viewed or tested by any governmental agencies in
// any countries. This includes the government, departments, police,
// military etc.
// ---
// This file is intended for use with Tab space = 2
// Created and maintained in MSVC Developer Studio
// ---
// NAME : Options.h
// PURPOSE : All options and options member declarations.
// Option implementation goes in the different implementation files
// PROGRAM :
// DATE : Nov. 17 1996
// AUTHOR : Jarle Aase
// ---
// REVISION HISTORY
//
///////////////////////////////////////////////////////////////////////////////////////
// COptions
// Handle local and remote options (.ini file settings)
// Override to add app spesific settings
class DLL_WAR_SOFTWARE_ COptions
{
private:
CString m_IniName;
LPVOID m_Remote;
LPSTR m_Section;
static CString m_DefaultIniFile;
public:
static CLookupList m_OptionsList; // List of all object groups
CLookupList m_Options; // List for each datamember in this option group
public:
COptions();
~COptions();
void Create(LPVOID Remote, LPCSTR Origin, LPCSTR Section, int SymbolicNumber);
static BOOL SetOption(LPCSTR Option, BOOL DoMap = FALSE);
static BOOL GetOption(LPCSTR Option, CString& cValue, BOOL DoMap = FALSE);
static CString GetOption(int Grp, int Item);
virtual BOOL SaveAll();
virtual BOOL LoadAll();
BOOL ListGroupOptions(CString& cReturnBuf);
static void IniCallback(int nErrorCode, LPVOID ReplyBuf, LPVOID Arg);
static COptions *FindOptionGroup(LPCSTR Name);
CLookupListItem *FindOption(LPCSTR Name);
static BOOL ListOptions(LPCSTR OptionGroupName, CString& cReturnBuf);
static void SetDefaultIniFile(LPCSTR Name) {m_DefaultIniFile = Name;}
protected:
void ResetSection(LPCSTR Section);
void GetIniItem(LPCSTR Key, CString& Value, LPCSTR DefValue);
void GetIniItem(LPCSTR Key, int& Value, int DefValue);
void PutIniItem(LPCSTR Key, CString& Value);
void PutIniItem(LPCSTR Key, int Value);
static CLookupListItem *ResolveOption(LPCSTR Option, CString& cPending);
};
// Declare an option
#define DeclOpt(Name, DataMember, DefVal, Symbol, DataType) \
m_Options.AddItem((LPVOID)&DataMember, Symbol, Name, DataType); DataMember = DefVal;
//////////////////////////////////////////////////////////////////////////////////
// Ini file
DLL_WAR_SOFTWARE_ LPCSTR ConvertToMultiline(CString& cDest, LPCSTR Src);
DLL_WAR_SOFTWARE_ LPCSTR ConvertToSingelline(CString& cDest, LPCSTR Src);
DLL_WAR_SOFTWARE_ void ResetSection(LPVOID Remote, LPCSTR IniName, LPCSTR Section);
DLL_WAR_SOFTWARE_ void GetIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, CString& Value, LPCSTR DefValue);
DLL_WAR_SOFTWARE_ void GetIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, int& Value, int DefValue);
DLL_WAR_SOFTWARE_ void PutIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, LPCSTR Value);
DLL_WAR_SOFTWARE_ void PutIniItem(LPVOID Remote, LPCSTR IniName, LPCSTR Section, LPCSTR Key, int Value);
DLL_WAR_SOFTWARE_ DWORD GetIniItemSectionNames(LPVOID Remote, LPCSTR IniName, LPCSTR Pattern, CString& cBuf);
DLL_WAR_SOFTWARE_ DWORD GetIniItemSection(LPVOID Remote, LPCSTR IniName, LPCSTR SectKey, LPCSTR Pattern, CString& cBuf);
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
// 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
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
class DLL_WAR_SOFTWARE_ CLogOptions : public COptions
{
public:
BOOL m_LogDebug;
BOOL m_LogErrors;
CString m_LogFile;
CString m_WuLogFile;
CString m_DataCh;
CString m_CntrCh;
BOOL m_LogFileAccess;
BOOL m_LogInOut;
BOOL m_LogSecurity;
BOOL m_LogWarnings;
BOOL m_LogWinsock;
int m_LogLines;
int m_Delay; // Flush delay in seconds
CLogOptions();
};
// These manifests must *not* be changed after the server
// is released.
#define LOG_OPTIONS__LOG_DEBUG 1
#define LOG_OPTIONS__LOG_ERRORS 2
#define LOG_OPTIONS__LOG_FILE 3
#define LOG_OPTIONS__LOG_FILE_ACCESS 4
#define LOG_OPTIONS__LOG_LOG_IN_OUT 5
#define LOG_OPTIONS__LOG_SECURITY 6
#define LOG_OPTIONS__LOG_WARNINGS 7
#define LOG_OPTIONS__LOG_WINSOCK 8
#define LOG_OPTIONS__LOG_LINES 9
#define LOG_OPTIONS__LOG_DELAY 10
#define LOG_OPTIONS__LOG_WUFTPD 11
#define LOG_OPTIONS__LOG_CNTRCH 12
#define LOG_OPTIONS__LOG_DATACH 13
#define DECLARE_LOG_OPTIONS \
DeclOpt("Show Debug Messages",m_LogDebug, FALSE, LOG_OPTIONS__LOG_DEBUG, DATATYPE_BOOL); \
DeclOpt("Show Errors",m_LogErrors, TRUE, LOG_OPTIONS__LOG_ERRORS, DATATYPE_BOOL); \
DeclOpt("File Name",m_LogFile, "Log\\Log%y%m%d.Log", LOG_OPTIONS__LOG_WUFTPD, DATATYPE_CSTRING); \
DeclOpt("WU File Name",m_WuLogFile, "", LOG_OPTIONS__LOG_FILE, DATATYPE_CSTRING); \
DeclOpt("Data CH File Name",m_DataCh, "", LOG_OPTIONS__LOG_DATACH, DATATYPE_CSTRING); \
DeclOpt("Cntr CH File Name",m_CntrCh, "", LOG_OPTIONS__LOG_CNTRCH, DATATYPE_CSTRING); \
DeclOpt("Show Logins and Logouts",m_LogInOut, TRUE, LOG_OPTIONS__LOG_LOG_IN_OUT, DATATYPE_BOOL); \
DeclOpt("Show Security Violations",m_LogSecurity, TRUE, LOG_OPTIONS__LOG_SECURITY, DATATYPE_BOOL); \
DeclOpt("Show System Warnings",m_LogWarnings, TRUE, LOG_OPTIONS__LOG_WARNINGS, DATATYPE_BOOL); \
DeclOpt("Show File Access",m_LogFileAccess, TRUE, LOG_OPTIONS__LOG_FILE_ACCESS, DATATYPE_BOOL); \
DeclOpt("Show Winsock Activity",m_LogWinsock, FALSE, LOG_OPTIONS__LOG_WINSOCK, DATATYPE_BOOL); \
DeclOpt("Lines to remember",m_LogLines, 50, LOG_OPTIONS__LOG_LINES, DATATYPE_INT); \
DeclOpt("Log flush delay",m_Delay, 5, LOG_OPTIONS__LOG_DELAY, DATATYPE_INT);
//////////////////////////////////////////////////////////////////
// CFtpDaemonCore - The core of a working FTP daemon. Contains
// global (static) data to maintain the connections.
#define FTPDCORE_OPTIONS__SERVER_NAME 1
#define FTPDCORE_OPTIONS__SERVER_EMAIL 2
#define FTPDCORE_OPTIONS__ALLOW_ANON 3
#define FTPDCORE_OPTIONS__MAX_CONNECTIONS 4
#define FTPDCORE_OPTIONS__MAX_ANON_CONNECTOIONS 5
#define FTPDCORE_OPTIONS__PORT 6
#define FTPDCORE_OPTIONS__PASV_PORT 7
#define FTPDCORE_OPTIONS__IP_NAME 8
class DLL_WAR_SOFTWARE_ CFTPDaemonCoreOptions : public COptions
{
public:
CString m_ServerName;
CString m_ServerEmail;
BOOL m_AllowAnonLogin;
int m_MaxConnections;
int m_MaxAnonConnections;
int m_Port;
int m_PasvPort;
CString m_IPname;
public:
CFTPDaemonCoreOptions();
};
#define DECLARE_FTPDCORE_OPTIONS \
DeclOpt("Server Name",m_ServerName, "Jgaa's Fan club FTP server", FTPDCORE_OPTIONS__SERVER_NAME, DATATYPE_CSTRING);\
DeclOpt("Server Email",m_ServerEmail, "Someone@somewhere.com", FTPDCORE_OPTIONS__SERVER_EMAIL, DATATYPE_CSTRING);\
DeclOpt("Allow Anon Login",m_AllowAnonLogin, TRUE, FTPDCORE_OPTIONS__ALLOW_ANON, DATATYPE_BOOL);\
DeclOpt("Max Connections",m_MaxConnections, 50, FTPDCORE_OPTIONS__MAX_CONNECTIONS, DATATYPE_INT);\
DeclOpt("Max Anon Connections",m_MaxAnonConnections, 10, FTPDCORE_OPTIONS__MAX_ANON_CONNECTOIONS, DATATYPE_INT);\
DeclOpt("FTP port",m_Port, 21, FTPDCORE_OPTIONS__PORT, DATATYPE_INT);\
DeclOpt("FTP default data port",m_PasvPort, 20, FTPDCORE_OPTIONS__PASV_PORT, DATATYPE_INT);\
DeclOpt("FTPD Listen IP", m_IPname, "0.0.0.0", FTPDCORE_OPTIONS__IP_NAME, DATATYPE_CSTRING);
#define RA_OPTIONS__IP_NAME 1
#define RA_OPTIONS__PORT 2
#define RA_OPTIONS__ALLOWNETWORK 3
#define RA_OPTIONS__TIMEOUT 4
#define RA_OPTIONS__MAXQUEUE 5
class DLL_WAR_SOFTWARE_ CRemoteAdminOptions : public COptions
{
public:
CString m_IPname;
int m_Port;
int m_Timeout; // Seconds
int m_MaxQueue;
BOOL m_AllowNetworkAccess;
public:
CRemoteAdminOptions();
};
#define DECLARE_RA_OPTIONS\
DeclOpt("RA Listen IP", m_IPname, "0.0.0.0", RA_OPTIONS__IP_NAME, DATATYPE_CSTRING);\
DeclOpt("FTP default data port",m_Port, 22, RA_OPTIONS__PORT, DATATYPE_INT);\
DeclOpt("Allow Network Access",m_AllowNetworkAccess, TRUE, RA_OPTIONS__ALLOWNETWORK, DATATYPE_BOOL);\
DeclOpt("Timeout",m_Timeout, 120, RA_OPTIONS__TIMEOUT, DATATYPE_INT);\
DeclOpt("Max Queue",m_MaxQueue, 500, RA_OPTIONS__MAXQUEUE, DATATYPE_INT);
#define NTSERVICE__SERVICENAME 1
#define NTSERVICE__VISUALNAME 2
#define NTSERVICE__SERVICEMODE 3
#define NTSERVICE__LOGINASLOCALADMIN 4
#define NTSERVICE__LOGINUSERNAME 5
#define NTSERVICE__LOGINUSERPWD 6
class DLL_WAR_SOFTWARE_ CDaemonNTSOptions : public COptions
{
public:
CString m_ServiceName;
CString m_VisualName;
int m_ServiceMode;
BOOL m_LoginAsLocalAdmin;
CString m_LoginUserName;
CString m_LoginUserPwd;
public:
CDaemonNTSOptions();
};
#define DECLARE_NTSERVICE_OPTIONS\
DeclOpt("Service Name", m_ServiceName, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);\
DeclOpt("Visual Name", m_VisualName, "", NTSERVICE__VISUALNAME, DATATYPE_CSTRING);\
DeclOpt("Service Mode", m_ServiceMode, 3, NTSERVICE__SERVICENAME, DATATYPE_INT);\
DeclOpt("Login as Local Administrator", m_LoginAsLocalAdmin, TRUE, NTSERVICE__SERVICENAME, DATATYPE_BOOL);\
DeclOpt("Login aa User Name", m_LoginUserName, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);\
DeclOpt("Login Password", m_LoginUserPwd, "", NTSERVICE__SERVICENAME, DATATYPE_CSTRING);
#define GUIOPTIONS_PANETRACKING 1
#define GUIOPTIONS_DIRCHMSG 2
#define GUIOPTIONS_SITEMSGPOPUP 3
#define GUIOPTIONS_CMDLINE 4
class DLL_WAR_SOFTWARE_ CGUIOptions : public COptions
{
public:
BOOL m_EnablePaneTracking;
BOOL m_EnableDirChMsg;
BOOL m_EnableSiteMsgsPopup;
BOOL m_EnableCmdLine;
public:
CGUIOptions();
};
#define DECLARE_GUI_OPTIONS\
DeclOpt("Pane Tracking", m_EnablePaneTracking, FALSE, GUIOPTIONS_PANETRACKING, DATATYPE_BOOL);\
DeclOpt("Change DIR Popup", m_EnableDirChMsg, TRUE, GUIOPTIONS_DIRCHMSG, DATATYPE_BOOL);\
DeclOpt("SITE MSG popup", m_EnableSiteMsgsPopup, TRUE, GUIOPTIONS_SITEMSGPOPUP, DATATYPE_BOOL);\
DeclOpt("CMD Line", m_EnableCmdLine, TRUE, GUIOPTIONS_CMDLINE, DATATYPE_BOOL);
#define FTPCOPTIONS_EMAIL 1
#define FTPCOPTIONS_LOCALPATH 2
#define FTPCOPTIONS_TXTEXT 3
#define FTPCOPTIONS_USEPASV 4
#define FTPCOPTIONS_OPTIMIZECMDS 5
#define FTPCOPTIONS_INDEX 6
#define FTPCOPTIONS_SHOWINDEX 7
#define FTPCOPTIONS_MAXINDEXLEN 7
class DLL_WAR_SOFTWARE_ CFTPClientOptions : public COptions
{
public:
CString m_Email;
CString m_LocalPath;
CString m_TextExtentions;
int m_UsePASV;
BOOL m_DoOptimizeCommands;
CString m_Index;
BOOL m_ShowIndex;
int m_MaxIndexLen;
public:
CFTPClientOptions();
};
#define DECLARE_FTPC_OPTIONS\
DeclOpt("Email", m_Email, "WarGuest@", FTPCOPTIONS_EMAIL, DATATYPE_CSTRING);\
DeclOpt("Local Path", m_LocalPath, "", FTPCOPTIONS_LOCALPATH, DATATYPE_CSTRING);\
DeclOpt("Text Extentions", m_TextExtentions, "*.txt\r\n*.htm\r\n*.html\r\n*.lst\r\n*.ini\r\n*.c\r\n*.cpp\r\n*.h\r\n*.mak\r\nmakefile", FTPCOPTIONS_TXTEXT, DATATYPE_CSTRING);\
DeclOpt("Use PASV mode", m_UsePASV, FALSE, FTPCOPTIONS_USEPASV, DATATYPE_BOOL);\
DeclOpt("Optimize Commands", m_DoOptimizeCommands, TRUE, FTPCOPTIONS_OPTIMIZECMDS, DATATYPE_BOOL);\
DeclOpt("Index Patterns", m_Index, "*index*.txt", FTPCOPTIONS_INDEX, DATATYPE_CSTRING);\
DeclOpt("Show Index", m_ShowIndex, TRUE, FTPCOPTIONS_SHOWINDEX, DATATYPE_BOOL);\
DeclOpt("Max Index Length", m_MaxIndexLen, (1024 * 5), FTPCOPTIONS_MAXINDEXLEN, DATATYPE_INT);
#define ADVANCEDOPTIONS_OVERLAPPEDIO 1
#define ADVANCEDOPTIONS_TASKPRIORITY 2
class DLL_WAR_SOFTWARE_ CAdvancedOptions : public COptions
{
public:
int m_OverlappedIO;
int m_TaskPriority;
static int m_PriMap[4];
static int m_OverlappedMap[9];
public:
CAdvancedOptions();
static GetPriority(int map) {ASSERT((map >= 0) && (map <= 3)); return m_PriMap[map]; }
static GetOvlMap(int map) {ASSERT((map >= 0) && (map <= 8)); return m_OverlappedMap[map]; }
};
#define DECLARE_ADVANCED_OPTIONS\
DeclOpt("Overlapped IO", m_OverlappedIO, 0, ADVANCEDOPTIONS_OVERLAPPEDIO, DATATYPE_INT);\
DeclOpt("Task Priority", m_TaskPriority, 2, ADVANCEDOPTIONS_TASKPRIORITY, DATATYPE_INT);
#define CFTPCLIENTOPTIONS_FIREWALLHOST 1
#define CFTPCLIENTOPTIONS_FIREWALLPORT 2
#define CFTPCLIENTOPTIONS_FIREWALLTYPE 3
class DLL_WAR_SOFTWARE_ CFTPClientFirewallOptions : public COptions
{
public:
CString m_FirewallHost;
CString m_FirewallPort;
int m_FirewallType;
public:
CFTPClientFirewallOptions();
};
#define DECLARE_FTPCFIREWALL_OPTIONS\
DeclOpt("Firewall Host", m_FirewallHost, "", CFTPCLIENTOPTIONS_FIREWALLHOST, DATATYPE_CSTRING);\
DeclOpt("Firewall Port", m_FirewallPort, "21", CFTPCLIENTOPTIONS_FIREWALLPORT, DATATYPE_CSTRING);\
DeclOpt("Firewall Type", m_FirewallType, 0, CFTPCLIENTOPTIONS_FIREWALLTYPE, DATATYPE_INT);
#define CAPIHANDLEROPTIONS_SCANDIR 1
#define DECLARE_APIHANDLER_OPTIONS\
DeclOpt("Firewall Host", m_ScanDir, "..\\Extentions", CAPIHANDLEROPTIONS_SCANDIR, DATATYPE_CSTRING);
enum // COptions groups
{
COPTION_GROUP_FTPLOG = 1,
COPTION_FTPD_CORE,
COPTION_GROUP_CLIENTLOG,
COPTION_RA_DAEMON, // Remote Admin server side
COPTION_NTSERVICE,
COPTION_GUIOPTIONS,
COPTION_FTPCLIENT,
COPTION_ADVANCEDOPTIONS,
COPTION_CFTPCLIENTFIREWALL,
COPTION_APIHANDLER,
COPTION_INVALID
};