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

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 : WarDaemon.h
  16. // PURPOSE : General entry point module for War Daemons
  17. // PROGRAM : 
  18. // DATE : Sept. 19 1996
  19. // AUTHOR : Jarle Aase
  20. // ---
  21. // REVISION HISTORY
  22. // 
  23. #ifndef __WARDAEMONH
  24. #define __WARDAEMONH
  25. #ifndef __WARSOFTWAREH
  26. #include "WarSoftware.h"
  27. #endif
  28. #ifndef __USERH
  29. #include "User.h"
  30. #endif
  31. #include "UnixFsysTypes.h"
  32. #include "parser.h"
  33. class CNTService;
  34. class CRAFsys;
  35. extern "C" AFX_EXT_API void WINAPI InitWarDaemonLibDLL();
  36. /////////////////////////////////////////////////////////////////////////////////
  37. // Some pre-declarations
  38. class CLog;
  39. class CWarTimer;
  40. class CDaemonServiceSocket;
  41. class CDaemonLog;
  42. class CFsys;
  43. class DLL_WAR_DAEMON_ CDaemonNotificationWnd : public CWnd
  44. {
  45. public:
  46. static CWnd *m_pWnd;
  47. static CWinThread *m_pThread;
  48. // Construction
  49. public:
  50. CDaemonNotificationWnd();
  51. ~CDaemonNotificationWnd();
  52. static CWnd *GetWin() {return m_pWnd;}
  53. static HWND GetHwnd() {return m_pWnd->m_hWnd;}
  54. static BOOL IsSameThread() {return m_pThread == AfxGetThread();}
  55. LONG (* m_OnTrayIconMessage)(WPARAM WParam, LPARAM LParam);
  56. protected:
  57. //{{AFX_MSG(CNotificationWnd)
  58. LONG OnTrayIconMessage(WPARAM WParam, LPARAM LParam);
  59. afx_msg void OnStopandquit();
  60. afx_msg void OnGoOnline();
  61. afx_msg void OnGoOffline();
  62. afx_msg void OnRestart();
  63. afx_msg void OnStartManager();
  64. LRESULT OnDNS(WPARAM WParam, LPARAM LParam);
  65. //}}AFX_MSG
  66. DECLARE_MESSAGE_MAP()
  67. };
  68. ////////////////////////////////////////////////////////////////////
  69. // Admin Command parser
  70. class CAdminParser : public CCommandParser
  71. {
  72. public:
  73. CAdminParser();
  74. //virtual ParseCmd(LPCSTR CmdLine, CCmdArgs& Args, int Level);
  75. };
  76. ///////////////////////////////////////////////////////////////////////////////////////
  77. // CDaemonServiceSocket
  78. // Listening socket
  79. // Handles the basics of listening and accepting connections
  80. // Keeps a linst of connections.
  81. class DLL_WAR_DAEMON_ CDaemonServiceSocket : public CSock
  82. {
  83. public:
  84. CDaemonServiceSocket();
  85. ~CDaemonServiceSocket();
  86. int m_PortNumber; // Listening port
  87. virtual BOOL Initialize(int PortNumber, LPCSTR ServiceName, LPCSTR ListenIP = NULL);
  88. protected:
  89. virtual BOOL DoAccept(CSock *NewSocket );
  90. };
  91. ///////////////////////////////////////////////////////////////////////////////////////
  92. // CDaemonMaintananceSocket
  93. // Base class for the maintainance socket interface on the server side.
  94. // Can be used as a template for other server based socket classes.
  95. class DLL_WAR_DAEMON_ CDaemonMaintananceSocket : public CTextSock
  96. {
  97. public:
  98. DECLARE_DYNAMIC(CDaemonMaintananceSocket);
  99. CAdminParser m_Parser;
  100. CString m_ArgSave;
  101. CRAFsys *m_pFsys;
  102. public:
  103. CDaemonMaintananceSocket();
  104. ~CDaemonMaintananceSocket();
  105. virtual BOOL OnCommand(LPCSTR Text);
  106. // CAsyncSocket event handlers
  107. virtual void OnConnect( int nErrorCode );
  108. virtual void _OnConnect( int nErrorCode );
  109. virtual void OnClose( int nErrorCode );
  110. virtual void OnSend( int nErrorCode );
  111. virtual void OnOutOfBandData( int nErrorCode );
  112. virtual void OnReceive( int nErrorCode );
  113. protected:
  114. virtual void Virgin();
  115. virtual BOOL ProcessTelnetNegotiation(int ch1, int ch2);
  116. virtual void InsertPendingText();
  117. virtual BOOL ExpandMacro(LPSTR *To, LPCSTR MacroName, int AvailBytes);
  118. };
  119. class DLL_WAR_DAEMON_ CRAFsys : public CUserFsys
  120. {
  121. public:
  122. CRAFsys(LPVOID *pRef = NULL);
  123. BOOL List(LPCSTR Path, CDaemonMaintananceSocket *pSock);
  124. BOOL ChMod(CCmdArgs& Args, CDaemonMaintananceSocket *pSock);
  125. // Low level & overrides
  126. virtual BOOL SetOnHold();
  127. virtual void ReleaseHold();
  128. virtual void CheckForZombie();
  129. virtual BOOL Create(CDaemonMaintananceSocket *pSock);
  130. BOOL NextStep();
  131. BOOL DoList();
  132. BOOL DoChmod();
  133. virtual BOOL OnWlist(int nErrorCode);
  134. virtual BOOL OnCreate(int nErrorCode);
  135. virtual BOOL OnChmod(int nErrorCode);
  136. protected:
  137. CCmdArgs m_UnixArgs;
  138. int m_SockID;
  139. DWORD m_AsyncSelectMaskSaved;
  140. int m_StateSaved;
  141. CDaemonMaintananceSocket *m_pSock;
  142. int m_NextStep;
  143. CString m_Path; // Stored path
  144. CCmdArgs m_CmdArgStore;
  145. enum // Steps
  146. {
  147. // List
  148. DOLIST = 1,
  149. DOCHMOD,
  150. };
  151. };
  152. ///////////////////////////////////////////////////////////////////////////////////////
  153. // CDaemonStatusSvr
  154. // Server side status update
  155. class DLL_WAR_DAEMON_ CDaemonStatusSvr : public CDaemonStatus
  156. {
  157. public:
  158. HANDLE m_EventHandle;
  159. public:
  160. CDaemonStatusSvr();
  161. ~CDaemonStatusSvr();
  162. LPCSTR FormatStats(CString& cBuf, BOOL IsInteractive = TRUE);
  163. static LPCSTR GetStats(CString& cBuf);
  164. static void SendStat(LPVOID pOrigin, CDaemonEvent *pCliEv);
  165. static void SendStatToAll();
  166. static void IncUserCnt(BOOL Add);
  167. static void IncOperatorCnt(BOOL Add);
  168. static void IncXferCnt(BOOL Add);
  169. static void SetOnline(BOOL IsOnline);
  170. protected:
  171. static void IncCounter(int& Current, int& Total, BOOL Add);
  172. };
  173. /////////////////////////////////////////////////////////////////////////////////
  174. // Daemon startup code
  175. // Initiates NT service mode and start the main thread
  176. // that is derivered from CDaemonBase
  177. class DLL_WAR_DAEMON_ CDaemon : public CObject
  178. {
  179. DECLARE_DYNCREATE(CDaemon)
  180. public:
  181. CNTService *m_Service; // NT service class
  182. CWinThread *m_MainThread;
  183. CWnd *m_pWnd;
  184. CDaemonNTSOptions *m_NTSoptions;
  185. public:
  186. CDaemon();
  187. ~CDaemon();
  188. void Process(LPCSTR SvrType, LPCSTR ProgramName, LPCSTR ProgramVersion, LPCSTR ProgramCopyright, CRuntimeClass *MainThreadClass);
  189. //{{AFX_MSG(CDaemon)
  190. //}}AFX_MSG
  191. };
  192. /////////////////////////////////////////////////////////////////////////////
  193. // CDaemonBase thread
  194. // Base class for all daemons
  195. // Never used in its native form.
  196. class DLL_WAR_DAEMON_ CDaemonBase : public CWinThread
  197. {
  198. DECLARE_DYNCREATE(CDaemonBase)
  199. protected:
  200. CDaemonBase();           // protected constructor used by dynamic creation
  201. // Attributes
  202. public:
  203. CWnd *m_pWnd;
  204. UINT m_TimerID;
  205. CDaemonLog *m_Log; // Initialized by derived top-level class
  206. CDaemonServiceSocket *m_RemoteAdminListenSocket;
  207. CUsr *m_User;
  208. CDaemonStatusSvr m_ServerStat;
  209. static CDaemonBase *m_pDaemonBase;
  210. CRemoteAdminOptions m_RAOptions;
  211. CAdvancedOptions m_AdvancedOptions; // Overlapped IO and priority
  212. BOOL m_TrayIsInitialized;
  213. HICON m_hIcon;
  214. HICON m_SysTrayIdle;
  215. HICON m_SysTrayOnline;
  216. HICON m_SysTrayOffline;
  217. CAPIHandler *m_pExtModules;
  218. public:
  219. virtual void RefreshStats();
  220. static void Shutdown(BOOL DoSave = TRUE, BOOL Force = FALSE, BOOL Critcal = FALSE);
  221. static LRESULT GenericProcessMessage(WPARAM WParam, LPARAM LParam);
  222. virtual void LogMsg(int flag, LPCSTR Format, ...);
  223. virtual BOOL OnIdle( LONG lCount );
  224. static CDaemonBase *GetSvr() {return m_pDaemonBase;}
  225. static CDaemonStatusSvr *GetSvrStat() {return &(GetSvr()->m_ServerStat);}
  226. BOOL UpdateSystemTray(LPCSTR ToolTip);
  227. static LONG OnTrayIconMessage(WPARAM WParam, LPARAM LParam);
  228. virtual BOOL GoOnline(BOOL Online);
  229. BOOL StartManager();
  230. // Operations
  231. public:
  232. // Overrides
  233. // ClassWizard generated virtual function overrides
  234. //{{AFX_VIRTUAL(CDaemonBase)
  235. public:
  236. virtual BOOL InitInstance();
  237. virtual int ExitInstance();
  238. virtual BOOL PreTranslateMessage(MSG* pMsg);
  239. //}}AFX_VIRTUAL
  240. // Implementation
  241. protected:
  242. virtual ~CDaemonBase();
  243. // Generated message map functions
  244. //{{AFX_MSG(CDaemonBase)
  245. // NOTE - the ClassWizard will add and remove member functions here.
  246. //}}AFX_MSG
  247. DECLARE_MESSAGE_MAP()
  248. };
  249. /////////////////////////////////////////////////////////////////////////////
  250. // CDaemonLog - Spesific routines for logging to daemons
  251. class DLL_WAR_DAEMON_ CDaemonLog : public CLog
  252. {
  253. public:
  254. CWnd *m_LogWin;
  255. CDaemonLog();
  256. protected:
  257. virtual void LoggedLine(int LogType, LPCSTR Line);
  258. };
  259. ///////////////////////
  260. // WM_USER messages
  261. enum // Main thread general messages
  262. {
  263. PPT_SHUTDOWN, // Ordinary stop
  264. PPT_SHUTDOWN_FAST, // System shutdown. max 20 sec.
  265. PPT_PAUSE, // Go offline
  266. PPT_CONTINUE, // Go online
  267. PPT_INVALID
  268. };
  269. #endif // __WARDAEMONH