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


#ifndef _NETINFO_H_ 
#define _NETINFO_H_ 
 
#include "tcpip.h" 
 
#define HTTP_HEADER_LINE_BUFFER_SIZE 16384 
#define MAX_HTTP_HEADER_LINE 8192 
#define	MAX_URL_LENGTH 8192 
#define MAX_HOST_LENGTH 256 
#define MAX_HTTP_ITEM_LENGTH 256 
struct HTTP_HEADER_INFO 
{ 
	char method[MAX_HTTP_ITEM_LENGTH]; 
	char url[MAX_URL_LENGTH]; 
	char content_Location[MAX_URL_LENGTH]; 
	char location[MAX_URL_LENGTH]; 
	char http_Version[MAX_HTTP_ITEM_LENGTH]; 
	char status_Code[MAX_HTTP_ITEM_LENGTH]; 
	char host[MAX_HOST_LENGTH]; 
	char connection[MAX_HTTP_ITEM_LENGTH]; 
	char content_Encoding[MAX_HTTP_ITEM_LENGTH]; 
	char content_Length[MAX_HTTP_ITEM_LENGTH]; 
	char content_MainType[MAX_HTTP_ITEM_LENGTH]; 
	char content_SubType[MAX_HTTP_ITEM_LENGTH]; 
	char content_Range[MAX_HTTP_ITEM_LENGTH]; 
	char referer[MAX_URL_LENGTH]; 
	char transfer_Encoding[MAX_HTTP_ITEM_LENGTH]; 
}; 
 
enum ACL_PEMMISION_TYPE {ACL_ALLOW, ACL_DENY}; 
struct TCPUDP_ACL_RANGE 
{ 
	IP_ADDR addrLow; 
	WORD portLow; 
	IP_ADDR addrHigh; 
	WORD portHigh; 
}; 
struct ACL_ITEM 
{ 
	enum ACL_PEMMISION_TYPE permit; 
	TCPUDP_ACL_RANGE src; 
	TCPUDP_ACL_RANGE dst; 
	time_t validUntil; 
}; 
 
enum CONNECT_TYPE { INVALID_CONNECT, TCP_CONNECT, LINE_CONNECT, FTP_CONNECT,  
		POP3_CONNECT, SMTP_CONNECT, HTTP_CONNECT}; 
 
class CConnection;//msdn中没有,connect.h自定义 
class CLineConnection;//msdn中没有,继承cconnection 
class CFtpConnection; 
class CHttpConnection; 
class CSmtpConnection; 
class CPop3Connection; 
typedef CConnection* HTCPCONNECT; 
typedef CLineConnection* HLINECONNECT; 
typedef CFtpConnection* HFTPCONNECT; 
typedef CHttpConnection* HHTTPCONNECT; 
typedef CSmtpConnection* HSMTPCONNECT; 
typedef CPop3Connection* HPOP3CONNECT; 
typedef struct NetInfo* HNETINFO; 
 
