//*************************************************************************
// BasicFamilyParser.cpp: implementation of the CBasicFamilyParser class.
// Version : 1.000
// Date : July 2007
// Author : Ye Feng
// Email :  vcye23@gmail.com
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
/////////////////////////////////////////////////////////////////////////////
#pragma once

/**
 * <pre>
 * 定义一些QQ用到的常量,常量的命名方式经过调整,统一为
 * QQ_[类别]_[名称]
 * 
 * 比如表示长度的常量,为QQ_LENGTH_XXXXX
 * 表示最大值的常量,为QQ_MAX_XXXX
 * </pre>
 * 
 * @author luma
 */
class QQ
{
public:
    /** 空字符串 */
    static std::string EMPTY_STRING;
    
    // 协议族标识
    /** 基本协议族 */
    static int QQ_PROTOCOL_FAMILY_BASIC;
    /**
     * 05开头的协议族,目前发现的用途
     * 1. 得到群内自定义表情
     */
    static int QQ_PROTOCOL_FAMILY_05;
    /** 
     * 03开头的协议族,目前发现的用途
     * 1. 得到自定义头像
     */
    static int QQ_PROTOCOL_FAMILY_03;
    /** Disk协议族,用来访问网络硬盘 */
    static int QQ_PROTOCOL_FAMILY_DISK;
    
    /** 所有协议族 */
    static int QQ_PROTOCOL_ALL;
    
    /** 基本协议族输入包的包头长度 */
    static int QQ_LENGTH_BASIC_FAMILY_IN_HEADER;
    /** 基本协议族输出包的包头长度 */
    static int QQ_LENGTH_BASIC_FAMILY_OUT_HEADER;
    /** 基本协议族包尾长度 */
    static int QQ_LENGTH_BASIC_FAMILY_TAIL;
    /** FTP协议族包头长度 */
    static int QQ_LENGTH_FTP_FAMILY_HEADER;
    /** 05协议族包头长度 */
    static int QQ_LENGTH_05_FAMILY_HEADER;
    /** 05协议族包尾长度 */
    static int QQ_LENGTH_05_FAMILY_TAIL;
    /** 网络硬盘协议族输入包包头长度 */
    static int QQ_LENGTH_DISK_FAMILY_IN_HEADER;
    /** 网络硬盘协议族输出包包头长度 */
    static int QQ_LENGTH_DISK_FAMILY_OUT_HEADER;
    
    // QQ包类型定义
    /** QQ基本协议族包头 */
    static BYTE QQ_HEADER_BASIC_FAMILY;
    /** QQ P2P协议族 */
    static BYTE QQ_HEADER_P2P_FAMILY;
    /** 03协议族包头 */
    static BYTE QQ_HEADER_03_FAMILY;
    /** 04开头的协议族,未知含义,文件中转包有用到过 */
    static BYTE QQ_HEADER_04_FAMILY;
    /** 05协议族包头 */
    static BYTE QQ_HEADER_05_FAMILY;
    /** QQ基本协议族包尾 */
    static BYTE QQ_TAIL_BASIC_FAMILY;
    /** 05系列协议族包尾 */
    static BYTE QQ_TAIL_05_FAMILY;
    
    // 代理类型,和协议没有关系
    /** 代理类型 - 无代理 */
    static int QQ_PROXY_NONE;
    /** 代理类型 - Http代理 */
    static int QQ_PROXY_HTTP;
    /** 代理类型 - Socks5代理 */
    static int QQ_PROXY_SOCKS5;
    
    /** 不需要确认的包的发送次数,这个值应该是随便的,由于QQ Logout包发了4次,所以我选4 */ 
    static int QQ_SEND_TIME_NOACK_PACKET;

    /** QQ登录包中16到51字节的固定内容 */
    static BYTE QQ_LOGIN_16_51[];
    static int QQ_LOGIN_16_51_LENGTH;
    
    /** QQ登录包中53到68字节的固定内容 */
    static BYTE QQ_LOGIN_53_68[];
    static int QQ_LOGIN_53_68_LENGTH;
    
    /** QQ登录包中的未知固定内容 */
    static BYTE QQ_LOGIN_SEGMENTS[];
    static int QQ_LOGIN_SEGMENTS_LENGTH;
    
    /** 包最大大小 */
    static int QQ_MAX_PACKET_SIZE;
    /**
     * 消息最大长度,QQ是最大700字节
     */
    static int QQ_MAX_SEND_IM;
    /** 密钥长度 */
    static int QQ_LENGTH_KEY;
    /** 登陆信息长度 */
    static int QQ_LENGTH_LOGIN_DATA;
    
    /** QQ UDP缺省端口 */
    static int QQ_PORT_UDP;
    /** QQ TCP缺省端口 */
    static int QQ_PORT_TCP;
    /** 使用HTTP代理时连接QQ服务器的端口 */
    static int QQ_PORT_HTTP;
       
    /** QQ缺省编码方式 */
    static std::string QQ_CHARSET_DEFAULT;
    /** 消息编码,好像可以自己胡乱定义 */
    static short QQ_CHARSET_GB;
    static short QQ_CHARSET_EN;
    static short QQ_CHARSET_BIG5;
    
    /** 单位: ms */
    static long QQ_TIMEOUT_SEND;
    /** 最大重发次数 */
    static int QQ_MAX_RESEND;
    /** Keep Alive包发送间隔,单位: ms */
    static long QQ_INTERVAL_KEEP_ALIVE;
    
    // 和虚拟摄像头有关系
    /** 显示虚拟摄像头 */
    static int QQ_CAM_SHOW_FAKE;
    /** 隐藏虚拟摄像头 */
    static int QQ_CAM_DONT_SHOW_FAKE;

    /** QQ分组的名称最大字节长度,注意一个汉字是两个字节 */
    static int QQ_MAX_GROUP_NAME;
    /** QQ昵称的最长长度 */
    static int QQ_MAX_NAME_LENGTH;
    /** QQ缺省表情个数 */
    static int QQ_COUNT_DEFAULT_FACE;
    /** 得到用户信息的回复包字段个数 */
    static int QQ_COUNT_GET_USER_INFO_FIELD;
    /** 修改用户信息的请求包字段个数,比实际的多1,最开始的QQ号不包括 */
    static int QQ_COUNT_MODIFY_USER_INFO_FIELD;
    /** 用户备注信息的字段个数 */
    static int QQ_COUNT_REMARK_FIELD;

