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


#ifndef _CONNECT_H_ 
#define _CONNECT_H_ 
 
void IpNtoh(IP *ip); 
void TcpNtoh(TCP *tcp); 
void GetPseudoTcpHeader(PSEUDO_TCP_HEADER* pseudo, const IP* ip, WORD tcpLen); 
void GetPseudoUdpHeader(PSEUDO_UDP_HEADER* pseudo, const IP* ip, WORD udpLen); 
DWORD GetSum(const WORD *buffer, int size); 
WORD GetCheckSumFromSum(DWORD cksum); 
WORD GetTcpCheckSum(const TCP* tcp, const IP* ip, WORD tcpLen); 
WORD GetUdpCheckSum(const UDP* udp, const IP* ip, WORD udpLen); 
BOOL TcpIp2TcpAddr(const IP* ip, const TCP* tcp, TCP_ADDR tcpAddr[2], DWORD *pdwSrc); 
void GetConnectionTempFileName(const TCP_ADDR* connecter, const TCP_ADDR* listener,  
							   char fileName[MAX_PATH]); 
 
#define CONNECT_BREAKDOWN_DURATION 6 
//Á¬½ÓÀàÐÍ 
enum CONNECT_TYPE { INVALID_CONNECT, TCP_CONNECT, LINE_CONNECT, FTP_CONNECT,  
		POP3_CONNECT, SMTP_CONNECT, HTTP_CONNECT}; 
 
struct TCP_WINDOW_BUFFER 
{ 
	BYTE buffer[MAX_TCP_WINDOW_SIZE]; 
	BYTE bitmap[MAX_TCP_WINDOW_SIZE]; 
	DWORD lastByte; 
}; 
 
struct NetInfo; 
typedef NetInfo* HNETINFO; 
struct NETINFO_CALLBACKS; 
 
class CConnection 
{ 
public: 
	CConnection(const ETHERNET *ether, const IP*ip, NetInfo* pNi, const NETINFO_CALLBACKS *pFuncs, DWORD dwAttachData); 
	virtual ~CConnection(); 
	BOOL OnTcpIpPacket(const IP *ip); //return FALSE indicate this connection should be closed 
	BOOL CanKeepContinue(const IP*ip, const TCP*tcp, int sender); 
	BOOL IsMyPacket(const IP *ip); 
	virtual BOOL OnData(int sender, int receiver, const BYTE* pData, DWORD length); 
	virtual enum CONNECT_TYPE GetConnectType(){return TCP_CONNECT;}; 
	void BreakDownConnection(); 
public: 
	virtual BOOL IsTimeOut(); 
	time_t m_lastTime; 
public: 
	TCP_ADDR m_addr[2]; 
	SOCKET_DATA m_data[2]; 
	int m_listener, m_connecter; 
	NetInfo *m_pNi; 
	const NETINFO_CALLBACKS *m_pFuncs; 
	DWORD m_dwAttachData; 
	static DWORD m_dwConnectCount; 
protected: 
	TCP_WINDOW_BUFFER m_window[2]; 
	BYTE m_ether[2][ETHERNET_ADDR_LEN]; 
}; 
 
 
typedef CConnection* HTCPCONNECT; 
 
DWORD GetConnectAttachData(HTCPCONNECT hConnect); 
void SetConnectAttachData(HTCPCONNECT hConnect, DWORD dwAttachData); 
enum CONNECT_TYPE GetConnectTypeEx(HTCPCONNECT hConnect); 
void GetConnectAddress(HTCPCONNECT hConnect, TCP_ADDR* conneter, TCP_ADDR* listener); 
void BreakDownConnect(HTCPCONNECT hConnect); 
 
#endif