Bläddra i källkod

1.瑞云更新库

huangxiaodong 1 år sedan
förälder
incheckning
5b3a5f9683

+ 27 - 9
创维盒子/RayProxy/Classes/RaylinkProxy.mm

@@ -9,6 +9,8 @@
 #import "TyphoonMultiSocks.h"
 #import "TyphoonServer.h"
 #include "net_detection.h"
+#include "string.h"
+
 
 @interface RayLinkConnectionInfo : NSObject
 
@@ -27,7 +29,7 @@
 
 @implementation RaylinkProxy {
     NSMutableDictionary<NSString*, RayLinkConnectionInfo *> *_connectInfos;
-    NSData *_last_root_info;
+    std::string _last_root_info;
 }
 
 + (instancetype)sharedManager {
@@ -58,14 +60,13 @@
     param.rootsDataLen = rootSdnInfo.length;
     param.FecPercent = 1000;
     param.bCompress = true;
-    _last_root_info = rootSdnInfo;
     stTyphoonServerProxyConnectionStatusCb cb1 = {OnTcpConnected, OnTcpDisConnected};
     TyphoonServerProxy_SetConnectionStatusCb(cb1);
     if (TyphoonProxy_InitServer(&param) == 0)
     {
         // 初始化成功后记录信息,下次使用相同信息初始化时(如websocket断线重连)不再重新初始化
         NSLog(@"TyphoonProxy_InitServer ok");
-
+        _last_root_info = std::string((char *)rootSdnInfo.bytes, rootSdnInfo.length);
     }
 }
 