//四.	获取数据接口 
struct NETINFO_CALLBACKS  
{ 
//==========================================================================================// 
//原始包(包括MAC层)响应函数 
// 
	//通知用户原始包的到来 
	void (*OnRawPacket)(HNETINFO hNi, const BYTE* pData, DWORD length); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//TCP连接(包括LINE,FTP,SMTP,POP3,HTTP等)打开关闭处理函数 
// 
	//通知用户并由用户决定此连接是否打开,及其打开类型,返回TRUE表明打开, 返回FALSE表明不打开 
	BOOL (*OnOpenConnect)(HNETINFO hNi, const TCP_ADDR* connecter, const TCP_ADDR* listener,  
						enum CONNECT_TYPE *retType, DWORD* pdwAttachData); 
	//通知用户某连接将关闭 
	void (*OnCloseConnect)(HNETINFO hNi, HTCPCONNECT hConnect); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//原始TCP连接(不包括LINE,FTP,SMTP,POP3,HTTP等)数据响应函数 
// 
	//通知用户某TCP连接有数据到达 
	void (*OnTcpData)(HNETINFO hNi, HTCPCONNECT hConnect, BOOL bConnecterToListener,  
					const BYTE*pData, DWORD length); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//文本行TCP连接(不包括FTP,SMTP,POP3,HTTP等)响应函数 
// 
	//通知用户某文本行TCP连接有文本行数据到达 
	//line include ending CRLF and NULL chars ( 3 char ), lineLen = strlen(line)  
	void (*OnTcpLine)(HNETINFO hNi, HLINECONNECT hConnect, BOOL bConnecterToListener,  
					const char*line, DWORD lineLen); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//FTP连接响应函数 
// 
	//通知用户某ftp连接客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnFtpCommand)(HNETINFO hNi, HFTPCONNECT hFtpConnect, const char* szCommand); 
	//通知用户某ftp连接服务端已发出应答,此应答及对应的行尾部的CRLF已被去掉 
	void (*OnFtpReply)(HNETINFO hNi, HFTPCONNECT hFtpConnect,  
		const char* szCommand, const char* szReply); 
	//通知用户某ftp连接已准备传送一个文件,  
	//参数szFullUnixFilePath已包含了'/'为目录分隔符的全路径 
	void (*OnFtpFileTransferBegin)(HNETINFO hNi, HFTPCONNECT hFtpConnect, DWORD dwStartPos, 
						BOOL bClientToServer, const char* szFullUnixFilePath);						 
	//通知用户某FTP连接的某文件有一段数据已被传输 
	void (*OnFtpFileData)(HNETINFO hNi, HFTPCONNECT hFtpConnect,  
						const BYTE*pData, DWORD length); 
	//通知用户某FTP连接的某文件已传输完毕 
	void (*OnFtpFileTransferEnd)(HNETINFO hNi, HFTPCONNECT hFtpConnect); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//HTTP连接响应函数 
// 
	//通知用户某HTTP连接的客户端即将发消息 
	void (*OnHttpClientBegin)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
	//通知用户某HTTP连接的客户端发送的消息头 
	void (*OnHttpClientHeader)(HNETINFO hNi, HHTTPCONNECT hHttpConnect, 
						const HTTP_HEADER_INFO* pClientHeader); 
	//通知用户某HTTP连接的客户端即将发送的已解码的消息体数据 
	void (*OnHttpClientBody)(HNETINFO hNi, HHTTPCONNECT hHttpConnect,  
					const BYTE* pData, DWORD length); 
	//通知用户某HTTP连接的客户端发送的消息体数据结束 
	void (*OnHttpClientEnd)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
 
 
	//通知用户某HTTP连接的服务器端即将发消息 
	void (*OnHttpServerBegin)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
	//通知用户某HTTP连接的服务器端发送的消息头 
	void (*OnHttpServerHeader)(HNETINFO hNi, HHTTPCONNECT hHttpConnect, 
						const HTTP_HEADER_INFO* pClientHeader, const HTTP_HEADER_INFO* pServerHeader); 
	//通知用户某HTTP连接的服务器端发送的已解码的消息体数据 
	void (*OnHttpServerBody)(HNETINFO hNi, HHTTPCONNECT hHttpConnect,  
					const BYTE* pData, DWORD length); 
	//通知用户某HTTP连接的服务器端发送的消息体数据结束 
	void (*OnHttpServerEnd)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
//==========================================================================================// 
 
 
 
//==========================================================================================// 
//SMTP连接响应函数 
// 
	//通知用户某SMTP连接的客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnSmtpCommand)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect, const char* szCommand); 
	//通知用户某SMTP连接的服务器端已发出回应,此回应行尾部的CRLF已被去掉 
	void (*OnSmtpReply)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
						const char* szCommand, const char* szReply); 
 
	//通知用户某SMTP连接的客户端已准备发信 
	void (*OnSmtpMessageTransferBegin)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
	//通知用户某SMTP连接的客户端发出的信头 
	void (*OnSmtpMessageHeader)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
							const char* from, const char* to, const char* subject); 
	//通知用户已解码出的MIME实体头信息 
	void (*OnSmtpMessageEntityHeader)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
							const char* mimeMainType, const char* mimeSubType,  
							const char* filename); 
	//通知用户已解码出的MIME实体内容 
	void (*OnSmtpMessageEntityBody)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
			const BYTE* pData, DWORD length); 
	//通知用户正在解码的MIME实体已经结束 
	void (*OnSmtpMessageEntityBodyEnd)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
	//通知用户某SMTP的信传输结束 
	void (*OnSmtpMessageTransferEnd)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
//==========================================================================================// 
 
 
 
//==========================================================================================// 
//POP3连接响应函数 
// 
	//通知用户某POP3连接的客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnPop3Command)(HNETINFO hNi, HPOP3CONNECT hPop3Connect, const char* szCommand); 
	//通知用户某POP3连接的服务器端已发出回应,此回应行尾部的CRLF已被去掉 
	void (*OnPop3Reply)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
						const char* szCommand, const char* szReply); 
 
	//通知用户某POP3连接的客户端已准备收信 
	void (*OnPop3MessageTransferBegin)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
	//通知用户某POP3连接的客户端收到的信头 
	void (*OnPop3MessageHeader)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
							const char* from, const char* to, const char* subject); 
	//通知用户已解码出的MIME实体头信息 
	void (*OnPop3MessageEntityHeader)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
							const char* mimeMainType, const char* mimeSubType,  
							const char* filename); 
	//通知用户已解码出的MIME实体内容 
	void (*OnPop3MessageEntityBody)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
			const BYTE* pData, DWORD length); 
	//通知用户正在解码的MIME实体已经结束 
	void (*OnPop3MessageEntityBodyEnd)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
	//通知用户某POP3的信传输结束 
	void (*OnPop3MessageTransferEnd)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
//==========================================================================================// 
}; 
 
 
 
//选择网络适配器的调用接口 
//得到可供选择的适配器总数 
int GetAdapterCount();  
//得到相应序号的适配器描述字符串,以作为OpenAdatper()的入口参数。其中  
//0<=index