www.pudn.com > NETINFO.rar > ftp.h


#ifndef _FTP_H_ 
#define _FTP_H_ 
 
#include "LineConnect.h" 
 
#define MAX_FTP_LINE 1024 
 
class CFtpDataConnection; 
class CFtpConnection; 
 
struct TCP_ADDR_RANGE 
{ 
	TCP_ADDR low; 
	TCP_ADDR high; 
}; 
 
struct TCP_MATCH_RANGE 
{ 
	TCP_ADDR_RANGE src; 
	TCP_ADDR_RANGE dst; 
}; 
 
struct FTP_DATA_MATCH 
{ 
	TCP_MATCH_RANGE match; 
	CFtpConnection* ftp; 
}; 
 
enum FTP_COMMAND 
{  
	FTP_COMMAND_NONE, 
	FTP_COMMAND_CWD, 
	FTP_COMMAND_CDUP, 
	FTP_COMMAND_PASV, 
	FTP_COMMAND_PWD, 
	FTP_COMMAND_RETR, 
	FTP_COMMAND_STOR, 
	FTP_COMMAND_OTHERS 
}; 
 
BOOL AFXAPI CompareElements(const FTP_DATA_MATCH* pElement1, const FTP_DATA_MATCH* pElement2); 
typedef CList CFtpDataMatchList; 
 
BOOL DeleteMatch(CFtpDataMatchList* pMatchList, FTP_DATA_MATCH& match); 
BOOL AddMatch(CFtpDataMatchList* pMatchList, FTP_DATA_MATCH& match); 
BOOL FindMatch(const CFtpDataMatchList* pMatchList, const IP* ip, const TCP*tcp, CFtpConnection**ppFtp); 
 
//get temporary file name that doesn't exist now 
void FtpGetTempFileName(const char filename[MAX_PATH], DWORD startPos, char tempfilename[MAX_PATH]); 
 
typedef CFtpConnection* HFTPCONNECT; 
class CFtpConnection: public CLineConnection 
{ 
public: 
	CFtpConnection(CMapKeyToConnect *pHashTbl, CFtpDataMatchList* pMatchList,  
		const ETHERNET *ether, const IP* ip,  
		NetInfo* pNi, const NETINFO_CALLBACKS *pFuncs, DWORD dwAttachData); 
	virtual ~CFtpConnection(); 
	virtual void OnLine(int sender, int receiver, const char* line, int lineLen); 
	virtual enum CONNECT_TYPE GetConnectType(){return FTP_CONNECT;}; 
	void OnDataCreate(CFtpDataConnection* pFtpData); 
	void OnDataDelete(CFtpDataConnection* pFtpData); 
	void OnDataReceived(CFtpDataConnection* pFtpData,  
						const TCP_ADDR* sender, const TCP_ADDR* receiver,  
						const BYTE* pData, DWORD length); 
	void ClearMatchContext(); 
 
	friend HTCPCONNECT GetFtpDataConnect(HFTPCONNECT hFtp); 
private: 
	char m_szWorkDir[MAX_PATH]; 
 
	FTP_DATA_MATCH m_match; 
	BOOL m_bMatchAdded; 
 
	enum FTP_COMMAND m_cmd; 
	char m_szLastCmd[MAX_FTP_LINE]; 
	DWORD m_dwStartPos; 
 
	CFtpDataConnection *m_ftpData; 
	SOCKET_KEY m_ftpDataKey; 
 
	CMapKeyToConnect *m_pHashTbl; 
	CFtpDataMatchList *m_pMatchList; 
}; 
 
HTCPCONNECT GetFtpDataConnect(HFTPCONNECT hFtp); 
 
class CFtpDataConnection: public CConnection 
{ 
public: 
	CFtpDataConnection(CFtpConnection* pFtp, const ETHERNET *ether, const IP* ip, NetInfo* pNi,  
		const NETINFO_CALLBACKS *pFuncs, DWORD dwAttachData); 
	virtual ~CFtpDataConnection(); 
	virtual BOOL OnData(int sender, int receiver, const BYTE *pData, DWORD length); 
private: 
	CFtpConnection *m_ftp; 
}; 
 
 
#endif