www.pudn.com > FTPServerSrc.rar > ControlSocket.h


// ControlSocket.h : header file 
 
#if !defined(AFX_CONTROLSOCKET_H__B7C54BD3_A555_11D0_8996_00AA00B92B2E__INCLUDED_) 
#define AFX_CONTROLSOCKET_H__B7C54BD3_A555_11D0_8996_00AA00B92B2E__INCLUDED_ 
 
#if _MSC_VER >= 1000 
#pragma once 
#endif // _MSC_VER >= 1000 
 
#include "UserManager.h" 
 
class CDataSocket; 
class CClientThread; 
 
#define FTP_DOWNLOAD	1 
#define FTP_UPLOAD		2 
#define FTP_RENAME		3 
#define FTP_DELETE		4 
#define FTP_CREATE_DIR	5 
#define FTP_LIST		6 
 
enum 
{ 
	STATUS_IDLE		= 0, 
	STATUS_LOGIN	= 1, 
	STATUS_LIST		= 2, 
	STATUS_UPLOAD	= 3, 
	STATUS_DOWNLOAD	= 4, 
}; 
 
 
class CControlSocket : public CSocket 
{ 
	enum // Token ID's 
	{ 
		TOK_ABOR, TOK_APPE, TOK_BYE, TOK_CDUP,  
		TOK_CWD, TOK_DELE, TOK_HELP, TOK_LIST,  
		TOK_MKD, TOK_NLST, TOK_NOOP, TOK_PASS,  
		TOK_PASV, TOK_PASW, TOK_PORT, TOK_PWD,  
		TOK_QUIT, TOK_REST, TOK_RETR, TOK_RMD,  
		TOK_RNFR, TOK_RNTO, TOK_SIZE, TOK_STOR,  
		TOK_SYST, TOK_TYPE, TOK_USER, TOK_XCWD,  
		TOK_XMKD, TOK_XPWD, TOK_XRMD, TOK_ERROR, 
	}; 
 
public: 
	struct CFTPCommand 
	{ 
		int m_nTokenID; 
		char *m_pszName; 
		BOOL m_bHasArguments; 
		char *m_pszDescription; 
	}; 
 
// Attributes 
public: 
	BOOL HasConnectionDropped(void); 
	BOOL SendResponse(LPCTSTR pstrFormat, ...); 
	void PostStatusMessage(LPCTSTR lpszStatus, int nType); 
	BOOL GetCommand(CString &command, CString &args); 
	BOOL CreateDataConnection(); 
	void DestroyDataConnection(); 
// Operations 
public: 
	CControlSocket(); 
	virtual ~CControlSocket(); 
 
	void ProcessCommand(); 
	void GetCommandLine(); 
 
// Overrides 
public: 
	CWinThread* m_pThread; 
 
	CString m_strUserName; 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CControlSocket) 
	public: 
	virtual void OnClose(int nErrorCode); 
	virtual void OnReceive(int nErrorCode); 
	//}}AFX_VIRTUAL 
 
	// Generated message map functions 
	//{{AFX_MSG(CControlSocket) 
		// NOTE - the ClassWizard will add and remove member functions here. 
	//}}AFX_MSG 
 
// Implementation 
protected: 
	BOOL IsVirtualDirectory(LPCTSTR lpszDirectory); 
	int m_bPassiveMode; 
	 
	int m_nRemotePort; 
	CString m_strRemoteHost; 
	 
	CDataSocket *m_pDataSocket; 
 
	int m_nStatus; 
	 
	CStringList m_strCommands; 
	BOOL m_bRenameFile; 
	DWORD m_dwRestartOffset; 
	 
	CString m_strRenameFile; 
	 
	CString m_RxBuffer; 
	CString m_strCurrentDir; 
 
	friend CClientThread; 
	friend CDataSocket; 
 
	CUser m_User; 
 
	BOOL GetDirectoryList(LPCTSTR lpszDirectory, CString &strResult, BOOL bNamesOnly = FALSE); 
	BOOL GetLocalPath(LPCTSTR lpszRelativePath, CString &strLocalPath); 
	BOOL GetRelativePath(LPCTSTR lpszLocalPath, CString &strRelativePath); 
	int CheckDirectory(CString dirname, int nOption, CString &strResult); 
	int CheckFileName(CString filename, int nOption, CString &strResult); 
	BOOL CheckAccessRights(LPCTSTR lpszDirectory, int nOption); 
 
 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Developer Studio will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_CONTROLSOCKET_H__B7C54BD3_A555_11D0_8996_00AA00B92B2E__INCLUDED_)