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

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 : FTPDaemonCore.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 __FTPDAEMONCOREH
  24. #define __FTPDAEMONCOREH
  25. #ifndef __WARDAEMONH
  26. #include "WarDaemon.h"
  27. #endif
  28. #ifdef DLL_WAR_FTPDAEMON_EXPORT
  29. #define DLL_WAR_FTPDAEMON_EXPORT_ __declspec(dllexport)
  30. #else
  31. #define DLL_WAR_FTPDAEMON_EXPORT_ __declspec(dllimport)
  32. #endif
  33. extern "C" AFX_EXT_API void WINAPI InitFTPDaemonCoreDLL();
  34. class CFTPDCoreCtrlSock;
  35. class CFTPDFsys;
  36. ////////////////////////////////////////////////////////////////////
  37. // FTPD Command parser
  38. class CFTPDParser : public CCommandParser
  39. {
  40. public:
  41. CFTPDParser();
  42. virtual ParseCmd(LPCSTR CmdLine, CCmdArgs& Args, int Level, BOOL& DoParseCmdLine);
  43. };
  44. /////////////////////////////////////////////////////////////////////////////////
  45. // FTP server control connection
  46. class DLL_WAR_FTPDAEMON_EXPORT_ CFTPDCoreCtrlSock : public CTextSock
  47. {
  48. public:
  49. DECLARE_DYNAMIC(CFTPDCoreCtrlSock);
  50. CFTPDParser m_Parser;
  51. CString m_ArgSave; // Used to store text from one to the next command.
  52. int m_PrevCmdID;
  53. FLEN m_Restart; // File restart marker
  54. CFTPDFsys *m_Fsys;
  55. CFTPDataSock *m_DataSock;
  56. CCmdArgs m_Args; // Current line arguments
  57. CCmdArgs m_UnixArgs; // Line aguments expanded
  58. CString m_LastCommandText;
  59. // FTP transfere options
  60. int m_FTPmode;
  61. int m_FTPtype;
  62. int m_FTPstru;
  63. int m_FTPform;
  64. struct sockaddr m_Sockaddr; // Used to connect to remote data socket
  65. public:
  66. CFTPDCoreCtrlSock();
  67. ~CFTPDCoreCtrlSock();
  68. virtual BOOL OnCommand(LPCSTR Text);
  69. BOOL OnCommand(int CmdID);
  70. virtual BOOL CallbackProcessList(int nErrorCode);;
  71. // CAsyncSocket handlers
  72. virtual void OnConnect( int nErrorCode );
  73. virtual void OnClose( int nErrorCode );
  74. virtual void OnReceive( int nErrorCode );
  75. virtual void OnSend( int nErrorCode );
  76. virtual void _OnConnect( int nErrorCode );
  77. virtual void IncXferCnt(BOOL Add);
  78. protected:
  79. virtual void Virgin();
  80. virtual BOOL ProcessTelnetNegotiation(int ch1, int ch2);
  81. virtual void InsertPendingText();
  82. virtual BOOL ExpandMacro(LPSTR *To, LPCSTR MacroName, int AvailBytes);
  83. protected:
  84. // FTP server implementation functions
  85. virtual BOOL OnQuit(CCmdArgs& Args);
  86. virtual BOOL OnLogin(CCmdArgs& Args);
  87. virtual BOOL OnAcct(CCmdArgs& Args);
  88. virtual BOOL OnRein(CCmdArgs& Args);
  89. virtual BOOL OnPort(CCmdArgs& Args);
  90. virtual BOOL OnPasv(CCmdArgs& Args);
  91. virtual BOOL OnType(CCmdArgs& Args);
  92. virtual BOOL OnStru(CCmdArgs& Args);
  93. virtual BOOL OnMode(CCmdArgs& Args);
  94. virtual BOOL OnRetr(CCmdArgs& Args);
  95. virtual BOOL OnStor(CCmdArgs& Args);
  96. virtual BOOL OnAppe(CCmdArgs& Args);
  97. virtual BOOL OnAllo(CCmdArgs& Args);
  98. virtual BOOL OnRest(CCmdArgs& Args);
  99. virtual BOOL OnRnFr(CCmdArgs& Args);
  100. virtual BOOL OnRnTo(CCmdArgs& Args);
  101. virtual BOOL OnAbor(CCmdArgs& Args);
  102. virtual BOOL OnDele(CCmdArgs& Args);
  103. virtual BOOL OnCwd(CCmdArgs& Args);
  104. virtual BOOL OnList(CCmdArgs& Args);
  105. virtual BOOL OnNlst(CCmdArgs& Args);
  106. virtual BOOL OnSite(CCmdArgs& Args);
  107. virtual BOOL OnStat(CCmdArgs& Args);
  108. virtual BOOL OnHelp(CCmdArgs& Args);
  109. virtual BOOL OnNoop(CCmdArgs& Args);
  110. virtual BOOL OnMkd(CCmdArgs& Args);
  111. virtual BOOL OnRmd(CCmdArgs& Args);
  112. virtual BOOL OnPwd(CCmdArgs& Args);
  113. virtual BOOL OnCdUp(CCmdArgs& Args);
  114. virtual BOOL OnStou(CCmdArgs& Args);
  115. virtual BOOL OnSmnt(CCmdArgs& Args);
  116. virtual BOOL OnSyst(CCmdArgs& Args);
  117. virtual BOOL OnSize(CCmdArgs& Args);
  118. virtual BOOL OnMdtm(CCmdArgs& Args);
  119. // Support functions
  120. virtual BOOL ProcessList(LPCSTR LineArguments, CCmdArgs& Args);
  121. virtual BOOL DoChdir(LPCSTR Path);
  122. virtual BOOL DoRetr(CCmdArgs& Args, DWORD Flags);
  123. virtual BOOL DoStor(CCmdArgs& Args, DWORD Flags);
  124. virtual BOOL DoDele(CCmdArgs& Args);
  125. virtual BOOL MkUniquePath(CString& cFnameBuf);
  126. virtual BOOL DoMkDir(CCmdArgs& Args);
  127. // SITE
  128. virtual BOOL OnSiteChmod(CCmdArgs &Args);
  129. virtual BOOL OnSiteFsysstat(CCmdArgs &Args);
  130. };
  131. #define XMITF_TEMP   0x00000001 // Tmp file
  132. #define XMITF_APPE   0x00000002 // Append
  133. #define XMITF_UNIQUE 0x00000004 // Stor unique
  134. /////////////////////////////////////////////////////////////////////////////////
  135. // FTP server listen socket
  136. class CFTPDCoreListenSock : public CDaemonServiceSocket
  137. {
  138. public:
  139. virtual void OnAccept( int nErrorCode );
  140. virtual void _OnAccept( int nErrorCode );
  141. virtual BOOL Initialize(int PortNumber, LPCSTR ServiceName, LPCSTR ListenIP = NULL);
  142. };
  143. class DLL_WAR_FTPDAEMON_EXPORT_ CFtpDaemonCore
  144. {
  145. public:
  146. CFTPDaemonCoreOptions m_Options; // Basic FTP server options
  147. CFTPDCoreListenSock m_Listen; // Listening socket
  148. CLog *m_Log;
  149. static CFtpDaemonCore *m_pCFtpDaemonCore;
  150. public:
  151. CFtpDaemonCore();
  152. ~CFtpDaemonCore();
  153. virtual BOOL Create(LPCSTR IniFile, CLog *Log);
  154. virtual void LogMsg(int flag, LPCSTR Format, ...);
  155. static CFtpDaemonCore *GetFtpSvr() {return m_pCFtpDaemonCore;}
  156. };
  157. //////////////////////////////////////////////////////////////////////////////////////////
  158. // CFTPDFsys
  159. class DLL_WAR_FTPDAEMON_EXPORT_ CFTPDFsys : public CUserFsys
  160. {
  161. public:
  162. CFTPDFsys(LPVOID *pRef);
  163. BOOL Create(CFTPDCoreCtrlSock *Sock); // Create user fsys
  164. // Data members
  165. CFTPDCoreCtrlSock *m_pSock;
  166. DWORD m_AsyncSelectMaskSaved;
  167. DWORD m_StateSaved;
  168. DWORD m_CallbackID;
  169. enum // Callback ID's
  170. {
  171. CB_CHDIR, // Normal CHDIR
  172. CB_SIZE, // SIZE
  173. CB_MDTM, // MDTM
  174. };
  175. LPARAM m_lParam; // Storage of data
  176. // Hight level functions
  177. public:
  178. BOOL PrepereCommandLine(int CmdIDtoRemember);
  179. CString GetFullPath(LPCSTR Path, DWORD AccessFlags);
  180. BOOL RenamePath(LPCSTR OldName, LPCSTR NewName);
  181. BOOL CheckPermission(LPCSTR Path, BOOL IsDir, int PermsWanted);
  182. BOOL DeletePath(LPCSTR Path);
  183. BOOL MkDir(LPCSTR Path);
  184. BOOL ChDir(LPCSTR Path);
  185. BOOL List();
  186. BOOL Mdtm(LPCSTR Path);
  187. BOOL Size(LPCSTR Path);
  188. // Callback functions
  189. protected:
  190. virtual BOOL SetOnHold(); // Called when a callback needs to wait...
  191. // Return FALSE to abort the operation
  192. virtual void ReleaseHold(); // Release hold state - callback is not called.
  193. virtual void CheckForZombie(); // Release resources and throw an execpion
  194. virtual BOOL OnCreate(int nErrorCode); // Called after Create()
  195. virtual BOOL OnChdir(int nErrorCode); // Called for all ChDir's
  196. virtual BOOL CallbackChDir(int nErrorCode); // Called after FTP cmd CWD
  197. virtual BOOL OnPrpCmdLine(int nErrorCode);
  198. virtual BOOL OnList(int nErrorCode);
  199. virtual BOOL OnChmod(int nErrorCode);
  200. virtual BOOL OnFsysStat(int nErrorCode);
  201. virtual BOOL OnCreateDirectory(int nErrorCode);
  202. virtual BOOL OnDeleteDirectory(int nErrorCode);
  203. virtual BOOL OnDeleteFile(int nErrorCode);
  204. virtual BOOL OnDeleteGeneric(int nErrorCode);
  205. BOOL OnDelete(int nErrorCode);
  206. virtual BOOL OnMoveFile(int nErrorCode);
  207. virtual BOOL OnStat(int nErrorCode);
  208. BOOL OnStatSize(int nErrorCode);
  209. BOOL OnStatMDTM(int nErrorCode);
  210. };
  211. #endif __FTPDAEMONCOREH