    /** 客户端版本号标志 - QQ2005 */
    static short QQ_CLIENT_VERSION_0E1B;
    /**
     * 服务器端版本号 (不一定)
     * 不一定真的是表示服务器端版本号,似乎和发出的包不同,这个有其他的含义,
     * 感觉像是包的类型标志
     */
    static short QQ_SERVER_VERSION_0100;
    
    // 用于网络硬盘协议族,标识版本
    static short QQ_DISK_SERVER_VERSION_0101;
    static short QQ_DISK_CLIENT_VERSION_0207;
    static short QQ_DISK_SERVER_VERSION;
    static short QQ_DISK_CLIENT_VERSION;
    
    /** 中转服务器版本号 */
    static short QQ_AGENT_SERVER_VERSION_04D1;
    
    /** 程序缺省使用的客户端版本号 */
    static short QQ_CLIENT_VERSION;
        
    /** 正常登陆 */
    static BYTE QQ_LOGIN_MODE_NORMAL;
    /** 隐身登陆 */
    static BYTE QQ_LOGIN_MODE_HIDDEN;
    /** 性别-男 */
    static BYTE QQ_GENDER_GG;
    /** 性别-女 */
    static BYTE QQ_GENDER_MM;
    /** 性别-未知 */
    static BYTE QQ_GENDER_UNKNOWN;
    
    /** 标志-QQ会员 */
    static BYTE QQ_FRIEND_FLAG_QQ_MEMBER;
    /** 标志-手机 */
    static BYTE QQ_FRIEND_FLAG_MOBILE;
    /** 标志-手机绑定 */
    static BYTE QQ_FRIEND_FLAG_BIND_MOBILE;
    
    /** 在线状态-在线 */
    static BYTE QQ_STATUS_ONLINE;
    /** 在线状态-离线 */
    static BYTE QQ_STATUS_OFFLINE;
    /** 在线状态-离开 */
    static BYTE QQ_STATUS_AWAY;
    /** 在线状态-隐身 */
    static BYTE QQ_STATUS_HIDDEN;
    
    // 用户标志,比如QQFriend类,好友状态改变包都包含这样的标志
    /** 有摄像头 */
    static int QQ_FLAG_CAM;
    /** 绑定了手机 */
    static int QQ_FLAG_BIND;
    /** 移动QQ用户 */
    static int QQ_FLAG_MOBILE;
    /** 会员 */
    static int QQ_FLAG_MEMBER;
    /** TM登录 */
    static int QQ_FLAG_TM;
    
    // 用户属性,在UserProperty中,相关命令0x0065
    /** 有个性签名 */
    static int QQ_FLAG_HAS_SIGNATURE;
    /** 有自定义头像 */
    static int QQ_FLAG_HAS_CUSTOM_HEAD;

    /** 好友列表从第一个好友开始 */
    static short QQ_POSITION_FRIEND_LIST_START;
    /** 好友列表已经全部得到 */
    static short QQ_POSITION_FRIEND_LIST_END;
    /** 在线好友列表从第一个好友开始 */
    static BYTE QQ_POSITION_ONLINE_LIST_START;
    /** 在线好友列表已经全部得到 */
    static BYTE QQ_POSITION_ONLINE_LIST_END;
    /** 用户属性列表从第一个好友开始 */
    static short QQ_POSITION_USER_PROPERTY_START;
    /** 用户属性列表结束 */
    static short QQ_POSITION_USER_PROPERTY_END;
    /** 不对得到的好友列表排序 */
    static BYTE QQ_FRIEND_LIST_UNSORTED;
    /** 对得到的好友列表排序 */
    static BYTE QQ_FRIEND_LIST_SORTED;
    
    // 回复常量    
    /** 通用常量,操作成功 */
    static BYTE QQ_REPLY_OK;
    /** 对方已经是我的好友 */
    static BYTE QQ_REPLY_ADD_FRIEND_ALREADY;
    /** 请求登录令牌成功 */
    static BYTE QQ_REPLY_REQUEST_LOGIN_TOKEN_OK;
    /** 登录信息-重定向 */
    static BYTE QQ_REPLY_LOGIN_REDIRECT;
    /** 登录信息-登录失败 */
    static BYTE QQ_REPLY_LOGIN_FAIL;
    /** 改变在线状态成功 */
    static BYTE QQ_REPLY_CHANGE_STATUS_OK;
    /** 发送认证消息成功 */
    static BYTE QQ_REPLY_ADD_FRIEND_AUTH_OK;
    /** 高级搜索结束,没有更多数据 */
    static BYTE QQ_REPLY_ADVANCED_SEARCH_END;
    /** 申请中转服务器,重定向 */
    static short QQ_REPLY_REQUEST_AGENT_REDIRECT;
    /** 申请中转服务器成功 */
    static short QQ_REPLY_REQUEST_AGENT_OK;
    /** 要发送的图片太大 */
    static short QQ_REPLY_REQUEST_AGENT_TOO_LONG;
    
