未验证 提交 cc0bf40a 编写于 作者: xengine-qyt's avatar xengine-qyt 提交者: Gitee

!7 V1.4.0.1001 Merge

Merge pull request !7 from qyt/develop
XEngine_ProxyServer V1.4.0.1001
更新:匹配XEngine 7.43版本
修改:使用新的方式来关闭客户端
修正:当客户端关闭某些时候回崩溃的问题
update:match xengine v7.43
modify:use the new way to close the client
fixed:crashed when client is closed
======================================================================================
XEngine_ProxyServer V1.3.1.1001
更新:匹配XEngine 7.38版本
......
......@@ -81,6 +81,9 @@ make FLAGS=CleanAll 清理编译
3. 提交代码
4. 新建 Pull Request
## 开发计划
使用线程池转发数据而不是一对一的线程
## 关注我们
如果你觉得这个软件对你有帮助,请你给我们一个START吧
......
......@@ -150,7 +150,7 @@ int main(int argc, char** argv)
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
printf("%s\n", tszMsgBuffer);
}
......
......@@ -54,7 +54,7 @@ int main(int argc, char** argv)
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
printf("接受数据失败!\n");
return 0;
......@@ -72,7 +72,7 @@ int main(int argc, char** argv)
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
printf("接受数据失败!\n");
return 0;
......@@ -94,7 +94,7 @@ int main(int argc, char** argv)
}
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
printf("接受数据失败!\n");
return 0;
......@@ -112,7 +112,7 @@ int main(int argc, char** argv)
{
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
break;
}
......
......@@ -31,6 +31,7 @@ int main(int argc, char** argv)
#endif
SOCKET m_Socket;
LPCTSTR lpszServiceAddr = _T("127.0.0.1");
if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5401))
{
printf("连接失败!错误:%lX\n", XClient_GetLastError());
......@@ -50,7 +51,7 @@ int main(int argc, char** argv)
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
printf("接受数据失败!\n");
return 0;
......@@ -68,7 +69,7 @@ int main(int argc, char** argv)
{
nMsgLen = 2048;
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen))
{
break;
}
......
......@@ -12,9 +12,9 @@
},
"XTime": {
"nTimeCheck": 3,
"nSocksTimeOut": 0,
"nTunnelTimeOut": 0,
"nForwardTimeOut": 0
"nSocksTimeOut": 5,
"nTunnelTimeOut": 5,
"nForwardTimeOut": 5
},
"XLog": {
"MaxSize": 1024000,
......@@ -23,10 +23,11 @@
"tszLogFile": "./XEngine_Log/XEngine_ServiceApp.log"
},
"XAuth": {
"bAuth": 2,
"bAuth": 0,
"tszAuthFile": "./XEngine_Config/UserList.txt"
},
"XVer": [
"1.4.0.1001 Build20221111",
"1.3.1.1001 Build20220804",
"1.3.0.1001 Build20220617",
"1.2.0.1001 Build20220413",
......
......@@ -83,7 +83,7 @@ extern XHANDLE xhTunnelHeart;
extern XHANDLE xhForwardSocket;
extern XHANDLE xhForwardHeart;
extern XHANDLE xhForwardPacket;
extern XNETHANDLE xhForwardPool;
extern XHANDLE xhForwardPool;
//配置文件
extern XENGINE_SERVICECONFIG st_ServiceConfig;
......
......@@ -115,13 +115,7 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType)
SocketOpt_HeartBeat_DeleteAddrEx(xhSocksHeart, lpszClientAddr);
NetCore_TCPXCore_CloseForClientEx(xhSocksSocket, lpszClientAddr);
}
PROXYPROTOCOL_CLIENTINFO st_ProxyClient;
memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO));
if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient))
{
st_ProxyClient.bClose = TRUE;
ProxyProtocol_SocksCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO));
}
ProxyProtocol_SocksCore_Delete(lpszClientAddr);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
}
else if (XENGINE_CLIENT_NETTYPE_TUNNEL == nIPProto)
......@@ -136,16 +130,10 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType)
}
else
{
SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, lpszClientAddr);
NetCore_TCPXCore_CloseForClientEx(xhTunnelSocket, lpszClientAddr);
SocketOpt_HeartBeat_DeleteAddrEx(xhTunnelHeart, lpszClientAddr);
}
PROXYPROTOCOL_CLIENTINFO st_ProxyClient;
memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO));
if (ProxyProtocol_TunnelCore_GetInfo(lpszClientAddr, &st_ProxyClient))
{
st_ProxyClient.bClose = TRUE;
ProxyProtocol_TunnelCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO));
}
ProxyProtocol_TunnelCore_Delete(lpszClientAddr);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
}
else if (XENGINE_CLIENT_NETTYPE_FORWARD == nIPProto)
......
......@@ -12,7 +12,7 @@ XHANDLE xhTunnelHeart = NULL;
XHANDLE xhForwardSocket = NULL;
XHANDLE xhForwardHeart = NULL;
XHANDLE xhForwardPacket = NULL;
XNETHANDLE xhForwardPool = 0;
XHANDLE xhForwardPool = NULL;
//配置文件
XENGINE_SERVICECONFIG st_ServiceConfig;
......@@ -245,7 +245,8 @@ int main(int argc, char** argv)
ppSt_ListParam[i]->lParam = pInt_Pos;
ppSt_ListParam[i]->fpCall_ThreadsTask = XEngine_Forward_Thread;
}
if (!ManagePool_Thread_NQCreate(&xhForwardPool, &ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread))
xhForwardPool = ManagePool_Thread_NQCreate(&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread);
if (NULL == xhForwardPool)
{
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Forward线程池服务失败,错误:%lX"), ManagePool_GetLastError());
goto XENGINE_SERVICEAPP_EXIT;
......
......@@ -199,28 +199,26 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int
XHTHREAD CALLBACK XEngine_SocksTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket)
{
TCHAR tszMsgBuffer[4096];
TCHAR tszClientAddr[128];
memset(tszClientAddr, '\0', sizeof(tszClientAddr));
_tcscpy(tszClientAddr, lpszClientAddr);
while (1)
{
int nMsgLen = 4096;
if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen))
{
break;
}
XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_SOCKS);
}
//退出处理
PROXYPROTOCOL_CLIENTINFO st_ProxyClient;
memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO));
if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient))
{
ProxyProtocol_SocksCore_Delete(lpszClientAddr);
//是主动关闭的还是被动触发的
if (!st_ProxyClient.bClose)
if (!XEngine_Network_Send(tszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_SOCKS))
{
//主动关闭,需要调用
XClient_TCPSelect_Close(st_ProxyClient.hSocket);
XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_SERVICE);
break;
}
}
//退出处理
XClient_TCPSelect_Close(hSocket);
SocketOpt_HeartBeat_ForceOutAddrEx(xhSocksHeart, tszClientAddr);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Socks客户端:%s,离开服务器,客户端主动断开"), tszClientAddr);
return 0;
}
\ No newline at end of file
......@@ -120,7 +120,7 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
//非代理协议直接发送数据
XClient_TCPSelect_SendMsg(st_ProxyClient.hSocket, lpszMsgBuffer, nMsgLen);
}
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d"), lpszClientAddr, tszConnectAddr, nIPPort);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d,代理模式:%s"), lpszClientAddr, tszConnectAddr, nIPPort, bProxy ? "代理" : "直连");
}
else
{
......@@ -132,28 +132,26 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
XHTHREAD CALLBACK XEngine_TunnelTask_Thread(LPCTSTR lpszClientAddr, SOCKET hSocket)
{
TCHAR tszMsgBuffer[4096];
TCHAR tszClientAddr[128];
memset(tszClientAddr, '\0', sizeof(tszClientAddr));
_tcscpy(tszClientAddr, lpszClientAddr);
while (1)
{
int nMsgLen = 4096;
if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen, FALSE))
if (!XClient_TCPSelect_RecvMsg(hSocket, tszMsgBuffer, &nMsgLen))
{
break;
}
XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_TUNNEL);
}
//退出处理
PROXYPROTOCOL_CLIENTINFO st_ProxyClient;
memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO));
if (ProxyProtocol_TunnelCore_GetInfo(lpszClientAddr, &st_ProxyClient))
{
ProxyProtocol_TunnelCore_Delete(lpszClientAddr);
//是主动关闭的还是被动触发的
if (!st_ProxyClient.bClose)
if (!XEngine_Network_Send(tszClientAddr, tszMsgBuffer, nMsgLen, XENGINE_CLIENT_NETTYPE_TUNNEL))
{
//主动关闭,需要调用
XClient_TCPSelect_Close(hSocket);
XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_SERVICE);
break;
}
}
//退出处理
XClient_TCPSelect_Close(hSocket);
SocketOpt_HeartBeat_ForceOutAddrEx(xhTunnelHeart, tszClientAddr);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,客户端主动断开"), tszClientAddr);
return 0;
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册