123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645 |
- #ifndef __TYPHOON_SOCKS_H__
- #define __TYPHOON_SOCKS_H__
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "stdint.h"
- #ifdef _WIN32
- #ifdef TYPHOON_SOCKS_DLL_IMPLEMENT
- #define TYPHOON_SOCKS_EXTERN __declspec(dllexport)
- #else
- #ifdef _STATIC_LIB_
- #define TYPHOON_SOCKS_EXTERN
- #else
- #define TYPHOON_SOCKS_EXTERN __declspec(dllimport)
- #endif
- #endif
- #define TYPHOON_STDCALL __stdcall
- #else
- #define TYPHOON_SOCKS_EXTERN /* nothing */
- #define TYPHOON_STDCALL
- #endif
- typedef void * HTyphoonHandle;
- enum TyphoonMultiProxyServiceType
- {
- SOCKS5_SERVICE = 0,
- HTTP_SERVICE,
- };
- /*
- * 连接回调
- * status 为0:连接成功
- * status 非0:连接失败,失败后客户端会继续尝试重连
- */
- typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnConnected)(HTyphoonHandle pyHandle, int status);
- /*
- * 连接断开回调
- */
- typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnDisconnected)(HTyphoonHandle pyHandle);
- /*
- * 授权改变回调
- */
- typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnAuthChange)(HTyphoonHandle pyHandle);
- /*
- * sdn连接路径改变回调
- */
- typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnSDNRouteChange)(HTyphoonHandle pyHandle, int type);
- /*
- * 服务空闲回调回调
- */
- typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnServiceIdleTimeout)(HTyphoonHandle pyHandle, enum TyphoonMultiProxyServiceType serviceType);
- /*
- * TyphoonProxy local与Server连接状态通知回调
- * 应用如果关心连接状态信息, 需注册对应回调函数;
- */
- typedef struct TyphoonMultiProxyConnectionStatusCb
- {
- TyphoonMultiProxy_OnConnected pfnOnConnected;
- TyphoonMultiProxy_OnDisconnected pfnOnDisConnected;
- TyphoonMultiProxy_OnAuthChange pfnOnAuthChange;
- TyphoonMultiProxy_OnSDNRouteChange pfnOnSDNRouteChange;
- TyphoonMultiProxy_OnServiceIdleTimeout pfnOnServiceIdleTimeout;
- }stTyphoonMultiProxyConnectionStatusCb;
- typedef struct ConnectExParam_s{
- char *socks5Ip;
- int socks5Port;
- char *serverIp;
- int serverPort;
- unsigned int mss;
- int bCompress;
- unsigned int timeOut;
- uint8_t transferMode;
- }ConnectExParam_t;
- /*
- * 设置Typhoon 回调
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_SetConnectionStatusCb(stTyphoonMultiProxyConnectionStatusCb Cb);
- /*
- * 获取Typhoon 回调
- */
- TYPHOON_SOCKS_EXTERN stTyphoonMultiProxyConnectionStatusCb TyphoonMultiProxy_GetConnectionStatusCb();
- /*
- * 初始化Typhoon
- * 参数:
- * maxSpeed:最大速度,单位KB,只能在权限范围内设置,设为0,使用最大权限速度
- * minSpeed:最小速度,单位KB,设为0,默认128KB
- * pLogPath:日志路径
- * pLicensePath:license文件产生路径
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_InitClient(unsigned int maxSpeed, unsigned int minSpeed, const char *pLogPath, const char *pLicensePath, void *rootsData, int rootsDataLen);
- /*
- * 初始化Typhoon
- * 参数:
- * maxSpeed:最大速度,单位KB,只能在权限范围内设置,设为0,使用最大权限速度
- * minSpeed:最小速度,单位KB,设为0,默认128KB
- * pLogPath:日志路径
- * pLicensePath:license文件产生路径
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_InitClientEx(unsigned int maxSpeed, unsigned int minSpeed, const char *pLogPath, const char *pLicensePath, uint8_t transferMode);
- /*
- * 新建一条连接
- * 参数:
- * socks5Ip:socket5 监听ip
- * socks5Port:socket5 监听端口,设置为0由系统随机分配端口
- * serverIp:Typhoon server ip
- * serverPort:Typhoon server 端口
- * mss:最大报文长度,范围 600-1442
- * 该值的实际大小由 server与client协商决定,谁小用谁
- *
- * bCompress:是否开启压缩,1开启,0关闭;
- * 是否开启压缩实际效果由 server与client协商决定,只有都打开压缩才会有效
- *
- * timeOut:连接超时时间,单位 ms,设置为0不使用超时
- * 返回值:
- * 返回连接的句柄,该句柄需要由调用者自行维护,其他与连接相关的api都需要此句柄
- */
- TYPHOON_SOCKS_EXTERN HTyphoonHandle TyphoonMultiProxy_CreateNewConnect(const char *socks5Ip, int socks5Port,
- const char *serverIp, int serverPort, unsigned int mss, int bCompress, unsigned int timeOut);
- TYPHOON_SOCKS_EXTERN HTyphoonHandle TyphoonMultiProxy_CreateNewConnectEx(ConnectExParam_t *connP);
- TYPHOON_SOCKS_EXTERN HTyphoonHandle TyphoonMultiProxy_CreateNewTyphoonConn(const char *serverIp, int serverPort,
- unsigned int mss, int bCompress, unsigned int timeOut, uint8_t transferMode);
- TYPHOON_SOCKS_EXTERN HTyphoonHandle TyphoonMultiProxy_CreateNewTyphoonConnVia(const char *serverIp, int serverPort,
- unsigned int mss, int bCompress, unsigned int timeOut, uint8_t transferMode, uint64_t via);
- /*
- * 关闭连接
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CloseConnect(HTyphoonHandle pyHandle);
- /*
- * 重置连接
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 0成功,非0失败
- * 说明:
- * 该方法主要用来在mss或者压缩状态改变时候使用
- * 设置后所有的 socket5连接都会断开
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_RestartConnect(HTyphoonHandle pyHandle);
- /*
- * 使能压缩
- * 参数:
- * pyHandle:连接句柄
- * 说明:
- * 该方法设置后需要重置连接才会生效
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_EnableCompress(HTyphoonHandle pyHandle);
- /*
- * 关闭压缩
- * 参数:
- * pyHandle:连接句柄
- * 说明:
- * 该方法设置后需要重置连接才会生效
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_DisableCompress(HTyphoonHandle pyHandle);
- /*
- * 获取连接的压缩状态
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 1开启压缩,0未开启
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_IsCompressEnabled(HTyphoonHandle pyHandle);
- /*
- * 获取连接状态
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 1已连接,0未连接
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetConnectionStatus(HTyphoonHandle pyHandle);
- /*
- * 获取Socks5端口
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为监听的端口
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetSocks5Port(HTyphoonHandle pyHandle);
- /*
- * 获取Http端口
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为监听的端口
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetHttpPort(HTyphoonHandle pyHandle);
- /*
- * 设置连接接收速度
- * 参数:
- * pyHandle:连接句柄
- * RecvSpeed:接收速度,单位KB,设为0使用最大权限带宽
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetConnRecvSpeed(HTyphoonHandle pyHandle, unsigned int RecvSpeed);
- /*
- * 设置最大发送速度
- * 参数:
- * pyHandle:连接句柄
- * Speed:发送速度,单位KB,设为0使用最大权限带宽
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMaxSendSpeed(HTyphoonHandle pyHandle, unsigned int Speed);
- /*
- * 设置最小发送速度
- * 参数:
- * pyHandle:连接句柄
- * Speed:发送速度,单位KB,设为0默认128KB
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMinSendSpeed(HTyphoonHandle pyHandle, unsigned int Speed);
- /*
- * 设置连接的超时时间
- * 参数:
- * pyHandle:连接句柄
- * timeout:超时时间,单位 ms
- * 返回值:
- * 小于0失败,大于等于0为设置的超时时间
- */
- TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetTcpIdleTimout(HTyphoonHandle pyHandle, unsigned int timeout);
- /*
- * 设置服务的超时时间
- * 参数:
- * pyHandle:连接句柄
- * serviceType:服务类型
- * timeout:超时时间,单位 ms,必须大于等于 10*1000
- * 返回值:
- * 小于0失败,等于0成功
- */
- TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetServiceIdleTimout(HTyphoonHandle pyHandle, enum TyphoonMultiProxyServiceType serviceType, unsigned int timeout);
- /*
- * 获取连接的 rtt
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于0失败,大于等于0为rtt
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetConnectionRTT(HTyphoonHandle pyHandle);
- /*
- * 获取连接的丢包率
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于0失败,大于等于0为丢包率
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetConnectionDropRate(HTyphoonHandle pyHandle);
- /*
- * 获取Typhoon client版本
- * 参数:
- * verbuff:版本缓存,需要大于256字节
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetClientVersion(char *verbuff);
- /*
- * 获取最大权限带宽
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于0失败,大于0权限带宽,单位Mbps
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetMaxAuthSendSpeed(HTyphoonHandle pyHandle);
- /*
- * 设置 mss
- * 参数:
- * pyHandle:连接句柄
- * mss:范围600-1442
- * 返回值:
- * 0成功,非0失败
- * 说明:
- * 该方法设置后需要重置连接才会生效
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMss(HTyphoonHandle pyHandle, unsigned int mss);
- /*
- * 获取 mss
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为mss
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetMss(HTyphoonHandle pyHandle);
- /*
- * 设置用户的私有数据,用来保存用户数据指针
- * 参数:
- * 无
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetUserData(uint64_t Data);
- /*
- * 获取用户的私有数据
- * 参数:
- * 无
- * 返回值:
- * 返回用户指针
- */
- TYPHOON_SOCKS_EXTERN uint64_t TyphoonMultiProxy_GetUserData();
- /*
- * 获取连接的出口ip地址
- * 参数:
- * pyHandle:连接句柄
- * addr:保存地址结构体指针
- * 返回值:
- * 无
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_GetWanAddr(HTyphoonHandle pyHandle, struct sockaddr *addr);
- /*
- * 获取对端ip地址
- * 参数:
- * pyHandle:连接句柄
- * addr:保存地址结构体指针
- * 返回值:
- * 无
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_GetRemoteAddr(HTyphoonHandle pyHandle, struct sockaddr *addr);
- /*
- * 获取对端 rtt
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为rtt
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetQueryPeerRTT(HTyphoonHandle pyHandle);
- /*
- * 获取对端丢包率
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为丢包率,单位万分之一
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetQueryPeerDropRate(HTyphoonHandle pyHandle);
- /*
- * 获取最大发送速度
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为最大发送速度,单位B
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetMaxSendSpeed(HTyphoonHandle pyHandle);
- /*
- * 获取最小发送速度
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为最小发送速度,单位B
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetMinSendSpeed(HTyphoonHandle pyHandle);
- /*
- * 获取对端 mss
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为 mss
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetQueryMss(HTyphoonHandle pyHandle);
- /*
- * 获取当前发送的实时速度
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 小于等于0失败,大于0为实时发送速度
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_GetCurSendSpeed(HTyphoonHandle pyHandle);
- /*
- * 设置HSM模式
- * 参数:
- * mode:1开始HSM,0关闭HSM
- * 返回值:
- * 0成功,非0失败
- * 说明:
- * 该方法需要在TyphoonMultiProxy_InitClient之后,CreateNewConnect之前设置
- */
- TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetHighSpeedMode(unsigned int mode);
- /*
- * 设置连接的私有数据,用来保存用户数据指针
- * 参数:
- * pyHandle:连接句柄
- * Data:数据指针
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetConnectUserData(HTyphoonHandle pyHandle, uint64_t Data);
- /*
- * 获取连接的私有数据
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 返回用户指针
- */
- TYPHOON_SOCKS_EXTERN uint64_t TyphoonMultiProxy_GetConnectUserData(HTyphoonHandle pyHandle);
- /*
- * 设置socks5 代理的配置
- * 参数:
- * server:socks5域名或ip
- * port:端口
- * username:用户名
- * password:密码
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetSocks5ProxyConfig(char *server, uint16_t port, char *username, char *password);
- /*
- * 使能GSO
- * 参数:无
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_EnableGSO();
- /*
- * 关闭GSO
- * 参数:无
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_DisableGSO();
- /*
- * 创建 http 服务
- * 参数:
- * pyHandle:连接句柄
- * httpIp:ip地址
- * httpPort: 端口
- * timeOut:超时时间
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateHttpService(HTyphoonHandle pyHandle, const char *httpIp, int httpPort, uint32_t timeOut, uint16_t ifUseFirewall, uint16_t fecPercent);
- /*
- * 创建端口前转服务
- * 参数:
- * pyHandle:连接句柄
- * localIp:本地地址
- * localPort: 本地端口
- * remoteIp:远端地址
- * remotePort: 远端端口
- * timeOut:超时时间
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateLocalPortForwardService(HTyphoonHandle pyHandle, const char *localIp, int localPort, const char *remoteIp, int remotePort, uint32_t timeOut);
- /*
- * 设置传输模式
- * 参数:
- * pyHandle:连接句柄
- * TransferMode:设置连接的传输模式,0代表文件传输模式, 1代表实时传输模式
- * 返回值:
- * 设置的模式数值
- * 说明:
- * 该方法设置后需要重置连接才会生效
- */
- TYPHOON_SOCKS_EXTERN uint8_t TyphoonMultiProxy_SetTransferMode(HTyphoonHandle pyHandle, uint8_t TransferMode);
- /*
- * 创建远端socks5 代理
- * 参数:
- * pyHandle:连接句柄
- * pServerIp:远端监听的ip地址
- * serverPort:远端监听的端口
- * 返回值:
- * 小于等于0失败
- * 大于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateRemoteSocketService(HTyphoonHandle pyHandle, const char *pServerIp, uint16_t serverPort);
- /*
- * 创建远端http 代理
- * 参数:
- * pyHandle:连接句柄
- * pServerIp:远端监听的ip地址
- * serverPort:远端监听的端口
- * 返回值:
- * 小于等于0失败
- * 大于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateRemoteHttpService(HTyphoonHandle pyHandle, const char *pServerIp, uint16_t serverPort);
- /*
- * 创建远端端口前转
- * 参数:
- * pyHandle:连接句柄
- * pLocalIp:本地连接的ip地址
- * localPort:本地连接的端口
- * pServerIp:远端监听的ip地址
- * serverPort:远端监听的端口
- * 返回值:
- * 小于等于0失败
- * 大于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateRemotePortForwardService(HTyphoonHandle pyHandle,
- const char *pLocalIp, uint16_t localPort, const char *pServerIp, uint16_t serverPort);
- /*
- * 获取SDN ID
- * 参数:
- * 无
- * 返回值:
- * nodeId
- */
- TYPHOON_SOCKS_EXTERN uint64_t TyphoonMultiProxy_GetSdnNodeId();
- /*
- * sdnId 转换为 ip 和 端口
- * 参数:
- * ztsid:sdnId
- * ipv4:转换的ip地址
- * port:端口
- * 返回值:
- * 无
- */
- TYPHOON_SOCKS_EXTERN void TyphoonMultiProxy_SDNId2IpPort(char * ztsid, char *ipv4, short *port);
- /*
- * 设置 http 服务的 fec 百分比
- * 参数:
- * pyHandle:连接句柄
- * fecPercent:fec百分比,单位万分之一
- * 返回值:
- * 不等于0失败
- * 等于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetHttpServiceFecPercent(HTyphoonHandle pyHandle, uint16_t fecPercent);
- /*
- * 设置http服务允许的地址
- * 参数:
- * pyHandle:连接句柄
- * ip:允许的ip地址
- * port:允许的端口
- * 返回值:
- * 非0失败
- * 等于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_AddHttpFirewallAllowAddress(HTyphoonHandle pyHandle, char* ip, int port);
- /*
- * 删除http服务允许的地址
- * 参数:
- * pyHandle:连接句柄
- * ip:允许的ip地址
- * port:允许的端口
- * 返回值:
- * 非0失败
- * 等于0成功
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_DelHttpFirewallAllowAddress(HTyphoonHandle pyHandle, char* ip, int port);
- /*
- * 设置多线程发送
- * 参数:
- * enable:1使能,0关闭
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetMultiSender(unsigned int enable);
- /*
- * 退出Typhoon
- * 参数:
- * 无
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_ExitClient();
- /*
- * 关闭 Http 服务
- * 参数:
- * pyHandle:连接句柄
- * 返回值:
- * 0成功,非0失败
- */
- TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CloseHttpService(HTyphoonHandle pyHandle);
- #ifdef __cplusplus
- }
- #endif
- #endif
|