    /** 命令常量 - 登出 */
    static short QQ_CMD_LOGOUT;
    /** 命令常量 - 保持在线状态 */
    static short QQ_CMD_KEEP_ALIVE;
    /** 命令常量 - 修改自己的信息 */
    static short QQ_CMD_MODIFY_INFO;
    /** 命令常量 - 查找用户 */
    static short QQ_CMD_SEARCH_USER;
    /** 命令常量 - 得到好友信息 */
    static short QQ_CMD_GET_USER_INFO;
    /** 
     * 命令常量 - 添加一个好友
     * 
     * @deprecated 2005使用QQ_CMD_ADD_FRIEND_EX 
     */
    static short QQ_CMD_ADD_FRIEND;
    /** 命令常量 - 删除一个好友 */
    static short QQ_CMD_DELETE_FRIEND;
    /** 命令常量 - 发送验证信息 */
    static short QQ_CMD_ADD_FRIEND_AUTH;
    /** 命令常量 - 改变自己的在线状态 */
    static short QQ_CMD_CHANGE_STATUS;
    /** 命令常量 - 确认收到了系统消息 */
    static short QQ_CMD_ACK_SYS_MSG;
    /** 命令常量 - 发送消息 */
    static short QQ_CMD_SEND_IM;
    /** 命令常量 - 接收消息 */
    static short QQ_CMD_RECV_IM;
    /** 命令常量 - 把自己从对方好友名单中删除 */
    static short QQ_CMD_REMOVE_SELF;
    /** 请求一些操作需要的密钥,比如文件中转,视频也有可能 */
    static short QQ_CMD_REQUEST_KEY;
    /** 命令常量 - 登陆 */
    static short QQ_CMD_LOGIN;
    /** 命令常量 - 得到好友列表 */
    static short QQ_CMD_GET_FRIEND_LIST;
    /** 命令常量 - 得到在线好友列表 */
    static short QQ_CMD_GET_ONLINE_OP;
    /** 命令常量 - 发送短消息 */
    static short QQ_CMD_SEND_SMS;
    /** 命令常量 - 群相关命令 */
    static short QQ_CMD_CLUSTER_CMD;
    /** 命令常量 - 测试连接 */
    static short QQ_CMD_TEST;
    /** 命令常量 - 分组数组操作 */
    static short QQ_CMD_GROUP_DATA_OP;
    /** 命令常量 - 上传分组中的好友QQ号列表 */
    static short QQ_CMD_UPLOAD_GROUP_FRIEND;
    /** 命令常量 - 好友相关数据操作 */
    static short QQ_CMD_FRIEND_DATA_OP;
    /** 命令常量 - 下载分组中的好友QQ号列表 */
    static short QQ_CMD_DOWNLOAD_GROUP_FRIEND;
    /** 命令常量 - 好友等级信息相关操作 */
    static short QQ_CMD_FRIEND_LEVEL_OP; 
    /** 命令常量 - 隐私数据操作 */
    static short QQ_CMD_PRIVACY_DATA_OP;
    /** 命令常量 - 群数据操作命令 */
    static short QQ_CMD_CLUSTER_DATA_OP;
    /** 命令常量 - 好友高级查找 */
    static short QQ_CMD_ADVANCED_SEARCH;
    /** 命令常量 - 请求登录令牌 */
    static short QQ_CMD_REQUEST_LOGIN_TOKEN;
    /** 命令常量 - 用户属性操作 */
    static short QQ_CMD_USER_PROPERTY_OP;
    /** 命令常量 - 临时会话操作 */
    static short QQ_CMD_TEMP_SESSION_OP;
    /** 命令常量 - 个性签名的操作 */
    static short QQ_CMD_SIGNATURE_OP;
    /** 命令常量 - 接收到系统消息 */
    static short QQ_CMD_RECV_MSG_SYS;
    /** 命令常量 - 好友改变状态 */
    static short QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS;
    /** 命令常量 - 天气操作 */
    static short QQ_CMD_WEATHER_OP;
    /** 命令常量 - QQ2005使用的添加好友命令 */
    static short QQ_CMD_ADD_FRIEND_EX;
    /** 命令常量 - 发送验证消息 */
    static short QQ_CMD_AUTHORIZE;
    /** 命令常量 - 未知命令,调试用途 */
    static short QQ_CMD_UNKNOWN;
    
    // 0x005E的子命令
    /** 只能通过号码搜到我 */
    static BYTE QQ_SUB_CMD_SEARCH_ME_BY_QQ_ONLY;
    /** 共享地理位置 */
    static BYTE QQ_SUB_CMD_SHARE_GEOGRAPHY;
    
    // 是否设置一个选项,用在如0x005E这样的命令中,其他地方如果类似也可使用
    /** 设置 */
    static BYTE QQ_VALUE_SET;
    /** 取消设置 */
    static BYTE QQ_VALUE_UNSET;
    
    // 0x005C的子命令
    /** 得到好友等级信息 */
    static BYTE QQ_SUB_CMD_GET_FRIEND_LEVEL;
    
    // 0x005F的子命令    
    /** 得到群在线成员 */
    static BYTE QQ_SUB_CMD_GET_CLUSTER_ONLINE_MEMBER;
    
    /** 自定义头像上传服务器 */
    static std::string QQ_SERVER_UPLOAD_CUSTOM_HEAD;
    /** 自定义头像下载服务器 */
    static std::string QQ_SERVER_DOWNLOAD_CUSTOM_HEAD;
    /** 网络硬盘服务器 */
    static std::string QQ_SERVER_DISK[];
    /** 网络硬盘服务器端口 */
    static int QQ_SERVER_DISK_PORT;
    
    /** 命令常量 - 请求中转 */
    static short QQ_05_CMD_REQUEST_AGENT;
    /** 命令常量 - 请求得到自定义表情 */
    static short QQ_05_CMD_REQUEST_FACE;
    /** 命令常量 - 开始传送 */
    static short QQ_05_CMD_TRANSFER;
    /** 命令常量 - 请求开始传送 */
    static short QQ_05_CMD_REQUEST_BEGIN;
    
    // 网络硬盘协议族
    /** 开始会话 */
    static short QQ_DISK_CMD_BEGIN_SESSION;
    /** 身份认证 */
    static short QQ_DISK_CMD_AUTHENTICATE;
    /** 网络硬盘密码操作 */
    static short QQ_DISK_CMD_PASSWORD_OP;
    /** 请求网络硬盘服务器列表 */
    static short QQ_DISK_CMD_GET_SERVER_LIST;
    /** 列出我的网络硬盘目录 */
    static short QQ_DISK_CMD_LIST_MY_DISK_DIR;
    /** 新建文件夹 */
    static short QQ_DISK_CMD_CREATE;
    /** 删除 */
    static short QQ_DISK_CMD_DELETE;
    /** 重命名 */
    static short QQ_DISK_CMD_RENAME;
    /** 移动 */
    static short QQ_DISK_CMD_MOVE;
    /** 上传文件 */
    static short QQ_DISK_CMD_UPLOAD;
    /** 下载文件 */
    static short QQ_DISK_CMD_DOWNLOAD;
    /** 得到文件实际大小 */
    static short QQ_DISK_CMD_GET_SIZE;
    /** 结束上传 */
    static short QQ_DISK_CMD_FINALIZE;
    /** 免费申请开通网络硬盘 */
    static short QQ_DISK_CMD_APPLY;
    /** 准备上传或下载 */
    static short QQ_DISK_CMD_PREPARE;
    /** 得到共享网络硬盘列表 */
    static short QQ_DISK_CMD_GET_SHARED_DISK;
    /** 得到某人的共享网络硬盘目录结构 */
    static short QQ_DISK_CMD_LIST_SHARED_DISK_DIR;
    /** 得到某个目录对什么好友共享了 */
    static short QQ_DISK_CMD_GET_SHARE_LIST;
    /** 设置共享列表 */
    static short QQ_DISK_CMD_SET_SHARE_LIST;
    
