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