@@ -76,7 +77,7 @@
     dispatch_once(&onceToken, ^{
         
         _connectInfos = @{}.mutableCopy;
-        [self initServer:logPath rootSdnInfo:rootSdnInfo];
+        [self initServer:logPath rootSdnInfo:rootSdnInfo];;
         
         NSLog(@"TyphoonMultiProxy_InitClient rootSdnInfoSize %ld", rootSdnInfo.length);
 
@@ -95,9 +96,13 @@
     
     TyphoonMultiProxy_SetUserData((uint64_t)(__bridge void *)(self));
     
-    if (TyphoonProxy_RestartSdnRoot((void *)rootSdnInfo.bytes, rootSdnInfo.length) == 0)
-    {
-        _last_root_info = rootSdnInfo;
+    if (!_last_root_info.empty()) {
+        if (_last_root_info.compare(std::string((char *)rootSdnInfo.bytes, rootSdnInfo.length)) != 0) {
+            if (TyphoonProxy_RestartSdnRoot((void *)rootSdnInfo.bytes, rootSdnInfo.length) == 0)
+            {
+                _last_root_info = std::string((char *)rootSdnInfo.bytes, rootSdnInfo.length);
+            }
+        }
     }
     
 }
@@ -112,7 +117,7 @@
     char ipBuff[64];
     short sdnPort = 0;
     TyphoonMultiProxy_SDNId2IpPort((char *)[sdnId cStringUsingEncoding:NSUTF8StringEncoding], ipBuff, &sdnPort);
-    HTyphoonHandle pHandle = TyphoonMultiProxy_CreateNewTyphoonConn(ipBuff, sdnPort, 1200, 0, 0, 1/*fec*/);
+    HTyphoonHandle pHandle = TyphoonMultiProxy_CreateNewTyphoonConn(ipBuff, sdnPort, 1200, 0, 0, 1/*fec*/, true);
     
     if (!pHandle) {
         return NO;
@@ -200,7 +205,20 @@ void OnProxyConnected_cb(HTyphoonHandle pyHandle, int status) {
 - (NSUInteger)createHttpService:(NSString *)sdnId {
     RayLinkConnectionInfo *info = _connectInfos[sdnId];
     if (info) {
-        int port = TyphoonMultiProxy_CreateHttpService(info.pHandle.pointerValue, "127.0.0.1", 0, 0, 1, 1);
+        
+        if (TyphoonMultiProxy_CheckHttpPartUsable((HTyphoonHandle)info.pHandle.pointerValue) == 1) {
+            return TyphoonMultiProxy_GetHttpPort((HTyphoonHandle)info.pHandle.pointerValue);
+        }
+        
+        int port = TyphoonMultiProxy_GetHttpPort((HTyphoonHandle)info.pHandle.pointerValue);
+        
+        if (port > 0) {
+            TyphoonMultiProxy_CloseHttpService((HTyphoonHandle)info.pHandle.pointerValue);
+        } else {
+            port = 0;
+        }
+        
+        port = TyphoonMultiProxy_CreateHttpService(info.pHandle.pointerValue, "127.0.0.1", 0, 0, 1, 1);
         TyphoonMultiProxy_SetHttpServiceFecPercent(info.pHandle.pointerValue, 1000);
         TyphoonMultiProxy_SetConnRecvSpeed(info.pHandle.pointerValue, 20*1024/8);
         TyphoonMultiProxy_SetMaxSendSpeed(info.pHandle.pointerValue, 20*1024/8);

+ 275 - 270
创维盒子/RayProxy/include/TyphoonDefine.h

@@ -1,270 +1,275 @@
-#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 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_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;					//数据的部分报文由于丢失重传, 比未丢失报文的数据达到时间要晚的数量
-
-    
-    /* 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)
-	
-}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只是通知用户数据达到了, 用户可以选择马上处理或者不马上处理
-}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
-
+#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
+

+ 43 - 6
创维盒子/RayProxy/include/TyphoonMultiSocks.h

@@ -1,4 +1,4 @@
-#ifndef __TYPHOON_SOCKS_H__
+#ifndef __TYPHOON_SOCKS_H__
 #define __TYPHOON_SOCKS_H__
 
 #ifdef __cplusplus
@@ -56,7 +56,7 @@ typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnSDNRouteChange)(HTyphoonHandl
 /*
  * 服务空闲回调回调
  */
-typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnServiceIdleTimeout)(HTyphoonHandle pyHandle, enum TyphoonMultiProxyServiceType serviceType);
+typedef void (TYPHOON_STDCALL *TyphoonMultiProxy_OnServiceIdleTimeout)(HTyphoonHandle pyHandle, TyphoonMultiProxyServiceType serviceType);
 
 /*
  * TyphoonProxy local与Server连接状态通知回调
@@ -80,6 +80,7 @@ typedef struct ConnectExParam_s{
 	int bCompress;
 	unsigned int timeOut;
 	uint8_t transferMode;
+	bool bUseSdn;
 }ConnectExParam_t;
 
 /*
@@ -102,7 +103,7 @@ TYPHOON_SOCKS_EXTERN stTyphoonMultiProxyConnectionStatusCb TyphoonMultiProxy_Get
  * 返回值:
  * 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_SOCKS_EXTERN int TyphoonMultiProxy_InitClient(unsigned int maxSpeed, unsigned int minSpeed, const char *pLogPath, const char *pLicensePath, void *rootsData = nullptr, int rootsDataLen = 0);
 
 /*
  * 初始化Typhoon
@@ -139,7 +140,7 @@ TYPHOON_SOCKS_EXTERN HTyphoonHandle TyphoonMultiProxy_CreateNewConnect(const cha
 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);
+		unsigned int mss, int bCompress, unsigned int timeOut, uint8_t transferMode = 0, uint8_t useSdn = 0);
 
 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);
@@ -250,6 +251,16 @@ TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMaxSendSpeed(HTyphoonHandle pyHand
 TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMinSendSpeed(HTyphoonHandle pyHandle, unsigned int Speed);
 
 /*
+ * 设置最小接收速度
+ * 参数:
+ * pyHandle:连接句柄
+ * Speed:接收速度,单位KB,设为0默认128KB
+ * 返回值:
+ * 0成功,非0失败
+ */
+TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_SetMinRecvSpeed(HTyphoonHandle pyHandle, unsigned int Speed);
+
+/*
  * 设置连接的超时时间
  * 参数:
  * pyHandle:连接句柄
@@ -268,7 +279,7 @@ TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetTcpIdleTimout(HTyphoonHan
  * 返回值:
  * 小于0失败,等于0成功
  */
-TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetServiceIdleTimout(HTyphoonHandle pyHandle, enum TyphoonMultiProxyServiceType serviceType, unsigned int timeout);
+TYPHOON_SOCKS_EXTERN unsigned int TyphoonMultiProxy_SetServiceIdleTimout(HTyphoonHandle pyHandle, TyphoonMultiProxyServiceType serviceType, unsigned int timeout);
 
 /*
  * 获取连接的 rtt
@@ -487,7 +498,7 @@ TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_DisableGSO();
  * 返回值:
  * 0成功,非0失败
  */
-TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateHttpService(HTyphoonHandle pyHandle, const char *httpIp, int httpPort, uint32_t timeOut, uint16_t ifUseFirewall, uint16_t fecPercent);
+TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CreateHttpService(HTyphoonHandle pyHandle, const char *httpIp, int httpPort, uint32_t timeOut, uint16_t ifUseFirewall = 0, uint16_t fecPercent = 0);
 
 /*
  * 创建端口前转服务
@@ -636,6 +647,32 @@ TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_ExitClient();
  */
 TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CloseHttpService(HTyphoonHandle pyHandle);
 
+/*
+ * 关闭 Http 服务
+ * 参数:
+ * pyHandle:连接句柄
+ * 返回值:
+ * 0成功,非0失败
+ */
+TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CloseHttpService(HTyphoonHandle pyHandle);
+
+/*
+ * 检测是否是 p2p 连接
+ * 参数:
+ * pyHandle:连接句柄
+ * 返回值:
+ * 0 p2p 连接,1 普通连接,-1 连接句柄无效
+ */
+TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CheckIsP2p(HTyphoonHandle pyHandle);
+
+/*
+ * 检测Http端口是否可用,只在移动端可用
+ * 参数:
+ * pyHandle:连接句柄
+ * 返回值:
+ * 0 不可用,1 可用, -1 句柄无效
+ */
+TYPHOON_SOCKS_EXTERN int TyphoonMultiProxy_CheckHttpPartUsable(HTyphoonHandle pyHandle);
 
 #ifdef __cplusplus
 }

+ 52 - 1
创维盒子/RayProxy/include/TyphoonServer.h

@@ -13,8 +13,12 @@ extern "C"
 #ifdef TYPHOON_SOCKS_DLL_IMPLEMENT
 #define TYPHOON_SERVER_EXTERN __declspec(dllexport)
 #else 
+#ifdef _STATIC_LIB_
+#define TYPHOON_SERVER_EXTERN 
+#else
 #define TYPHOON_SERVER_EXTERN __declspec(dllimport) 
 #endif
+#endif
 #define TYPHOON_STDCALL __stdcall
 #else
 #define TYPHOON_SERVER_EXTERN /* nothing */
@@ -59,7 +63,7 @@ struct InitServerPrama{
  * 返回值:
  * 0成功,非0失败
  */
-TYPHOON_SERVER_EXTERN int TyphoonProxy_InitServer(struct InitServerPrama *param);
+TYPHOON_SERVER_EXTERN int TyphoonProxy_InitServer(InitServerPrama *param);
 
 /*
  * 去初始化代理服务器
@@ -89,6 +93,53 @@ TYPHOON_SERVER_EXTERN void TyphoonServerProxy_SetConnectionStatusCb(stTyphoonSer
 
 TYPHOON_SERVER_EXTERN stTyphoonServerProxyConnectionStatusCb TyphoonServerProxy_GetConnectionStatusCb();
 
+/*
+ * 设置 sdn tcp 转发端口
+ * 参数:
+ * port:端口号
+ * 返回值:
+ * 无
+ */
+TYPHOON_SERVER_EXTERN void TyphoonProxy_SetSDNLocalTcpProxyPort(uint16_t port);
+
+/*
+ * 设置 stun 服务器地址,必须在服务器初始化之前设置才能生效
+ * 参数:
+ * stun_server:stun 服务器地址
+ * stun_port:stun 端口号
+ * 返回值:
+ * 无
+ */
+TYPHOON_SERVER_EXTERN void TyphoonProxy_SetStunServer(const char*stun_server, uint16_t stun_port);
+
+/*
+ * 设置 tcp 转发服务器地址,必须在服务器初始化之前设置才能生效
+ * 参数:
+ * tcp_relay_server:tcp 转发服务器地址
+ * tcp_relay_port:tcp 转发服务器端口号
+ * 返回值:
+ * 无
+ */
+TYPHOON_SERVER_EXTERN void TyphoonProxy_SetTcpRelayServer(const char*tcp_relay_server, uint16_t tcp_relay_port);
+
+/*
+ * 设置 p2p 使用多服务器ip同时发送
+ * 参数:
+ * isMultiSend:1 开启,0 关闭
+ * 返回值:
+ * 无
+ */
+TYPHOON_SERVER_EXTERN void TyphoonProxy_SetMultiSendToServer(int isMultiSend);
+
+/*
+ * 获取SDN Root 服务器地址
+ * 参数:
+ * buf: 地址buff
+ * 返回值:
+ * 0成功,非0失败
+ */
+TYPHOON_SERVER_EXTERN int TyphoonProxy_GetSDNRelayRootAddress(char *buf);
+
 #ifdef __cplusplus
 }
 #endif

BIN
创维盒子/RayProxy/libAuthentication.a


BIN
创维盒子/RayProxy/libEncryptAuth.a


BIN
创维盒子/RayProxy/libRaySync-Multi-Proxy-Client-Plus.a


BIN
创维盒子/RayProxy/libRaySync-Proxy-Common-Lib.a


BIN
创维盒子/RayProxy/libRaySync-Proxy-Server-Lib.a


BIN
创维盒子/RayProxy/libRaySync.a


BIN
创维盒子/RayProxy/libRvCommon.a


BIN
创维盒子/RayProxy/libcommon.a


BIN
创维盒子/RayProxy/libzerotier-one.a


BIN
创维盒子/RayProxy/libzipCompress.a


+ 1 - 1
创维盒子/双子星云手机/CloudPlayer/PlayerViewController.mm

@@ -2295,7 +2295,7 @@ NSDate *lastVideoTome;/*上一帧数据时间*/
         return;
     }
     
-    [[connectDeviceManager shareInstance] tryReconnectFun];
+    //[[connectDeviceManager shareInstance] tryReconnectFun];
     [self showNewIndicator];
     reConnectAccount = 0;
     [self tryAgain];

+ 15 - 18
创维盒子/双子星云手机/connectDeviceManager/connectDeviceManager.m

@@ -393,21 +393,21 @@ static connectDeviceManager *connectDeviceManagerInstance = nil;
         [NSFileManager.defaultManager createDirectoryAtURL:logUrl withIntermediateDirectories:YES attributes:NULL error:NULL];
     }
     
-    dispatch_queue_t reinitProxyQueue = dispatch_queue_create("reinit_proxy", 0);
-    
-    
-    [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 0"];
-    dispatch_async(reinitProxyQueue, ^{
-        NSData *sdnInfo = [NSData dataWithContentsOfURL:[[NSBundle.mainBundle bundleURL] URLByAppendingPathComponent:@"planet.1ali_3ry_peer"]];
-        
-        /// 1. 初始化代理库
-        [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 1"];
-        self->disconnected_cb_type = NO;
-        self->_isReInitType = YES;
-        [RaylinkProxy.sharedManager initProxy:logUrl.path rootSdnInfo:sdnInfo];
-        self->_isReInitType = NO;
-        [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 2"];
-    });
+//    dispatch_queue_t reinitProxyQueue = dispatch_queue_create("reinit_proxy", 0);
+//
+//
+//    [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 0"];
+//    dispatch_async(reinitProxyQueue, ^{
+//        NSData *sdnInfo = [NSData dataWithContentsOfURL:[[NSBundle.mainBundle bundleURL] URLByAppendingPathComponent:@"planet.1ali_3ry_peer"]];
+//
+//        /// 1. 初始化代理库
+//        [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 1"];
+//        self->disconnected_cb_type = NO;
+//        self->_isReInitType = YES;
+//        [RaylinkProxy.sharedManager initProxy:logUrl.path rootSdnInfo:sdnInfo];
+//        self->_isReInitType = NO;
+//        [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 2"];
+//    });
     
 //    //KWeakSelf
 //    NSMutableDictionary *paraDict = [NSMutableDictionary new];
@@ -437,9 +437,6 @@ static connectDeviceManager *connectDeviceManagerInstance = nil;
 - (void)recreateHttpServiceFun{
     [cachesFileManager writeLogsWithMsg:@"recreateHttpServiceFun"];
     NSString *sdnId = self.DeviceThirdIdMod.data.sdnId;
-    [RaylinkProxy.sharedManager closeHttpService:sdnId];
-    
-
     self.tcpPort = [RaylinkProxy.sharedManager createHttpService:sdnId];
     self.tcpPortStr = [[NSString alloc] initWithFormat:@"%ld",self.tcpPort];
     [RaylinkProxy.sharedManager addSdnId:sdnId allowPort:9300];