    // 网络硬盘子命令,用于0x0402
    /** 密码认证 */
    static int QQ_DISK_SUB_CMD_AUTHENTICATE;
    /** 设置网络硬盘密码 */
    static int QQ_DISK_SUB_CMD_SET_PASSWORD;
    /** 取消网络硬盘密码 */
    static int QQ_DISK_SUB_CMD_CANCEL_PASSWORD;
    
    // 0x0401的状态码
    /** 网络硬盘认证需要密码 */
    static int QQ_DISK_STATUS_NEED_PASSWORD;
    
    // 网络硬盘回复码
    /** 认证失败 */
    static int QQ_REPLY_AUTH_FAIL;
    
    // 网络硬盘缺省目录id
    /** 我的文档 */
    static int QQ_DISK_DIR_MY_DOC;
    /** 我的图片 */
    static int QQ_DISK_DIR_MY_PICTURE;
    /** 我的多媒体 */
    static int QQ_DISK_DIR_MY_MULTIMEDIA;
    /** 个人助理,其内部的名称是System */
    static int QQ_DISK_DIR_MY_ASSISTANT;
    /** 网络收藏夹 */
    static int QQ_DISK_DIR_MY_FAVORITE;
    /** 网络记事本,它的父目录是System,内部名称是Note */
    static int QQ_DISK_DIR_MY_NOTEBOOK;
    /** 自定义表情 */
    static int QQ_DISK_DIR_MY_CUSTOM_FACE;
    /** 自定义头像,它的父目录是System,内部名称是Chatword */
    static int QQ_DISK_DIR_MY_CUSTOM_HEAD;
    /** QQ网络相册 */
    static int QQ_DISK_DIR_MY_ALBUM;
    /** 根目录 */
    static int QQ_DISK_DIR_ROOT;
    
    /** 网络硬盘保留的用于系统文件夹最大id */
    static int QQ_DISK_DIR_MAX_SYSTEM_ID;
    
    // 网络硬盘上的文件属性
    /** 是一个目录 */
    static int QQ_DISK_FLAG_DIRECTORY;
    /** 标明一个文件还没有上传完毕 */
    static int QQ_DISK_FLAG_NOT_FINALIZED;
    /** 是否设置了共享 */
    static int QQ_DISK_FLAG_SHARED;
    /** 是一个用户号码 */
    static int QQ_DISK_FLAG_USER;
    /** 网络收藏夹文件 */
    static int QQ_DISK_FLAG_FAVORITE;
    /** 网络相册文件 */
    static int QQ_DISK_FLAG_ALBUM;
    
    /*
     * 03协议族
     */
    /** 请求得到好友自定义头像数据 */
    static short QQ_03_CMD_GET_CUSTOM_HEAD_DATA;
    /** 请求得到好友自定义头像信息 */
    static short QQ_03_CMD_GET_CUSTOM_HEAD_INFO;
    
    /**
     * 初始群自定义表情中转服务器,从这些初始的服务器开始请求,直到请求
     * 到一个愿意提供中转的服务器为止
     */
    static std::string QQ_SERVER_GROUP_FILE[];
    
    // 用于0x001D
    /** 请求密钥类型 - 未知 */
    static BYTE QQ_SUB_CMD_REQUEST_UNKNOWN03_KEY;
    /** 请求密钥类型 - 文件中转密钥 */
    static BYTE QQ_SUB_CMD_REQUEST_FILE_AGENT_KEY;
    /** 请求密钥类型 - 未知 */
    static BYTE QQ_SUB_CMD_REQUEST_UNKNOWN06_KEY;
    /** 请求密钥类型 - 未知 */
    static BYTE QQ_SUB_CMD_REQUEST_UNKNOWN07_KEY;
    /** 请求密钥类型 - 未知 */
    static BYTE QQ_SUB_CMD_REQUEST_UNKNOWN08_KEY;
    
    /** 群操作命令 - 创建群 */
    static BYTE QQ_CLUSTER_CMD_CREATE_CLUSTER;
    /** 群操作命令 - 修改群成员 */
    static BYTE QQ_CLUSTER_CMD_MODIFY_MEMBER;
    /** 群操作命令 - 修改群资料 */
    static BYTE QQ_CLUSTER_CMD_MODIFY_CLUSTER_INFO;
    /** 群操作命令 - 得到群资料 */
    static BYTE QQ_CLUSTER_CMD_GET_CLUSTER_INFO;
    /** 群操作命令 - 激活群 */
    static BYTE QQ_CLUSTER_CMD_ACTIVATE_CLUSTER;
    /** 群操作命令 - 搜索群 */
    static BYTE QQ_CLUSTER_CMD_SEARCH_CLUSTER;
    /** 群操作命令 - 加入群 */
    static BYTE QQ_CLUSTER_CMD_JOIN_CLUSTER;
    /** 群操作命令 - 加入群的验证消息 */
    static BYTE QQ_CLUSTER_CMD_JOIN_CLUSTER_AUTH;
    /** 群操作命令 - 退出群 */
    static BYTE QQ_CLUSTER_CMD_EXIT_CLUSTER;
    /** 
     * 群操作命令 - 发送群消息 
     * 
     * @deprecated 2004以后使用了QQ_CLUSTER_CMD_SEND_IM_EX
     */
    static BYTE QQ_CLUSTER_CMD_SEND_IM;
    /** 群操作命令 - 得到在线成员 */
    static BYTE QQ_CLUSTER_CMD_GET_ONLINE_MEMBER;
    /** 群操作命令 - 得到成员资料 */
    static BYTE QQ_CLUSTER_CMD_GET_MEMBER_INFO;
    /** 群操作命令 - 修改群名片 */
    static BYTE QQ_CLUSTER_CMD_MODIFY_CARD;
    /** 群操作命令 - 批量得到成员群名片中的真实姓名 */
    static BYTE QQ_CLUSTER_CMD_GET_CARD_BATCH;
    /** 群操作命令 - 得到某个成员的群名片 */
    static BYTE QQ_CLUSTER_CMD_GET_CARD;
    /** 群操作命令 - 提交组织架构到服务器 */
    static BYTE QQ_CLUSTER_CMD_COMMIT_ORGANIZATION;
    /** 群操作命令 - 从服务器获取组织架构 */
    static BYTE QQ_CLUSTER_CMD_UPDATE_ORGANIZATION;
    /** 群操作命令 - 提交成员分组情况到服务器 */
    static BYTE QQ_CLUSTER_CMD_COMMIT_MEMBER_ORGANIZATION;
    /** 群操作命令 - 得到各种version id */
    static BYTE QQ_CLUSTER_CMD_GET_VERSION_ID;
    /** 群操作命令 - 扩展格式的群消息 */
    static BYTE QQ_CLUSTER_CMD_SEND_IM_EX;
    /** 群操作命令 - 设置成员角色 */
    static BYTE QQ_CLUSTER_CMD_SET_ROLE;
    /** 群操作命令 - 转让自己的角色给他人 */
    static BYTE QQ_CLUSTER_CMD_TRANSFER_ROLE;
    /** 解散群,如果自己是群的创建者,则使用这个命令 */
    static BYTE QQ_CLUSTER_CMD_DISMISS_CLUSTER;
    /** 群操作命令 - 创建临时群 */
    static BYTE QQ_CLUSTER_CMD_CREATE_TEMP;
    /** 群操作命令 - 修改临时群成员列表 */
    static BYTE QQ_CLUSTER_CMD_MODIFY_TEMP_MEMBER;
    /** 群操作命令 - 退出临时群 */
    static BYTE QQ_CLUSTER_CMD_EXIT_TEMP;
    /** 群操作命令 - 得到临时群资料 */
    static BYTE QQ_CLUSTER_CMD_GET_TEMP_INFO;
    /** 群操作命令 - 修改临时群资料 */
    static BYTE QQ_CLUSTER_CMD_MODIFY_TEMP_INFO;
    /** 群操作命令 - 发送临时群消息 */
    static BYTE QQ_CLUSTER_CMD_SEND_TEMP_IM;
    /** 群操作命令 - 子群操作 */
    static BYTE QQ_CLUSTER_CMD_SUB_CLUSTER_OP;
    /** 群操作命令 - 激活临时群 */
    static BYTE QQ_CLUSTER_CMD_ACTIVATE_TEMP;
    
