TyphoonDefine.h 13 KB

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