TyphoonDefine.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #ifndef __TYPHOON_DEFINE_C__H__
  2. #define __TYPHOON_DEFINE_C__H__
  3. #include "uv.h"
  4. #include "YyAuthenticationManageFile.h"
  5. #ifdef __cplusplus
  6. extern "C"
  7. {
  8. #endif
  9. #ifndef SOCKADDR
  10. typedef struct sockaddr SOCKADDR;
  11. #endif
  12. //ChannelID 宏定义
  13. #define TYPHOON_INVALID_CHANNEL_ID 0xffff //无效的channelID
  14. #define TYPHOON_DEFAULT_CHANNEL_ID 0 //连接创建成功后的默认channelID
  15. #define TYPHOON_INVALID_HANDLE 0
  16. #define CCMODE_DROPRATE 0 //只使用丢包率作为拥塞控制输入
  17. #define CCMODE_RTT 1 //只使用RTT作为拥塞控制输入
  18. #define CCMODE_DROPRATE_AND_RTT 2 //使用丢包率和RTT作为拥塞控制输入
  19. #define CCMODE_LOW_PRIORITY 3 //低优先级流量算法
  20. #define TYPHOON_INVALID_CCMODE 255 //无效的CCMODE
  21. #define MAX_HASH_KEY_LEN 32 //hash秘钥最大长度
  22. #define MAX_TYPHOON_HOST_LEN 128 //host字符串最大长度
  23. #define MAX_TYPHOON_USERNAME_LEN 128 //用户名最大长度
  24. #define MAX_TYPHOON_PASSWORD_LEN 128 //用户名最大长度
  25. typedef void * HTyphoonChannel;
  26. typedef void * HTyphoonConn;
  27. typedef void * HTyphoon;
  28. typedef void * HTyPhoonConnCallBack;
  29. typedef void * HTyphoonBuff;
  30. typedef void * HTyphoonFecTun;
  31. typedef void (*Typhoon_Logger)(char* str);
  32. typedef void (*Typhoon_LevelLogger)(int level, char* str);
  33. typedef void (*TyphonnConn_TraverseChannels_Cb_C)(HTyphoonConn Conn, HTyphoonChannel Channel, void* arg);
  34. typedef int (*Typhoon_SynchronizedExecute_Cb)(void* arg);
  35. typedef void (*Typhoon_Logger_Flush)();
  36. typedef enum TYPHOON_ERROCODE
  37. {
  38. //errocode : 0,成功,1失败超时
  39. TYPHOON_CON_SUCCEED = 0,
  40. TYPHOON_CON_TIMEOUT,
  41. TYPHOON_CON_BUTT,
  42. TYPHOON_CON_NETWORK_ERROR // 网络异常
  43. }enTyphoonErr;
  44. typedef enum TYPHOON_DISCONNECT_CAUSE
  45. {
  46. TYPHOON_REMOTE_DISCONNECT = 0,
  47. TYPHOON_TIMEOUT_DISCONNECT = 1,
  48. TYPHOON_MTU_RESET = 2,
  49. TYPHOON_INVALID_AK = 3, //不合法的客户端, 用于授权
  50. TYPHOON_IN_BLACKLIST = 4, //客户端IP在黑名单中或不在白名单中
  51. TYPHOON_DISCONNECT_BUTT
  52. }enTyphoonDisconnectCause;
  53. //channel断开状态码
  54. typedef enum TYPHOON_CHANNEL_CLOSE_TYPE
  55. {
  56. TYPHOON_CHANNEL_CLOSE_NORMAL = 0, //对端主动CloseChannel导致的channel断开
  57. TYPHOON_CHANNEL_CLOSE_RESET, //对端channel已经异常关闭导致的channel断开
  58. TYPHOON_CHANNEL_CLOSE_INFO, //正常shutdown后, channel进入close状态前的通知
  59. TYPHOON_CHANNEL_CLOSE_BUTT
  60. }enChannelCloseType;
  61. typedef enum TYPHOON_COMPRESS_METHOD
  62. {
  63. TYPHOON_COMPRESS_NONE = 0, //不支持压缩
  64. TYPHOON_COMPRESS_ZSTD = 0x01, //支持ZSTD
  65. TYPHOON_COMPRESS_ZLIB = 0x02, //支持ZLIB
  66. TYPHOON_COMPRESS_RESERVE2 = 0x04, //保留值, 用于后续扩充
  67. TYPHOON_COMPRESS_RESERVE3 = 0x08,
  68. TYPHOON_COMPRESS_RESERVE4 = 0x10,
  69. TYPHOON_COMPRESS_RESERVE5 = 0x20,
  70. TYPHOON_COMPRESS_RESERVE6 = 0x40,
  71. TYPHOON_COMPRESS_RESERVE7 = 0x80
  72. }enTyphoonCompressMethod;
  73. enum tagTYPHOON_LOGLEVEL
  74. {
  75. TYPHOON_INFO = 20,
  76. TYPHOON_NOTICE = 40,
  77. TYPHOON_DEBUG = 60,
  78. TYPHOON_WARN = 80,
  79. TYPHOON_ERROR = 100,
  80. TYPHOON_FATAL = 120,
  81. TYPHOON_BUTT
  82. };
  83. typedef enum TYPHOON_SDNPATH_TYPE
  84. {
  85. TYPHOON_SDN_RELAY = 0,
  86. TYPHOON_SDN_DIRECT = 1,
  87. TYPHOON_SDN_TCP_TUNNLE = 2,
  88. TYPHOON_SDNTYPE_BUTT
  89. }enTyphoonSDNPathType;
  90. typedef struct TyphoonTimerConfig
  91. {
  92. int32_t TryConnectTime;
  93. int32_t HandShakeTime;
  94. int32_t ConnBrokenTime;
  95. }stTyphoonTimerConfig;
  96. struct TyphoonConnStats //1条连接的统计信息
  97. {
  98. /* Rx */
  99. int64_t m_dwRead; //当前接收到的数据长度,已经确认的
  100. int64_t m_ReadCount; //当前接收到的包数,已经确认的
  101. int64_t m_dwDumpCount; //收到的重包数
  102. int64_t m_dwDumpSize; //收到的重包大小
  103. int64_t m_dwOutRange; //收到的不在接收窗口中的包数
  104. int64_t m_dwOutRangeSize; //收到的不在接收窗口中的包大小
  105. int64_t m_AppRxTraffic; //实际接收到的应用层报文流量大小, 当数据被压缩时, 网络流量小于应用层报文原始大小
  106. int64_t m_RecvResendCount; //收到的重发报文数量
  107. int64_t m_RecvResendSize; //收到的重发报文数量
  108. int64_t m_RxFecDataSize; //收到的Fec数据大小
  109. int64_t m_RxFecDataCount; //收到的Fec报文数量
  110. int64_t m_RxFecRecoverDataSize; //通过FEC恢复出的数据数量
  111. int64_t m_RxFecRecoverDataCount; //通过FEC恢复出的数据个数
  112. int64_t m_RxErrorFecCount; //Fec解码错误次数统计
  113. int64_t m_RxFecOutRangeCount; //Fec解码成功后, 恢复的数据不在接收窗口内次数统计
  114. int64_t m_RxFecDumpCount; //Fec解码成功后, 恢复的数据已经收到重复次数统计
  115. int64_t m_RxFecNoDecoderpCount; //Fec原始数据, 无法找到Decoder的统计(原因为FecRecover报文丢失了)
  116. int64_t m_RxDelayedDataCount; //数据的部分报文由于丢失重传, 比未丢失报文的数据达到时间要晚的数量
  117. int64_t m_RxFecMismatchDecoderCount;
  118. int64_t m_RxFecErrorSegindex;
  119. int64_t m_RxFecDataLateCount;
  120. /* Tx */
  121. int64_t m_dwWrite; //当前接发送的数据长度,已经确认的
  122. int64_t m_Checked; //已经确认的包数, ACK+SACK
  123. int64_t m_SendTotalCount; //总共发送的总包数,包括重传部分
  124. int64_t m_ReSendCount; //快速重传的包数
  125. int32_t m_rtt; //连接的RTT
  126. int32_t m_minrtt; //连接的最小RTT
  127. int64_t m_AppTxTraffic; //记录应用层Send接口的数据流量大小
  128. int64_t m_TxFecDataSize; //发出的Fec数据大小
  129. int64_t m_TxFecDataCount; //发出的Fec报文数量
  130. int32_t m_TxDropCount; //模拟丢包功能丢失的报文数量
  131. };
  132. typedef struct TyphoonCfg
  133. {
  134. Typhoon_Logger Log; //Typhoon内部日志输出接口, 如果不设置则无日志输出
  135. Typhoon_LevelLogger pfnLevelLogger; //Typhoon内部日志输出接口, 如果不设置则无日志输出
  136. uint32_t UdpSocketSendBuffSize; //Typhoon实例的UDP socket发送缓存大小, 1个Typhoon实例绑定1个UDP socket, 由该实例所有连接共用;
  137. //默认值为1MB, 发送缓冲区大小建议不小于1MB
  138. uint32_t UdpSocketRecvBuffSize; //Typhoon实例的UDP socket接收缓存大小, 1个Typhoon实例绑定1个UDP socket, 由该实例所有连接共用;
  139. //默认值为1MB, 接收缓冲区大小建议不小于1MB
  140. uint16_t PackCountTriggerAck; //收到多少个数据报文触发一次ACK, 默认为250个
  141. uint8_t LoopInterval; //Typhoon内部调度间隔, 默认为10毫秒
  142. uint8_t AckInterval; //客户端最大ACK响应间隔时间, 默认为50毫秒
  143. uint8_t NoLockMode; //如果Typhoon应用与Typhoon协议栈运行在同一个线程中, 此处设置为1, 双方的数据传递可以不使用锁
  144. //默认为0, 即双方的数据传递会使用锁
  145. uint8_t HightSpeedMode; //是否为HightSpeedMode, 默认为0
  146. uint8_t CCMode; //拥塞控制模式. 0使用丢包率, 1使用RTT, 2使用丢包率+时延
  147. uint16_t ResistDropRate; //可抵抗的丢包率. 这里使用万分制比列表示, 默认为250, 即万分之250 --> 2.5%
  148. uint8_t IOThreadNum; //Typhoon Socket I/O线程数量, 默认为1, 最大可以设置为2
  149. uint8_t ResendCheckTime; //在进行报文重发时, 需要确认报文上次发送时间到重发时是否大于RTT+1个缓冲时间, 默认值为10毫秒
  150. uint8_t UdpGSO; //是否启用UDP GSO, UDP GSO在Linux内核4.18后才支持CentOS 8.0支持
  151. uint8_t BindCpu; //是否启用CPU绑定, 默认为0不启用
  152. uint32_t LogLevel; //日志输出级别, 只有大于指定级别才输出日志, 默认为DEBUG(60)
  153. Typhoon_Logger_Flush Flush;
  154. }stTyphoonCfg;
  155. typedef struct TyphoonConnCfg
  156. {
  157. uint32_t MaxQueueSize; //Max Size of Typhoon connection send and recv queue size
  158. uint32_t FixedSendSpeed; //连接的固定发送速度, 默认为0表示不设置, 由typhoon自动探测发送速度;
  159. //如该值设置后, typhoon内部发送速度探测算法不再生效, 连接每秒发送速度的按照用户设置值进行
  160. uint32_t MaxSendSpeed; //连接的最大发送速度, 默认为0表示不设置;
  161. //如该选项进行了设置, 发送实时速度依然由typhoon内部算法决定, 但是连接最大的速度不能超过本设置值
  162. uint32_t MinSendSpeed; //如该选项进行了设置, Typhoon的发送速度不低于该值
  163. uint16_t MaxChannelSize; //每条连接可以建立的channel数量
  164. uint16_t MaxSegmentSize; //Typhonn协议每个报文的最大值
  165. uint32_t SendBuffSize; //连接发送缓存大小, 这个配置仅影响初始发送缓冲值, typhoon算法会自动计算发送缓存大小最优值, 以保证发送效率
  166. uint32_t RecvBuffSize; //连接接收缓存大小
  167. uint8_t UseThreadForAppDataCb; //配置当前连接是否使用额外的线程执行用户数据通知回调, 默认为1, 即使用
  168. //取值范围[0, 1]
  169. uint8_t CompressMethod; //连接支持的压缩方法, 可以设置为支持1种或多种方法, 通过enTyphoonCompressMethod的值 | 得到结果
  170. uint8_t TransferMode; //连接传输模式, 分为文件传输模式0, 实时传输模式1, 默认为0
  171. uint8_t UseDataPush; //取值范围[0, 1]: 1 PushData, 0 PullData. 当数据达到时, PushData的方式是调用OnRead回调, 非PushData(PullData)的方式是调用OnDataArrived回调
  172. //两种方式没有本质区别, 区别在于OnRead回调让用户必须立刻马上处理这个数据, 而OnDataArrived只是通知用户数据达到了, 用户可以选择马上处理或者不马上处理
  173. uint8_t m_checkFlag; //0:不开启校验;1:开启 xxHash 校验
  174. }stTyphoonConnCfg;
  175. typedef struct TyphoonProxyLicense{
  176. uint8_t version;
  177. uint16_t clientNum; //允许接入的客户端数量,0表示无限制
  178. uint16_t clientLicenseLevel; //允许接入的客户端的带宽,单位Mbps,0表示无限制
  179. uint32_t flow; //流量,包括上行和下行流量,单位G,0表示无限制
  180. }sTyphoonProxyLicense;
  181. typedef int32_t (*Typhoon_AppInit_Callback)();
  182. typedef void (*Typhoon_AppUninit_Callback)();
  183. typedef void (*TyphoonConn_OnConnected)(HTyphoonConn pConn, enTyphoonErr erro, uint8_t *data, uint16_t data_len);
  184. typedef void (*TyphoonConn_OnDisconnected)(HTyphoonConn pConn, enTyphoonDisconnectCause cause);
  185. typedef void (*TyphoonConn_OnRead)(HTyphoonConn pConn, HTyphoonChannel pChan,uint8_t* pData,int32_t len);
  186. typedef void (*TyphoonConn_OnWritable)(HTyphoonConn pConn, HTyphoonChannel pChan);
  187. typedef void (*TyphoonConn_OnSentDataAcknowledged)(HTyphoonConn pConn, HTyphoonChannel pChan, int32_t ackLen);
  188. typedef void (*TyphoonConn_OnDataArriveNotify)(HTyphoonConn pConn, HTyphoonChannel pChan);
  189. typedef void (*TyphoonConn_OnChannelOpen)(HTyphoonConn pConn, HTyphoonChannel pChan);
  190. typedef void (*TyphoonConn_OnChannelClose)(HTyphoonConn pConn, HTyphoonChannel pChan, enChannelCloseType closeType);
  191. typedef void (*TyphoonConn_OnAuthChange)(HTyphoonConn pConn, sTyphoonProxyLicense *license);
  192. typedef void (*TyphoonConn_OnFecTunOpen)(HTyphoonConn pConn, HTyphoonFecTun pTun);
  193. typedef void (*TyphoonConn_OnFecTunClose)(HTyphoonConn pConn, HTyphoonFecTun pTun);
  194. typedef uint32_t (*TyphoonConn_OnTimer)(HTyphoonConn pConn);
  195. typedef void (*TyphoonConn_OnSDNRouteChange)(HTyphoonConn pConn, enTyphoonSDNPathType type);
  196. typedef struct __TyPhoonConnCallBack
  197. {
  198. TyphoonConn_OnConnected pfnOnConnected;
  199. TyphoonConn_OnDisconnected pfnOnDisconnected;
  200. TyphoonConn_OnRead pfnOnRead;
  201. TyphoonConn_OnWritable pfnWritable;
  202. TyphoonConn_OnSentDataAcknowledged pfnOnSentDataAcknowledged;
  203. TyphoonConn_OnDataArriveNotify pfnOnDataArriveNotify;
  204. TyphoonConn_OnChannelOpen pfnOnChannelOpen;
  205. TyphoonConn_OnChannelClose pfnOnChannelClose;
  206. TyphoonConn_OnAuthChange pfnOnAuthChange;
  207. TyphoonConn_OnTimer pfnOnTimer;
  208. TyphoonConn_OnSDNRouteChange pfnOnSDNRouteChange;
  209. }stTyPhoonConnCallBack;
  210. typedef struct __Socks5Config
  211. {
  212. char server[MAX_TYPHOON_HOST_LEN]; //代理服务器ip或域名
  213. uint16_t port; //代理服务器端口
  214. char username[MAX_TYPHOON_USERNAME_LEN]; //代理服务器用户名
  215. char password[MAX_TYPHOON_PASSWORD_LEN]; //代理服务器密码
  216. }stTyphoonSocks5Config;
  217. #ifdef __cplusplus
  218. }
  219. #endif
  220. #endif