    /** 群操作命令回复 - 不存在这个群 */
    static BYTE QQ_REPLY_NO_SUCH_CLUSTER;
    /** 群操作命令回复 - 群已经被删除 */
    static BYTE QQ_REPLY_TEMP_CLUSTER_REMOVED;
    /** 群操作命令回复 - 你已经不是临时群的成员 */
    static BYTE QQ_REPLY_NOT_TEMP_CLUSTER_MEMBER;
    /** 群操作命令回复 - 你已经不是固定群的成员 */
    static BYTE QQ_REPLY_NOT_CLUSTER_MEMBER;
    
    // 临时会话操作回复码
    /** 临时会话消息发送成功,但是对方可能不在线,无法及时回复 */
    static BYTE QQ_REPLY_MAYBE_OFFLINE;
    
    // 短信回复码,用来表示单条短信的状态
    /** 短信发送成功 */
    static BYTE QQ_REPLY_SMS_OK;
    /** 队列中,准备发送 */
    static BYTE QQ_REPLY_SMS_QUEUED;
    /** 发送失败 */
    static BYTE QQ_REPLY_SMS_FAIL;
    
    /** 群类型常量 - 固定群 */
    static BYTE QQ_CLUSTER_TYPE_PERMANENT;
    /** 临时群类型常量 - 多人对话 */
    static BYTE QQ_CLUSTER_TYPE_DIALOG;
    /** 临时群类型常量 - 讨论组 */
    static BYTE QQ_CLUSTER_TYPE_SUBJECT;
    
    /** 群成员角色操作 - 设置管理员 */
    static BYTE QQ_ROLE_OP_SET_ADMIN;
    /** 群成员角色操作 - 取消管理员 */
    static BYTE QQ_ROLE_OP_UNSET_ADMIN;
    
    /** 群成员角色标志位 - 管理员 */
    static int QQ_ROLE_ADMIN;
    /** 群成员角色标志位 - 股东 */
    static int QQ_ROLE_STOCKHOLDER;
    
    /** 群操作子命令 - 添加成员,用在修改成员列表命令中 */
    static BYTE QQ_CLUSTER_SUB_CMD_ADD_MEMBER;
    /** 群操作子命令 - 删除成员,用在修改成员列表命令中 */
    static BYTE QQ_CLUSTER_SUB_CMD_REMOVE_MEMBER;
    
    /** 群操作子命令 - 得到群内的讨论组列表 */
    static BYTE QQ_CLUSTER_SUB_CMD_GET_SUBJECT_LIST;
    /** 群操作子命令 - 得到多人对话列表 */
    static BYTE QQ_CLUSTER_SUB_CMD_GET_DIALOG_LIST;
    
    /** 群认证消息类型 - 请求加入群 */
    static BYTE QQ_CLUSTER_AUTH_REQUEST;
    /** 群认证消息类型 - 同意加入群 */
    static BYTE QQ_CLUSTER_AUTH_APPROVE;
    /** 群认证消息类型 - 拒绝加入群 */
    static BYTE QQ_CLUSTER_AUTH_REJECT;
    /** 加入群的回复码 - 加入成功 */
    static BYTE QQ_CLUSTER_JOIN_OK;
    /** 加入群的回复码 - 对方需要认证 */
    static BYTE QQ_CLUSTER_JOIN_NEED_AUTH;
    /** 加入群的回复码 - 群禁止加入 */
    static BYTE QQ_CLUSTER_JOIN_DENIED;
    /** 群的搜索方式 - 根据群号搜索 */
    static BYTE QQ_CLUSTER_SEARCH_BY_ID;
    /** 群的搜索方式 - 搜索示范群 */
    static BYTE QQ_CLUSTER_SEARCH_DEMO;
    
    // 操作码,用在设置角色时
    /** 取消管理员 */
    static BYTE QQ_CLUSTER_OP_UNSET_ADMIN;
    /** 设置管理员 */
    static BYTE QQ_CLUSTER_OP_SET_ADMIN;
      
    // 群消息的content type
    /** 消息中不包含自定义表情 */
    static short QQ_CONTENT_TYPE_DEFAULT;
    /** 消息中包含自定义表情 */
    static short QQ_CONTENT_TYPE_RICH;
    
    /** 消息回复类型 - 正常回复 */
    static BYTE QQ_IM_NORMAL_REPLY;
    /** 消息回复类型 - 自动回复 */
    static BYTE QQ_IM_AUTO_REPLY;
    
