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

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 : GenericRemote.h
  16. // PURPOSE : FTP/HTTP generic client
  17. // PROGRAM : 
  18. // DATE : Dec 31. 1996
  19. // AUTHOR : Jarle Aase
  20. // ---
  21. // REVISION HISTORY
  22. // 
  23. ////////////////////////////////////////////////////////////////////
  24. // Client Command parser
  25. class CCommandParser;
  26. class CFTPParser : public CCommandParser
  27. {
  28. public:
  29. CFTPParser();
  30. };
  31. class DLL_WAR_CLIENT_ CXmitInfo : public CObject
  32. {
  33. public:
  34. DECLARE_DYNCREATE(CXmitInfo)
  35. CXmitInfo();
  36. ~CXmitInfo();
  37. CString m_FromPath;
  38. CString m_ToPath; // Can be directory or filename
  39. DWORD m_Flags;
  40. int m_FileMode;
  41. FLEN m_StartOfs;
  42. FLEN m_FileLength;
  43. __int64 m_FileDate;
  44. };
  45. // CXmitInfo Flags
  46. #define XIF_RESM 0x0001
  47. #define XIF_RECR 0x0002
  48. #define XIF_NOMC 0x0004
  49. #define XIF_NWOL 0x0008
  50. #define XIF_CHOL    0x0010
  51. #define XIF_CHNO    0x0020
  52. #define XIF_NWNO    0x0040
  53. #define XIF_ASCI 0x0080 // Text mode
  54. #define XIF_BINR 0x0100 // Binary mode
  55. #define XIF_INDEX 0x0200 // Index file
  56. #define XIF_TEMP 0x0400 // Temporary file
  57. class CGenericInternetView;
  58. class DLL_WAR_CLIENT_ CXmitStack
  59. {
  60. public:
  61. int m_LastCmdID;
  62. int m_CurrCmdID;
  63. };
  64. class DLL_WAR_CLIENT_ CGenericRemote : public CRemoteInterface
  65. {
  66. public:
  67. CGenericRemote(CGenericInternetView *pView);
  68. ~CGenericRemote();
  69. BOOL Execute(LPCSTR Command);
  70. static BOOL RequestCallback(int nErrorCode, LPVOID ReplyBuf, LPVOID Arg);
  71. BOOL Request(LPCSTR Cmd);
  72. BOOL FTPGetPutFile(int Mode, LPCSTR LocalName,LPCSTR RemoteName,
  73. int argc = 0, char **argv = NULL);
  74. void OnGotFileOK();
  75. virtual void OnFileCompletion(int nErrorCode);
  76. BOOL TryUNIXDirParse(LPSTR Listing, CLinkedList& List);
  77. BOOL TryDOSDirParse(LPSTR Listing, CLinkedList& List);
  78. BOOL TryNovellDirParse(LPSTR Listing, CLinkedList& List);
  79. BOOL TryVMSDirParse(LPSTR Listing, CLinkedList& List);
  80. void ParseDirListing(HANDLE hFile, CLinkedList& List);
  81. void EndXmit();
  82. void ShowInfoDlg(int MsgID = 0, HICON hIcon = NULL);
  83. BOOL GenericXmitNextFile(BOOL IsFirst);
  84. BOOL GenericGetFile(int argc, char **argv);
  85. BOOL ParsePutGetArgs(int argc, char **argv, BOOL LookForDest, int Mode);
  86. BOOL ValidateGetFile(CLinkedList& List);
  87. void CleanUpXmitList();
  88. BOOL GenericPutFile(int argc, char **argv);
  89. BOOL IsIdle();
  90. BOOL Abort();
  91. void OnOpen(int nErrorCode);
  92. CString GetTempName();
  93. BOOL ReadTheFile(HANDLE hFile, CString& cBuf);
  94. void ParseIndexListing(HANDLE hFile, CLinkedList& List);
  95. virtual BOOL OnHandleWinsockErr(int nErrorCode );
  96. void PushXmitState();
  97. BOOL PopXmitState();
  98. CGenericInternetView *m_pMyView;
  99. CFTPParser m_Parser;
  100. int m_LastCmdID;
  101. CString m_MyRbuf;
  102. HANDLE m_hCancel;
  103. CString m_InformQueue;
  104. int m_FileStatus;
  105. int m_FileMode;
  106. HANDLE m_FileHandle;
  107. int m_FileIsTransmittedOK; // Set by FTP data sock callback
  108. BOOL m_IsBinaryFile;
  109. BOOL m_IsTmpFile;
  110. CString m_LocalFileName;
  111. CString m_RemoteFileName;
  112. CFTPDataSock *m_FTPData;
  113. struct sockaddr m_Sockaddr; // Used to connect to remote data socket
  114. BOOL m_ThereWasAnError;
  115. CLinkedList m_XmitList;
  116. int m_CurrentXfer;
  117. int m_XfersToGo;
  118. int m_NumSuccessfulXfers;
  119. int m_TotalNumOfXfers;
  120. BOOL m_EnableAutoUpdate;
  121. int m_CmdID;
  122. BOOL m_IsConnectedOK;
  123. long m_NotifyCnt;
  124. int m_ServerType;
  125. int m_ServerSoftware;
  126. CString m_ServerVersion;
  127. CString m_ListCmd;
  128. CXmitInfo *m_CurrentFileInfo;
  129. BOOL m_NoREST;
  130. CString m_LastTypeCommand;
  131. CString m_LastModeCommand;
  132. CString m_RenameTo;
  133. CLinkedList m_XmitStack;
  134. __int64 m_RcvFileDate;
  135. HANDLE CreateFile(LPCTSTR lpFileName, // pointer to name of the file 
  136.     DWORD dwDesiredAccess, // access (read-write) mode 
  137.     DWORD dwShareMode, // share mode 
  138.     LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security descriptor 
  139.     DWORD dwCreationDistribution, // how to create 
  140.     DWORD dwFlagsAndAttributes, // file attributes 
  141.     HANDLE hTemplateFile  // handle to file with attributes to copy  
  142.    );
  143. public:
  144. virtual BOOL OnNotification(int nErrorCode, LPSTR Notification);
  145. virtual void OnClientLogNotify(LPCSTR Text);
  146. void FTPLocalProcess();
  147. virtual void OnDNSLookup(int nErrorCode, CDNSLookup *pDNS);
  148. virtual void OnServerMessage( int nErrorCode );
  149. virtual void OnConnect( int nErrorCode );
  150. virtual void OnSend( int nErrorCode );
  151. virtual void OnReceive( int nErrorCode );
  152. virtual void OnClose( int nErrorCode );
  153. protected:
  154. BOOL _SendCmd(LPCSTR Command);
  155. private:
  156. void _OnConnect( int nErrorCode );
  157. void _OnReceive( int nErrorCode );
  158. void _OnClose( int nErrorCode );
  159. BOOL _Execute(LPCSTR Command);
  160. };
  161. enum // FTP File modes
  162. {
  163. FTPG_LIST, // Get file listing
  164. FTPG_RCVFILE, // Get a "real" file
  165. FTPG_SNDFILE, // Send a file
  166. FTPG_INVALID
  167. };
  168. enum // FTP File xmit status
  169. {
  170. PTPX_IDLE, // Nothing going on
  171. FTPX_INIT, // Initialize
  172. FTPX_SIZE, // Get size of file
  173. FTPX_TIME, // Get exact file time
  174. FTPX_REST, // Set file offset
  175. FTPX_TYPE, // Type send
  176. FTPX_PORT, // Port sent
  177. FTPX_PASV, // Pasv sent
  178. FTPX_STOR, // Send file command sent
  179. FTPX_RETR, // Get file command sent
  180. FTPX_HOLD, // Waiting for physical file transfer to end
  181. FTPX_RNFR, // Rename from
  182. FTPX_RNTO, // Rename to
  183. FTPX_DATE, // Get file date
  184. };
  185. enum // DNS lookup's
  186. {
  187. DNS_PREC_LOOKUP = 1, // Pre connect lookup
  188. };
  189. // Server types
  190. #define SVRT_UNKNOWN 0x0001 // Unknown type
  191. #define SVRT_GENERIC_UNIX 0x0002 // Support's LIST -L and other advanced flags
  192. #define SVRT_WARFTPD 0x0004 // War FTP daemon
  193. #define SVRT_PSEUDO_UNIX 0x0008 // Unix like, but not safe/comaptible
  194. #define SVRT_GENERIC_VMS 0x0010 // VMS of some type
  195. enum // Server software
  196. {
  197. SVRS_UNKNOWN,
  198. SVRS_WARFTPD,
  199. SVRS_SERV_U,
  200. SVRS_WFTPD,
  201. SVRS_WU_FTPD,
  202. SVRS_NTFTPD,
  203. SVRS_MSFTPDNT,
  204. SVRS_VERMILLION,
  205. SVRS_INVALID
  206. };
  207. #define SVRMSG_ID 298 // Primitive FTP server message header