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