    // 消息来源,主要在ReceiveIMPacket中使用,和协议关系不大
    /** 来自好友 */
    static int QQ_IM_FROM_USER;
    /** 来自系统 */
    static int QQ_IM_FROM_SYS;
    /** 来自群 */
    static int QQ_IM_FROM_CLUSTER;
    /** 来自短消息 */
    static int QQ_IM_FROM_SMS;
    /** 来自临时会话 */
    static int QQ_IM_FROM_TEMP_SESSION;
    
    // 子命令常量,用于命令0x0027
    /** 得到在线好友 */
    static BYTE QQ_SUB_CMD_GET_ONLINE_FRIEND;
    /** 得到系统服务 */
    static BYTE QQ_SUB_CMD_GET_ONLINE_SERVICE;
    
    // 子命令常量,服务于命令0x003C
    /** 服务器端数据操作 - 上传组名 */
    static BYTE QQ_SUB_CMD_UPLOAD_GROUP_NAME;
    /** 服务器端数据操作 - 下载组名 */
    static BYTE QQ_SUB_CMD_DOWNLOAD_GROUP_NAME;
    
    // 子命令常量,用于命令0x0066
    /** 临时会话操作 - 发送临时会话消息 */
    static BYTE QQ_SUB_CMD_SEND_TEMP_SESSION_IM;
    
    // 子命令常量,服务于命令0x003E
    /** 服务器端数据操作 - 批量下载好友备注 */
    static BYTE QQ_SUB_CMD_BATCH_DOWNLOAD_FRIEND_REMARK;
    /** 服务器端数据操作 - 上传好友备注 */
    static BYTE QQ_SUB_CMD_UPLOAD_FRIEND_REMARK;
    /** 服务器端数据操作 - 添加好友到列表中 */
    static BYTE QQ_SUB_CMD_REMOVE_FRIEND_FROM_LIST;
    /** 服务器端数据操作 - 下载好友备注 */
    static BYTE QQ_SUB_CMD_DOWNLOAD_FRIEND_REMARK;
    
    // 子命令常量,用于子命令0x0067
    /** 修改个性签名 */
    static BYTE QQ_SUB_CMD_MODIFY_SIGNATURE;
    /** 删除个性签名 */
    static BYTE QQ_SUB_CMD_DELETE_SIGNATURE;
    /** 得到个性签名 */
    static BYTE QQ_SUB_CMD_GET_SIGNATURE;
    
    // 子命令,用于0x0065
    /** 得到用户属性 */
    static BYTE QQ_SUB_CMD_GET_USER_PROPERTY;
    
    // 子命令,用于0x00A6
    /** 得到天气数据 */
    static BYTE QQ_SUB_CMD_GET_WEATHER;
    
    // 这两个常量用在下载好友分组时
    /** 号码类型 - 号码代表一个用户 */
    static BYTE QQ_ID_IS_FRIEND;
    /** 号码类型 - 号码是一个群 */
    static BYTE QQ_ID_IS_CLUSTER;
    
    // 消息类型,就是ReceiveIMHeader中的类型,对于有些类型,我们做为通知来处理
    // 而不是显示在消息窗口中,比如请求加入,验证之类的消息
    /** 来自好友的消息 */
    static short QQ_RECV_IM_FRIEND;
    /** 来自陌生人的消息 */
    static short QQ_RECV_IM_STRANGER;
    /** 手机短消息 - 普通绑定用户 */
    static short QQ_RECV_IM_BIND_USER;
    /** 手机短消息 - 普通手机 */
    static short QQ_RECV_IM_MOBILE;
    /** 会员登录提示,这个消息基本没内容,就是用来提醒你是会员,可以显示一个窗口来告诉你上次登录时间和ip */
    static short QQ_RECV_IM_MEMBER_LOGIN_HINT;
    /** 手机短消息 - 移动QQ用户 */
    static short QQ_RECV_IM_MOBILE_QQ;
    /** 手机短消息 - 移动QQ用户(使用手机号描述) */
    static short QQ_RECV_IM_MOBILE_QQ_2;
    /** QQ直播消息 */
    static short QQ_RECV_IM_QQLIVE;
    /** 好友属性改变通知 */
    static short QQ_RECV_IM_PROPERTY_CHANGE;
    /** 临时会话消息 */
    static short QQ_RECV_IM_TEMP_SESSION;
    /** 未知类型的群消息,在2003时是普通群消息 */
    static short QQ_RECV_IM_UNKNOWN_CLUSTER;
    /** 通知我被加入到一个群,这个群先前已经建立,我是后来被加的 */
    static short QQ_RECV_IM_ADDED_TO_CLUSTER;
    /** 我被踢出一个群 */
    static short QQ_RECV_IM_DELETED_FROM_CLUSTER;
    /** 有人请求加入群 */
    static short QQ_RECV_IM_REQUEST_JOIN_CLUSTER;
    /** 同意对方加入群 */    
    static short QQ_RECV_IM_APPROVE_JOIN_CLUSTER;
    /** 拒绝对方加入群 */
    static short QQ_RECV_IM_REJECT_JOIN_CLUSTER;
    /** 通知我被加入到一个群,我是在群被创建的时候就被加的 */
    static short QQ_RECV_IM_CREATE_CLUSTER;
    /** 临时群消息 */
    static short QQ_RECV_IM_TEMP_CLUSTER;
    /** 固定群消息 */
    static short QQ_RECV_IM_CLUSTER;
    /** 群通知 */
    static short QQ_RECV_IM_CLUSTER_NOTIFICATION;
    /** 收到的系统消息 */ 
    static short QQ_RECV_IM_SYS_MESSAGE;
    /** 收到个性签名改变通知 */
    static short QQ_RECV_IM_SIGNATURE_CHANGE;
    /** 收到自定义头像变化通知 */
    static short QQ_RECV_IM_CUSTOM_HEAD_CHANGE;
    
    // QQ直播消息类型
    /** 网络硬盘通知 */
    static short QQ_LIVE_IM_TYPE_DISK;
    
    // 移动QQ手机短信的发送者描述类型
    /** 用QQ号描述发送者 */
    static BYTE QQ_MOBILE_QQ_BY_QQ;
    /** 用手机号码描述发送者 */
    static BYTE QQ_MOBILE_QQ_BY_MOBILE;
    
    // 系统消息类型
    /** 同一个QQ号在其他地方登录,我被踢出 */
    static BYTE QQ_RECV_IM_KICK_OUT;
    
    // 消息类型,这个类型比上面的类型又再低一级,他们基本从属于QQ_RECV_IM_FRIEND
    // 所以他们是normalIMHeader中的类型
    /** 普通文件消息 */
    static short QQ_IM_TYPE_TEXT;
    /** 一个TCP连接请求 */
    static short QQ_IM_TYPE_TCP_REQUEST;
    /** 接收TCP连接请求 */
    static short QQ_IM_TYPE_ACCEPT_TCP_REQUEST;
    /** 拒绝TCP连接请求 */
    static short QQ_IM_TYPE_REJECT_TCP_REQUEST;
    /** UDP连接请求 */
    static short QQ_IM_TYPE_UDP_REQUEST;
    /** 接受UDP连接请求 */
    static short QQ_IM_TYPE_ACCEPT_UDP_REQUEST;
    /** 拒绝UDP连接请求 */
    static short QQ_IM_TYPE_REJECT_UDP_REQUEST;
    /** 通知文件传输端口 */
    static short QQ_IM_TYPE_NOTIFY_IP;
    /** 请求对方主动连接 */
    static short QQ_IM_TYPE_ARE_YOU_BEHIND_FIREWALL;
    /** 未知含意 */
    static short QQ_IM_TYPE_ARE_YOU_BEHIND_PROXY;
    /** 未知含意,0x0041的回复 */
    static short QQ_IM_TYPE_YES_I_AM_BEHIND_PROXY;
    /** 通知文件中转服务器信息 */
    static short QQ_IM_TYPE_NOTIFY_FILE_AGENT_INFO;
    /** 取消TCP或者UDP连接请求 */
    static short QQ_IM_TYPE_REQUEST_CANCELED;
    
    // 以下常量用于QQ短信功能
    /** 短消息发送者最大名称字节长度 */
    static int QQ_MAX_SMS_SENDER_NAME;
    /** 接受者手机号最大长度 */
    static int QQ_MAX_SMS_MOBILE_LENGTH;
    /** 短信发送时,发送者名称和短信内容的字符数之和的最大值 */
    static int QQ_MAX_SMS_LENGTH;
    /** 发送模式 - 免提短信 */
    static BYTE QQ_SMS_MODE_HAND_FREE;
    /** 发送模式 - 普通 */
    static BYTE QQ_SMS_MODE_NORMAL;
    /** 短消息内容 - 普通短消息 */
    static BYTE QQ_SMS_CONTENT_NORMAL;
    /** 短消息内容 - 言语传情 */
    static BYTE QQ_SMS_CONTENT_LOVE_WORD;
    /** 短消息内容 - 精美图片 */
    static BYTE QQ_SMS_CONTENT_PICTURE;
    /** 短消息内容 - 悦耳铃声 */
    static BYTE QQ_SMS_CONTENT_RING;
    
    // 以下常量用于消息中的表情,对于自定义表情的表示格式参考NormalIM.java的注释
    /** 系统自带表情前导字节 */
    static BYTE QQ_TAG_DEFAULT_FACE;
    /** 自定义表情前导字节 */
    static BYTE QQ_TAG_CUSTOM_FACE;
    /** 新自定义表情,普通格式 */
    static BYTE QQ_FORMAT_TAG_NEW_CUSTOM_FACE;
    /** 已经出现过的自定义表情 */
    static BYTE QQ_FORMAT_TAG_EXISTING_CUSTOM_FACE;
    /** 新自定义表情,存储在服务器端  */
    static BYTE QQ_FORMAT_TAG_NEW_SERVER_SIDE_CUSTOM_FACE;
    /** 已经出现过的服务器端自定义表情 */
    static BYTE QQ_FORMAT_TAG_EXISTING_SERVER_SIDE_CUSTOM_SIDE;
    /** 未知自定义表情格式描述1,未知含义 */
    static BYTE QQ_FORMAT_TAG_UNKNOWN_1;
    /** 未知自定义表情格式描述2,未知含义 */
    static BYTE QQ_FORMAT_TAG_UNKNOWN_2;
    
    // 认证类型,加一个人为好友时是否需要验证等等
    /** 不需认证 */
    static BYTE QQ_AUTH_NO;
    /** 需要认证 */
    static BYTE QQ_AUTH_NEED;
    /** 对方拒绝加好友 */
    static BYTE QQ_AUTH_REJECT;
    
    // 认证类型,加入一个群是否需要验证等等
    /** 不需认证 */
    static BYTE QQ_AUTH_CLUSTER_NO;
    /** 需要认证 */
    static BYTE QQ_AUTH_CLUSTER_NEED;
    /** 群拒绝添加成员 */
    static BYTE QQ_AUTH_CLUSTER_REJECT;
    
    // 这三个常量用在添加好友认证的包中,表示你是请求,或者你拒绝还是同意别人的请求
    /** 通过认证 */
    static BYTE QQ_MY_AUTH_APPROVE;
    /** 拒绝认证  */
    static BYTE QQ_MY_AUTH_REJECT;
    /** 请求认证 */
    static BYTE QQ_MY_AUTH_REQUEST;
    
    // 联系方法的可见类型
    /** 完全公开 */
    static int QQ_CONTACT_OPEN;
    /** 仅好友可见 */
    static int QQ_CONTACT_ONLY_FRIENDS;
    /** 完全保密 */
    static int QQ_CONTACT_CLOSE;
    
    // 系统通知的类型
    /** 自己被别人加为好友 */
    static int QQ_SYS_BEING_ADDED;
    /** 
     * 对方请求加你为好友
     * 当对方不使用0x00A8命令发送认证消息,才会收到此系统通知
     */
    static int QQ_SYS_ADD_FRIEND_REQUEST;
    /** 同意对方加自己为好友 */
    static int QQ_SYS_ADD_FRIEND_APPROVED;
    /** 拒绝对方加自己为好友 */
    static int QQ_SYS_ADD_FRIEND_REJECTED;
    /** 广告 */
    static int QQ_SYS_ADVERTISEMENT;
    /** 未知含意 */
    static int QQ_SYS_UPDATE_HINT;
    /** 对方把你加为了好友 */
    static int QQ_SYS_BEING_ADDED_EX;
    /** 
     * 对方请求加你为好友
     * 当对方使用0x00A8命令发送认证消息,才会收到此系统通知
     */
    static int QQ_SYS_ADD_FRIEND_REQUEST_EX;
    /** 同意对方加自己为好友,同时加对方为好友 */
    static int QQ_SYS_ADD_FRIEND_APPROVED_AND_ADD;
    
    // QQ_SYS_ADD_FRIEND_REQUEST_EX消息中的最后一个字节标志,是否允许对方加自己为好友
    /** 允许对方也加自己为好友 */
    static BYTE QQ_FLAG_ALLOW_ADD_REVERSE;
    /** 不允许对方加自己为好友 */
    static BYTE QQ_FLAG_NOT_ALLOW_ADD_REVERSE;
    
    // 这是搜索用户时指定的搜索类类型,比如是查看全部在线用户,还是自定义查找
    /** 看谁在线上 */
    static BYTE QQ_SEARCH_ALL;
    /** 自定义搜索 */
    static BYTE QQ_SEARCH_CUSTOM;
    
    // 用于自定义头像
    /** 最大自定义头像分片大小 */
    static int QQ_MAX_CUSTOM_HEAD_FRAGMENT_SIZE;
    
    //////////////////////////////////////////////////////////////////////////////
    // 下面都是文件传输相关,这些常量是很早之前定义的,现在仅留做参考,是否正确无法保证
    
    /** QQ文件传送包的头部字节长度 */
    static int QQ_LENGTH_FILE_PACKET_HEADER;
    
    // 文件数据信息包的命令类型
    /** heart beat */
    static short QQ_FILE_CMD_HEART_BEAT;
    /** heart beat的确认 */
    static short QQ_FILE_CMD_HEART_BEAT_ACK;
    /** 文件传输已完成 */
    static short QQ_FILE_CMD_TRANSFER_FINISHED;
    /** 文件操作 */
    static short QQ_FILE_CMD_FILE_OP;
    /** 文件操作的确认 */
    static short QQ_FILE_CMD_FILE_OP_ACK;
    
    // QQ_FILE_CMD_FILE_OP携带的信息类型
    /** 文件基本信息 */
    static BYTE QQ_FILE_BASIC_INFO;
    /** 文件数据 */
    static BYTE QQ_FILE_DATA_INFO;
    /** 文件EOF */
    static BYTE QQ_FILE_EOF;
    
    // 文件控制信息传输包的命令类型
    /** 发送者say hello */
    static short QQ_FILE_CMD_SENDER_SAY_HELLO;
    /** 对发送者hello的确认 */
    static short QQ_FILE_CMD_SENDER_SAY_HELLO_ACK;
    /** 接收者say hello */
    static short QQ_FILE_CMD_RECEIVER_SAY_HELLO;
    /** 对接受者hello的确认 */
    static short QQ_FILE_CMD_RECEIVER_SAY_HELLO_ACK;
    /** 对通知IP的确认,即对QQ_IM_NOTIFY_IP的确认 */
    static short QQ_FILE_CMD_NOTIFY_IP_ACK;
    /** 试探连接 */
    static short QQ_FILE_CMD_PING;
    /** 试探连接的确认 */
    static short QQ_FILE_CMD_PONG;
    /** 主动连接对方 */
    static short QQ_FILE_CMD_YES_I_AM_BEHIND_FIREWALL;
    
    // 文件中转信息包的命令类型
    /** 发送者请求对方提供中转服务 */
    static short QQ_FILE_CMD_REQUEST_AGENT;
    /** 接收者向中转服务器报到 */
    static short QQ_FILE_CMD_CHECK_IN;
    /** 转发包,这个包里面内嵌着一个文件数据信息包 */
    static short QQ_FILE_CMD_FORWARD;
    /** 传输结束 */
    static short QQ_FILE_CMD_FORWARD_FINISHED;
    /** 服务器通知可以开始传输数据 */
    static short QQ_FILE_CMD_IT_IS_TIME;
    /** 我已经准备好 */
    static short QQ_FILE_CMD_I_AM_READY;
    
    // QQ_FILE_CMD_REQUEST_AGENT命令的应答类型
    /** 批准中转请求 */
    static short QQ_FILE_AGENT_SERVICE_APPROVED;
    /** 我现在忙,你找别人吧 */
    static short QQ_FILE_AGENT_SERVICE_REDIRECTED;
    
    // 传输类型
    /** 传输文件 */
    static BYTE QQ_TRANSFER_FILE;
    /** 传输自定义表情 */
    static BYTE QQ_TRANSFER_FACE;
    
    // 请求传送文件消息中的一个标志字节,传输类型之后那个,意思不明,姑且这样
    /** UDP,可能不是这意思 */
    static BYTE QQ_TRANSFER_FILE_UDP;
    /** 直接UDP,可能不是这意思 */
    static BYTE QQ_TRANSFER_FILE_DIRECT_UDP;
    /** TCP,可能不是这意思 */
    static BYTE QQ_TRANSFER_FILE_TCP;
    /** 直接TCP,可能不是这意思 */
    static BYTE QQ_TRANSFER_FILE_DIRECT_TCP;
    
    // 传送文件的各种情况,每种情况有其对应的连接策略,这个和协议无关,我自己定义的
    /** 双方位于同一个防火墙后 */
    static int QQ_SAME_LAN;
    /** 双方都不在防火墙后 */
    static int QQ_NONE_BEHIND_FIREWALL;
    /** 我在防火墙后 */
    static int QQ_I_AM_BEHIND_FIREWALL;
    /** 他在防火墙后 */
    static int QQ_HE_IS_BEHIND_FIREWALL;
    /** 双方在不同的防火墙后 */
    static int QQ_ALL_BEHIND_FIREWALL;
    
    // say hello时的hello BYTE,不同的情况这个字节不一样
    /** 双方位于同一个防火墙后的Hello */
    static BYTE QQ_SAME_IN_TO_SAME_IN_HELLO;
    /** 一个人在防火墙后,内部的人是发送方时的Hello */
    static BYTE QQ_IN_TO_OUT_HELLO;
    /** 一个人在防火墙后,外部的人是发送方时的Hello */
    static BYTE QQ_OUT_TO_IN_HELLO;
    /** 两个都不在防火墙内时的Hello */
    static BYTE QQ_OUT_TO_OUT_HELLO;
    
    /** 最大的做MD5的长度,当传送一个文件时,如果这个文件很大,则只对文件的前面一部分做MD5 */
    static int QQ_MAX_FILE_MD5_LENGTH;
};