Skip to content

Commit 5bdaf98

Browse files
committed
support network of ssl for upload and download and center
1 parent 123ec5f commit 5bdaf98

File tree

3 files changed

+156
-13
lines changed

3 files changed

+156
-13
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Hdr.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ extern XNETHANDLE xhDLPool;
8888
extern XNETHANDLE xhCTPool;
8989
extern XNETHANDLE xhP2XPPool;
9090

91+
extern XHANDLE xhDLSsl;
92+
extern XHANDLE xhUPSsl;
93+
extern XHANDLE xhCHSsl;
9194
extern XHANDLE xhLimit;
9295
extern XHANDLE xhUPHttp;
9396
extern XHANDLE xhDLHttp;

XEngine_Source/XEngine_StorageApp/StorageApp_Network.cpp

Lines changed: 108 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,36 @@
22

33
BOOL CALLBACK XEngine_Callback_DownloadLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam)
44
{
5+
if (st_ServiceCfg.st_XCert.bDLEnable)
6+
{
7+
OPenSsl_Server_AcceptEx(xhDLSsl, hSocket, lpszClientAddr);
8+
}
59
RfcComponents_HttpServer_CreateClientEx(xhDLHttp, lpszClientAddr, 0);
610
SocketOpt_HeartBeat_InsertAddrEx(xhHBDownload, lpszClientAddr);
711
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("下载客户端:%s,进入了服务器"), lpszClientAddr);
812
return TRUE;
913
}
1014
void CALLBACK XEngine_Callback_DownloadRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam)
1115
{
12-
if (!RfcComponents_HttpServer_InserQueueEx(xhDLHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
16+
if (st_ServiceCfg.st_XCert.bDLEnable)
1317
{
14-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
15-
return;
18+
int nSLen = 0;
19+
TCHAR* ptszMsgBuffer = NULL;
20+
OPenSsl_Server_RecvMemoryEx(xhDLSsl, lpszClientAddr, &ptszMsgBuffer, &nSLen, lpszRecvMsg, nMsgLen);
21+
if (!RfcComponents_HttpServer_InserQueueEx(xhDLHttp, lpszClientAddr, ptszMsgBuffer, nSLen))
22+
{
23+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
24+
return;
25+
}
26+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
27+
}
28+
else
29+
{
30+
if (!RfcComponents_HttpServer_InserQueueEx(xhDLHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
31+
{
32+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("下载客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
33+
return;
34+
}
1635
}
1736
SocketOpt_HeartBeat_ActiveAddrEx(xhHBDownload, lpszClientAddr);
1837
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("下载客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen);
@@ -24,6 +43,10 @@ void CALLBACK XEngine_Callback_DownloadLeave(LPCTSTR lpszClientAddr, SOCKET hSoc
2443
//////////////////////////////////////////////////////////////////////////
2544
BOOL CALLBACK XEngine_Callback_UPLoaderLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam)
2645
{
46+
if (st_ServiceCfg.st_XCert.bUPEnable)
47+
{
48+
OPenSsl_Server_AcceptEx(xhUPSsl, hSocket, lpszClientAddr);
49+
}
2750
RfcComponents_HttpServer_CreateClientEx(xhUPHttp, lpszClientAddr, 0);
2851
RfcComponents_HttpServer_SetRecvModeEx(xhUPHttp, lpszClientAddr, 1); //设置为文件接受模式
2952
SocketOpt_HeartBeat_InsertAddrEx(xhHBUPLoader, lpszClientAddr);
@@ -32,10 +55,25 @@ BOOL CALLBACK XEngine_Callback_UPLoaderLogin(LPCTSTR lpszClientAddr, SOCKET hSoc
3255
}
3356
void CALLBACK XEngine_Callback_UPLoaderRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam)
3457
{
35-
if (!RfcComponents_HttpServer_InserQueueEx(xhUPHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
58+
if (st_ServiceCfg.st_XCert.bUPEnable)
3659
{
37-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("上传客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
38-
return;
60+
int nSLen = 0;
61+
TCHAR* ptszMsgBuffer = NULL;
62+
OPenSsl_Server_RecvMemoryEx(xhUPSsl, lpszClientAddr, &ptszMsgBuffer, &nSLen, lpszRecvMsg, nMsgLen);
63+
if (!RfcComponents_HttpServer_InserQueueEx(xhUPHttp, lpszClientAddr, ptszMsgBuffer, nSLen))
64+
{
65+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("上传客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
66+
return;
67+
}
68+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
69+
}
70+
else
71+
{
72+
if (!RfcComponents_HttpServer_InserQueueEx(xhUPHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
73+
{
74+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("上传客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
75+
return;
76+
}
3977
}
4078
SocketOpt_HeartBeat_ActiveAddrEx(xhHBUPLoader, lpszClientAddr);
4179

@@ -53,17 +91,36 @@ void CALLBACK XEngine_Callback_UPLoaderLeave(LPCTSTR lpszClientAddr, SOCKET hSoc
5391
//////////////////////////////////////////////////////////////////////////
5492
BOOL CALLBACK XEngine_Callback_CenterLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam)
5593
{
94+
if (st_ServiceCfg.st_XCert.bCHEnable)
95+
{
96+
OPenSsl_Server_AcceptEx(xhCHSsl, hSocket, lpszClientAddr);
97+
}
5698
RfcComponents_HttpServer_CreateClientEx(xhCenterHttp, lpszClientAddr, 0);
5799
SocketOpt_HeartBeat_InsertAddrEx(xhHBCenter, lpszClientAddr);
58100
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("业务客户端:%s,进入了服务器"), lpszClientAddr);
59101
return TRUE;
60102
}
61103
void CALLBACK XEngine_Callback_CenterRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam)
62104
{
63-
if (!RfcComponents_HttpServer_InserQueueEx(xhCenterHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
105+
if (st_ServiceCfg.st_XCert.bCHEnable)
64106
{
65-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
66-
return;
107+
int nSLen = 0;
108+
TCHAR* ptszMsgBuffer = NULL;
109+
OPenSsl_Server_RecvMemoryEx(xhCHSsl, lpszClientAddr, &ptszMsgBuffer, &nSLen, lpszRecvMsg, nMsgLen);
110+
if (!RfcComponents_HttpServer_InserQueueEx(xhCenterHttp, lpszClientAddr, ptszMsgBuffer, nSLen))
111+
{
112+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
113+
return;
114+
}
115+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
116+
}
117+
else
118+
{
119+
if (!RfcComponents_HttpServer_InserQueueEx(xhCenterHttp, lpszClientAddr, lpszRecvMsg, nMsgLen))
120+
{
121+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("业务客户端:%s,投递数据失败,大小:%d,错误;%lX"), lpszClientAddr, nMsgLen, HttpServer_GetLastError());
122+
return;
123+
}
67124
}
68125
SocketOpt_HeartBeat_ActiveAddrEx(xhHBCenter, lpszClientAddr);
69126
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("业务客户端:%s,投递包成功,大小:%d"), lpszClientAddr, nMsgLen);
@@ -170,6 +227,9 @@ BOOL XEngine_Net_CloseClient(LPCTSTR lpszClientAddr, int nLeaveType, int nClient
170227
RfcComponents_HttpServer_CloseClinetEx(xhUPHttp, lpszClientAddr);
171228
RfcComponents_HttpServer_CloseClinetEx(xhDLHttp, lpszClientAddr);
172229
RfcComponents_HttpServer_CloseClinetEx(xhCenterHttp, lpszClientAddr);
230+
OPenSsl_Server_CloseClientEx(xhDLSsl, lpszClientAddr);
231+
OPenSsl_Server_CloseClientEx(xhUPSsl, lpszClientAddr);
232+
OPenSsl_Server_CloseClientEx(xhCHSsl, lpszClientAddr);
173233
HelpComponents_Datas_DeleteEx(xhP2XPPacket, lpszClientAddr);
174234
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("%s:%s,与服务器断开,原因:%s"), m_StrClient.c_str(), lpszClientAddr, lpszLeaveMsg);
175235
return TRUE;
@@ -181,23 +241,59 @@ BOOL XEngine_Net_SendMsg(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsg
181241

182242
if (STORAGE_NETTYPE_HTTPDOWNLOAD == nType)
183243
{
184-
bRet = NetCore_TCPXCore_SendEx(xhNetDownload, lpszClientAddr, lpszMsgBuffer, nMsgLen, 0, 10);
244+
if (st_ServiceCfg.st_XCert.bDLEnable)
245+
{
246+
int nSLen = 0;
247+
TCHAR *ptszMsgBuffer = NULL;
248+
249+
OPenSsl_Server_SendMemoryEx(xhDLSsl, lpszClientAddr, lpszMsgBuffer, nMsgLen, &ptszMsgBuffer, &nSLen);
250+
bRet = NetCore_TCPXCore_SendEx(xhNetDownload, lpszClientAddr, ptszMsgBuffer, nSLen);
251+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
252+
}
253+
else
254+
{
255+
bRet = NetCore_TCPXCore_SendEx(xhNetDownload, lpszClientAddr, lpszMsgBuffer, nMsgLen, 0, 10);
256+
}
185257
if (bRet && st_ServiceCfg.st_XTime.bHBTime)
186258
{
187259
SocketOpt_HeartBeat_ActiveAddrEx(xhHBDownload, lpszClientAddr);
188260
}
189261
}
190262
else if(STORAGE_NETTYPE_HTTPUPLOADER == nType)
191263
{
192-
bRet = NetCore_TCPXCore_SendEx(xhNetUPLoader, lpszClientAddr, lpszMsgBuffer, nMsgLen);
264+
if (st_ServiceCfg.st_XCert.bUPEnable)
265+
{
266+
int nSLen = 0;
267+
TCHAR* ptszMsgBuffer = NULL;
268+
269+
OPenSsl_Server_SendMemoryEx(xhUPSsl, lpszClientAddr, lpszMsgBuffer, nMsgLen, &ptszMsgBuffer, &nSLen);
270+
bRet = NetCore_TCPXCore_SendEx(xhNetUPLoader, lpszClientAddr, ptszMsgBuffer, nSLen);
271+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
272+
}
273+
else
274+
{
275+
bRet = NetCore_TCPXCore_SendEx(xhNetUPLoader, lpszClientAddr, lpszMsgBuffer, nMsgLen);
276+
}
193277
if (bRet && st_ServiceCfg.st_XTime.bHBTime)
194278
{
195279
SocketOpt_HeartBeat_ActiveAddrEx(xhHBUPLoader, lpszClientAddr);
196280
}
197281
}
198282
else if (STORAGE_NETTYPE_HTTPCENTER == nType)
199283
{
200-
bRet = NetCore_TCPXCore_SendEx(xhNetCenter, lpszClientAddr, lpszMsgBuffer, nMsgLen);
284+
if (st_ServiceCfg.st_XCert.bCHEnable)
285+
{
286+
int nSLen = 0;
287+
TCHAR* ptszMsgBuffer = NULL;
288+
289+
OPenSsl_Server_SendMemoryEx(xhCHSsl, lpszClientAddr, lpszMsgBuffer, nMsgLen, &ptszMsgBuffer, &nSLen);
290+
bRet = NetCore_TCPXCore_SendEx(xhNetCenter, lpszClientAddr, ptszMsgBuffer, nSLen);
291+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
292+
}
293+
else
294+
{
295+
bRet = NetCore_TCPXCore_SendEx(xhNetCenter, lpszClientAddr, lpszMsgBuffer, nMsgLen);
296+
}
201297
if (bRet && st_ServiceCfg.st_XTime.bHBTime)
202298
{
203299
SocketOpt_HeartBeat_ActiveAddrEx(xhHBCenter, lpszClientAddr);

XEngine_Source/XEngine_StorageApp/XEngine_StorageApp.cpp

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ XNETHANDLE xhDLPool = 0;
1818
XNETHANDLE xhCTPool = 0;
1919
XNETHANDLE xhP2XPPool = 0;
2020

21+
XHANDLE xhDLSsl = NULL;
22+
XHANDLE xhUPSsl = NULL;
23+
XHANDLE xhCHSsl = NULL;
2124
XHANDLE xhLimit = NULL;
2225
XHANDLE xhUPHttp = NULL;
2326
XHANDLE xhDLHttp = NULL;
@@ -42,6 +45,10 @@ void ServiceApp_Stop(int signo)
4245
RfcComponents_HttpServer_DestroyEx(xhCenterHttp);
4346
HelpComponents_Datas_Destory(xhP2XPPacket);
4447

48+
OPenSsl_Server_StopEx(xhDLSsl);
49+
OPenSsl_Server_StopEx(xhUPSsl);
50+
OPenSsl_Server_StopEx(xhCHSsl);
51+
4552
NetCore_TCPXCore_DestroyEx(xhNetDownload);
4653
NetCore_TCPXCore_DestroyEx(xhNetUPLoader);
4754
NetCore_TCPXCore_DestroyEx(xhNetCenter);
@@ -107,7 +114,7 @@ static int ServiceApp_Deamon(int wait)
107114

108115
int main(int argc, char** argv)
109116
{
110-
#if (XENGINE_VERSION_KERNEL < 7) && (XENGINE_VERSION_MAIN < 21)
117+
#if (XENGINE_VERSION_KERNEL < 7) && (XENGINE_VERSION_MAIN < 24)
111118
printf("XEngine版本过低,无法继续\n");
112119
#endif
113120
#ifdef _WINDOWS
@@ -264,6 +271,17 @@ int main(int argc, char** argv)
264271
}
265272
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动下载会话服务成功,下载错误重试次数:%d"), st_ServiceCfg.st_XLimit.nDLTry);
266273

274+
if (st_ServiceCfg.st_XCert.bDLEnable)
275+
{
276+
xhDLSsl = OPenSsl_Server_InitEx(st_ServiceCfg.st_XCert.tszCertChain, NULL, st_ServiceCfg.st_XCert.tszCertKey, FALSE, FALSE, (ENUM_XENGINE_OPENSSL_PROTOCOL)st_ServiceCfg.st_XCert.nSslType);
277+
if (NULL == xhDLSsl)
278+
{
279+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动下载SSL服务失败,错误:%lX"), Session_GetLastError());
280+
goto XENGINE_EXITAPP;
281+
}
282+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务器中,启动下载SSL服务成功,验证模式:%d"), st_ServiceCfg.st_XCert.nSslType);
283+
}
284+
267285
if (!NetCore_TCPXCore_StartEx(&xhNetDownload, st_ServiceCfg.nStorageDLPort, st_ServiceCfg.st_XMax.nMaxClient, st_ServiceCfg.st_XMax.nIOThread, FALSE, st_ServiceCfg.bReuseraddr))
268286
{
269287
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动下载存储网络服务失败,端口:%d,错误:%lX,%d"), st_ServiceCfg.nStorageDLPort, NetCore_GetLastError(), errno);
@@ -307,6 +325,17 @@ int main(int argc, char** argv)
307325
}
308326
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动上传会话服务成功"));
309327

328+
if (st_ServiceCfg.st_XCert.bUPEnable)
329+
{
330+
xhUPSsl = OPenSsl_Server_InitEx(st_ServiceCfg.st_XCert.tszCertChain, NULL, st_ServiceCfg.st_XCert.tszCertKey, FALSE, FALSE, (ENUM_XENGINE_OPENSSL_PROTOCOL)st_ServiceCfg.st_XCert.nSslType);
331+
if (NULL == xhUPSsl)
332+
{
333+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动上传SSL服务失败,错误:%lX"), Session_GetLastError());
334+
goto XENGINE_EXITAPP;
335+
}
336+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务器中,启动上传SSL服务成功,验证模式:%d"), st_ServiceCfg.st_XCert.nSslType);
337+
}
338+
310339
if (!NetCore_TCPXCore_StartEx(&xhNetUPLoader, st_ServiceCfg.nStorageUPPort, st_ServiceCfg.st_XMax.nMaxClient, st_ServiceCfg.st_XMax.nIOThread, FALSE, st_ServiceCfg.bReuseraddr))
311340
{
312341
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动上传存储网络服务失败,端口:%d,错误:%lX"), st_ServiceCfg.nStorageUPPort, NetCore_GetLastError());
@@ -343,6 +372,17 @@ int main(int argc, char** argv)
343372
}
344373
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化HTTP业务服务成功,IO线程个数:%d"), st_ServiceCfg.st_XMax.nCenterThread);
345374

375+
if (st_ServiceCfg.st_XCert.bCHEnable)
376+
{
377+
xhCHSsl = OPenSsl_Server_InitEx(st_ServiceCfg.st_XCert.tszCertChain, NULL, st_ServiceCfg.st_XCert.tszCertKey, FALSE, FALSE, (ENUM_XENGINE_OPENSSL_PROTOCOL)st_ServiceCfg.st_XCert.nSslType);
378+
if (NULL == xhCHSsl)
379+
{
380+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动业务SSL服务失败,错误:%lX"), Session_GetLastError());
381+
goto XENGINE_EXITAPP;
382+
}
383+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务器中,启动业务SSL服务成功,验证模式:%d"), st_ServiceCfg.st_XCert.nSslType);
384+
}
385+
346386
if (!NetCore_TCPXCore_StartEx(&xhNetCenter, st_ServiceCfg.nCenterPort, st_ServiceCfg.st_XMax.nMaxClient, st_ServiceCfg.st_XMax.nIOThread, FALSE, st_ServiceCfg.bReuseraddr))
347387
{
348388
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务器中,启动业务控制存储网络服务失败,端口:%d,错误:%lX"), st_ServiceCfg.nCenterPort, NetCore_GetLastError());
@@ -445,6 +485,10 @@ int main(int argc, char** argv)
445485
RfcComponents_HttpServer_DestroyEx(xhCenterHttp);
446486
HelpComponents_Datas_Destory(xhP2XPPacket);
447487

488+
OPenSsl_Server_StopEx(xhDLSsl);
489+
OPenSsl_Server_StopEx(xhUPSsl);
490+
OPenSsl_Server_StopEx(xhCHSsl);
491+
448492
NetCore_TCPXCore_DestroyEx(xhNetDownload);
449493
NetCore_TCPXCore_DestroyEx(xhNetUPLoader);
450494
NetCore_TCPXCore_DestroyEx(xhNetCenter);

0 commit comments

Comments
 (0)