123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #ifndef __TYPHOON_DEFINE_C__H__
- #define __TYPHOON_DEFINE_C__H__
- #include "uv.h"
- #include "YyAuthenticationManageFile.h"
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #ifndef SOCKADDR
- typedef struct sockaddr SOCKADDR;
- #endif
- //ChannelID 宏定义
- #define TYPHOON_INVALID_CHANNEL_ID 0xffff //无效的channelID
- #define TYPHOON_DEFAULT_CHANNEL_ID 0 //连接创建成功后的默认channelID
- #define TYPHOON_INVALID_HANDLE 0
- #define CCMODE_DROPRATE 0 //只使用丢包率作为拥塞控制输入
- #define CCMODE_RTT 1 //只使用RTT作为拥塞控制输入
- #define CCMODE_DROPRATE_AND_RTT 2 //使用丢包率和RTT作为拥塞控制输入
- #define CCMODE_LOW_PRIORITY 3 //低优先级流量算法
- #define TYPHOON_INVALID_CCMODE 255 //无效的CCMODE
- #define MAX_HASH_KEY_LEN 32 //hash秘钥最大长度
- #define MAX_TYPHOON_HOST_LEN 128 //host字符串最大长度
- #define MAX_TYPHOON_USERNAME_LEN 128 //用户名最大长度
- #define MAX_TYPHOON_PASSWORD_LEN 128 //用户名最大长度
- typedef void * HTyphoonChannel;
- typedef void * HTyphoonConn;
- typedef void * HTyphoon;
- typedef void * HTyPhoonConnCallBack;
- typedef void * HTyphoonBuff;
- typedef void * HTyphoonFecTun;
- typedef void (*Typhoon_Logger)(char* str);
- typedef void (*Typhoon_LevelLogger)(int level, char* str);
- typedef void (*TyphonnConn_TraverseChannels_Cb_C)(HTyphoonConn Conn, HTyphoonChannel Channel, void* arg);
- typedef int (*Typhoon_SynchronizedExecute_Cb)(void* arg);
- typedef void (*Typhoon_Logger_Flush)();
- typedef enum TYPHOON_ERROCODE
- {
- //errocode : 0,成功,1失败超时
- TYPHOON_CON_SUCCEED = 0,
- TYPHOON_CON_TIMEOUT,
- TYPHOON_CON_BUTT,
- TYPHOON_CON_NETWORK_ERROR // 网络异常
- }enTyphoonErr;
- typedef enum TYPHOON_DISCONNECT_CAUSE
- {
- TYPHOON_REMOTE_DISCONNECT = 0,
- TYPHOON_TIMEOUT_DISCONNECT = 1,
- TYPHOON_MTU_RESET = 2,
- TYPHOON_INVALID_AK = 3, //不合法的客户端, 用于授权
- TYPHOON_IN_BLACKLIST = 4, //客户端IP在黑名单中或不在白名单中
-
- TYPHOON_DISCONNECT_BUTT
- }enTyphoonDisconnectCause;
- //channel断开状态码
- typedef enum TYPHOON_CHANNEL_CLOSE_TYPE
- {
- TYPHOON_CHANNEL_CLOSE_NORMAL = 0, //对端主动CloseChannel导致的channel断开
- TYPHOON_CHANNEL_CLOSE_RESET, //对端channel已经异常关闭导致的channel断开
- TYPHOON_CHANNEL_CLOSE_INFO, //正常shutdown后, channel进入close状态前的通知
- TYPHOON_CHANNEL_CLOSE_BUTT
- }enChannelCloseType;
- typedef enum TYPHOON_COMPRESS_METHOD
- {
- TYPHOON_COMPRESS_NONE = 0, //不支持压缩
- TYPHOON_COMPRESS_ZSTD = 0x01, //支持ZSTD
- TYPHOON_COMPRESS_ZLIB = 0x02, //支持ZLIB
- TYPHOON_COMPRESS_RESERVE2 = 0x04, //保留值, 用于后续扩充
- TYPHOON_COMPRESS_RESERVE3 = 0x08,
- TYPHOON_COMPRESS_RESERVE4 = 0x10,
- TYPHOON_COMPRESS_RESERVE5 = 0x20,
- TYPHOON_COMPRESS_RESERVE6 = 0x40,
- TYPHOON_COMPRESS_RESERVE7 = 0x80
- }enTyphoonCompressMethod;
- enum tagTYPHOON_LOGLEVEL
- {
- TYPHOON_INFO = 20,
- TYPHOON_NOTICE = 40,
- TYPHOON_DEBUG = 60,
- TYPHOON_WARN = 80,
- TYPHOON_ERROR = 100,
- TYPHOON_FATAL = 120,
- TYPHOON_BUTT
- };
- typedef enum TYPHOON_SDNPATH_TYPE
- {
- TYPHOON_SDN_RELAY = 0,
- TYPHOON_SDN_DIRECT = 1,
- TYPHOON_SDN_TCP_TUNNLE = 2,
- TYPHOON_SDNTYPE_BUTT
- }enTyphoonSDNPathType;
- typedef struct TyphoonTimerConfig
- {
- int32_t TryConnectTime;
- int32_t HandShakeTime;
- int32_t ConnBrokenTime;
- }stTyphoonTimerConfig;
- struct TyphoonConnStats //1条连接的统计信息
- {
- /* Rx */
- int64_t m_dwRead; //当前接收到的数据长度,已经确认的
- int64_t m_ReadCount; //当前接收到的包数,已经确认的
- int64_t m_dwDumpCount; //收到的重包数
- int64_t m_dwDumpSize; //收到的重包大小
- int64_t m_dwOutRange; //收到的不在接收窗口中的包数
- int64_t m_dwOutRangeSize; //收到的不在接收窗口中的包大小
- int64_t m_AppRxTraffic; //实际接收到的应用层报文流量大小, 当数据被压缩时, 网络流量小于应用层报文原始大小
- int64_t m_RecvResendCount; //收到的重发报文数量
- int64_t m_RecvResendSize; //收到的重发报文数量
- int64_t m_RxFecDataSize; //收到的Fec数据大小
- int64_t m_RxFecDataCount; //收到的Fec报文数量
- int64_t m_RxFecRecoverDataSize; //通过FEC恢复出的数据数量
- int64_t m_RxFecRecoverDataCount; //通过FEC恢复出的数据个数
- int64_t m_RxErrorFecCount; //Fec解码错误次数统计
- int64_t m_RxFecOutRangeCount; //Fec解码成功后, 恢复的数据不在接收窗口内次数统计
- int64_t m_RxFecDumpCount; //Fec解码成功后, 恢复的数据已经收到重复次数统计
- int64_t m_RxFecNoDecoderpCount; //Fec原始数据, 无法找到Decoder的统计(原因为FecRecover报文丢失了)
- int64_t m_RxDelayedDataCount; //数据的部分报文由于丢失重传, 比未丢失报文的数据达到时间要晚的数量
- int64_t m_RxFecMismatchDecoderCount;
- int64_t m_RxFecErrorSegindex;
- int64_t m_RxFecDataLateCount;
-
- /* Tx */
- int64_t m_dwWrite; //当前接发送的数据长度,已经确认的
- int64_t m_Checked; //已经确认的包数, ACK+SACK
- int64_t m_SendTotalCount; //总共发送的总包数,包括重传部分
- int64_t m_ReSendCount; //快速重传的包数
- int32_t m_rtt; //连接的RTT
- int32_t m_minrtt; //连接的最小RTT
- int64_t m_AppTxTraffic; //记录应用层Send接口的数据流量大小
- int64_t m_TxFecDataSize; //发出的Fec数据大小
- int64_t m_TxFecDataCount; //发出的Fec报文数量
- int32_t m_TxDropCount; //模拟丢包功能丢失的报文数量
-
- };
- typedef struct TyphoonCfg
- {
- Typhoon_Logger Log; //Typhoon内部日志输出接口, 如果不设置则无日志输出
- Typhoon_LevelLogger pfnLevelLogger; //Typhoon内部日志输出接口, 如果不设置则无日志输出
- uint32_t UdpSocketSendBuffSize; //Typhoon实例的UDP socket发送缓存大小, 1个Typhoon实例绑定1个UDP socket, 由该实例所有连接共用;
- //默认值为1MB, 发送缓冲区大小建议不小于1MB
- uint32_t UdpSocketRecvBuffSize; //Typhoon实例的UDP socket接收缓存大小, 1个Typhoon实例绑定1个UDP socket, 由该实例所有连接共用;
- //默认值为1MB, 接收缓冲区大小建议不小于1MB
- uint16_t PackCountTriggerAck; //收到多少个数据报文触发一次ACK, 默认为250个
- uint8_t LoopInterval; //Typhoon内部调度间隔, 默认为10毫秒
- uint8_t AckInterval; //客户端最大ACK响应间隔时间, 默认为50毫秒
- uint8_t NoLockMode; //如果Typhoon应用与Typhoon协议栈运行在同一个线程中, 此处设置为1, 双方的数据传递可以不使用锁
- //默认为0, 即双方的数据传递会使用锁
- uint8_t HightSpeedMode; //是否为HightSpeedMode, 默认为0
- uint8_t CCMode; //拥塞控制模式. 0使用丢包率, 1使用RTT, 2使用丢包率+时延
- uint16_t ResistDropRate; //可抵抗的丢包率. 这里使用万分制比列表示, 默认为250, 即万分之250 --> 2.5%
- uint8_t IOThreadNum; //Typhoon Socket I/O线程数量, 默认为1, 最大可以设置为2
- uint8_t ResendCheckTime; //在进行报文重发时, 需要确认报文上次发送时间到重发时是否大于RTT+1个缓冲时间, 默认值为10毫秒
- uint8_t UdpGSO; //是否启用UDP GSO, UDP GSO在Linux内核4.18后才支持CentOS 8.0支持
- uint8_t BindCpu; //是否启用CPU绑定, 默认为0不启用
- uint32_t LogLevel; //日志输出级别, 只有大于指定级别才输出日志, 默认为DEBUG(60)
- Typhoon_Logger_Flush Flush;
- }stTyphoonCfg;
- typedef struct TyphoonConnCfg
- {
- uint32_t MaxQueueSize; //Max Size of Typhoon connection send and recv queue size
- uint32_t FixedSendSpeed; //连接的固定发送速度, 默认为0表示不设置, 由typhoon自动探测发送速度;
- //如该值设置后, typhoon内部发送速度探测算法不再生效, 连接每秒发送速度的按照用户设置值进行
- uint32_t MaxSendSpeed; //连接的最大发送速度, 默认为0表示不设置;
- //如该选项进行了设置, 发送实时速度依然由typhoon内部算法决定, 但是连接最大的速度不能超过本设置值
- uint32_t MinSendSpeed; //如该选项进行了设置, Typhoon的发送速度不低于该值
- uint16_t MaxChannelSize; //每条连接可以建立的channel数量
- uint16_t MaxSegmentSize; //Typhonn协议每个报文的最大值
- uint32_t SendBuffSize; //连接发送缓存大小, 这个配置仅影响初始发送缓冲值, typhoon算法会自动计算发送缓存大小最优值, 以保证发送效率
- uint32_t RecvBuffSize; //连接接收缓存大小
- uint8_t UseThreadForAppDataCb; //配置当前连接是否使用额外的线程执行用户数据通知回调, 默认为1, 即使用
- //取值范围[0, 1]
- uint8_t CompressMethod; //连接支持的压缩方法, 可以设置为支持1种或多种方法, 通过enTyphoonCompressMethod的值 | 得到结果
- uint8_t TransferMode; //连接传输模式, 分为文件传输模式0, 实时传输模式1, 默认为0
- uint8_t UseDataPush; //取值范围[0, 1]: 1 PushData, 0 PullData. 当数据达到时, PushData的方式是调用OnRead回调, 非PushData(PullData)的方式是调用OnDataArrived回调
- //两种方式没有本质区别, 区别在于OnRead回调让用户必须立刻马上处理这个数据, 而OnDataArrived只是通知用户数据达到了, 用户可以选择马上处理或者不马上处理
- uint8_t m_checkFlag; //0:不开启校验;1:开启 xxHash 校验
- }stTyphoonConnCfg;
- typedef struct TyphoonProxyLicense{
- uint8_t version;
- uint16_t clientNum; //允许接入的客户端数量,0表示无限制
- uint16_t clientLicenseLevel; //允许接入的客户端的带宽,单位Mbps,0表示无限制
- uint32_t flow; //流量,包括上行和下行流量,单位G,0表示无限制
- }sTyphoonProxyLicense;
- typedef int32_t (*Typhoon_AppInit_Callback)();
- typedef void (*Typhoon_AppUninit_Callback)();
- typedef void (*TyphoonConn_OnConnected)(HTyphoonConn pConn, enTyphoonErr erro, uint8_t *data, uint16_t data_len);
- typedef void (*TyphoonConn_OnDisconnected)(HTyphoonConn pConn, enTyphoonDisconnectCause cause);
- typedef void (*TyphoonConn_OnRead)(HTyphoonConn pConn, HTyphoonChannel pChan,uint8_t* pData,int32_t len);
- typedef void (*TyphoonConn_OnWritable)(HTyphoonConn pConn, HTyphoonChannel pChan);
- typedef void (*TyphoonConn_OnSentDataAcknowledged)(HTyphoonConn pConn, HTyphoonChannel pChan, int32_t ackLen);
- typedef void (*TyphoonConn_OnDataArriveNotify)(HTyphoonConn pConn, HTyphoonChannel pChan);
- typedef void (*TyphoonConn_OnChannelOpen)(HTyphoonConn pConn, HTyphoonChannel pChan);
- typedef void (*TyphoonConn_OnChannelClose)(HTyphoonConn pConn, HTyphoonChannel pChan, enChannelCloseType closeType);
- typedef void (*TyphoonConn_OnAuthChange)(HTyphoonConn pConn, sTyphoonProxyLicense *license);
- typedef void (*TyphoonConn_OnFecTunOpen)(HTyphoonConn pConn, HTyphoonFecTun pTun);
- typedef void (*TyphoonConn_OnFecTunClose)(HTyphoonConn pConn, HTyphoonFecTun pTun);
- typedef uint32_t (*TyphoonConn_OnTimer)(HTyphoonConn pConn);
- typedef void (*TyphoonConn_OnSDNRouteChange)(HTyphoonConn pConn, enTyphoonSDNPathType type);
- typedef struct __TyPhoonConnCallBack
- {
- TyphoonConn_OnConnected pfnOnConnected;
- TyphoonConn_OnDisconnected pfnOnDisconnected;
- TyphoonConn_OnRead pfnOnRead;
- TyphoonConn_OnWritable pfnWritable;
- TyphoonConn_OnSentDataAcknowledged pfnOnSentDataAcknowledged;
- TyphoonConn_OnDataArriveNotify pfnOnDataArriveNotify;
- TyphoonConn_OnChannelOpen pfnOnChannelOpen;
- TyphoonConn_OnChannelClose pfnOnChannelClose;
- TyphoonConn_OnAuthChange pfnOnAuthChange;
- TyphoonConn_OnTimer pfnOnTimer;
- TyphoonConn_OnSDNRouteChange pfnOnSDNRouteChange;
- }stTyPhoonConnCallBack;
- typedef struct __Socks5Config
- {
- char server[MAX_TYPHOON_HOST_LEN]; //代理服务器ip或域名
- uint16_t port; //代理服务器端口
- char username[MAX_TYPHOON_USERNAME_LEN]; //代理服务器用户名
- char password[MAX_TYPHOON_PASSWORD_LEN]; //代理服务器密码
- }stTyphoonSocks5Config;
- #ifdef __cplusplus
- }
- #endif
- #endif
|