📄 natpacket.h
字号:
/*********************************************************************
* 模块名称:natpacket
* 说明:NAT服务器的包结构定义,以及协议定义
* 其它说明:
* 作者: 刘青山
* 时间 : 2004-09-22 21:13:30
*********************************************************************/
#ifndef _NATPACKET_H
#define _NATPACKET_H
#ifndef _WIN32
typedef unsigned char BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef unsigned char bool;
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif
#endif
#define NAT_VER 0x03//0x02
#define MAC_LEN 16
#define SECRET_KEY "%7fj*9&f^Fh$#j@9"
#define KEY_LEN 16
enum DES_LEVEL {
DL_NO_DES = 0,
DL_DES_DATA,
};
// 无论是服务器发的包还是客户端的包,长度都不会超过1500,如果发送数据块比较大
// 可以在上层分割为更小的包,发送包的长度由引擎通过速度测试决定最合适的包大小
#pragma pack(1)
typedef struct tagP2P_HDR
{
BYTE byVer; // 版本号
DWORD dwDst; // 目标KKID
DWORD dwSrc; // 源KKID
DWORD dwSwitch; // 中间转发用户,目前主要是服务器
WORD wCmd; // 命令号
WORD wSeq; // 包序列号
WORD wAckseq; // 应答包序列号
WORD wDatalen; // 附带数据长度,整个包最大不超过1024
BYTE HMac[MAC_LEN];
BYTE byDesLevel; // 加密级别
WORD wCheck; // check code
}P2P_HDR,*LPP2P_HDR;
#pragma pack()
#define P2P_HDR_LEN sizeof(P2P_HDR)
#define P2P_DATA_LEN 0x400//0x578 // 1400
#define P2P_USER_LEN (P2P_DATA_LEN-P2P_HDR_LEN)
// 服务器或其它响应码
static const WORD ANS_OK=0x0000 ; // 正确
static const WORD ANS_FAIL=0x0001 ; // 失败
static const WORD ANS_REG_SUCCESS= 0x0002; // 申请注册成功
static const WORD ANS_REG_FAIL= 0x0003; // 注册失败
static const WORD ANS_EXCEED_MAX_USER= 0x0004; // 请求人数大于系统支持人数
static const WORD ANS_NOT_REG= 0x0005; // 还没有注册服务
enum
{
// 客户端与服务器之间命令号
CMD_START =0x0000,
CMD_REG_USER=0x0001, // 在NAT服务器上注册用户
CMD_REQ_USERINFO, // 在NAT服务器上查询用户的NAT信息
CMD_REQ_HOLE, // 服务器向用户申请打洞
CMD_SWITCH, // 转发数据包
CMD_UNREGISTER, // 在NAT服务器上注销用户
CMD_ACK, // 客户端应答包
CMD_KEEPALIVE, // 保持连接包
// 客户端对客户端命令
CMD_NORMAL_PACKET, // 发送普通数据包
CMD_MULTI_PACKET, // 发送多个数据包,目前不支持
CMD_ACK_HOLE, // 服务器应答申请打洞信息
//CRC命令系列
CMD_REQ_CRC, // 申请CRC传输
CMD_ACK_CRC, // Nat服务器的CRC回复包
CMD_EST_CRC, // CRC双方均已连接成功
CMD_CRC_SWITCH, // CRC转发数据包
CMD_OFFLINE, // 用户离线
CMD_REL_CRC, // 释放CRC的连接
CMD_RPT_STATUS, // 报告发送普通数据包状况,包头 + 响应码(2个字节,前面定义s)
CMD_END // 最大命令号
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -