Skip to content

Commit 9774ea5

Browse files
committed
added:full proxy network service
1 parent 824342e commit 9774ea5

File tree

13 files changed

+179
-4
lines changed

13 files changed

+179
-4
lines changed

XEngine_Release/XEngine_Config/XEngine_Config.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"nTimeCheck": 3,
1515
"nSocksTimeOut": 5,
1616
"nTunnelTimeOut": 5,
17-
"nForwardTimeOut": 5
17+
"nForwardTimeOut": 5,
18+
"nProxyTimeout": 5
1819
},
1920
"XLog": {
2021
"MaxSize": 1024000,
@@ -26,5 +27,11 @@
2627
"bEnable":true,
2728
"tszAPIUrl":"http://app.xyry.org:5501/api?function=machine",
2829
"tszServiceName":"XEngine_ProxyServer"
30+
},
31+
"XProxy": {
32+
"bEnable": false,
33+
"nSrcPort": 5410,
34+
"nDstPort": 5411,
35+
"tszDstIPAddr": "10.0.1.89"
2936
}
3037
}

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ typedef struct tag_XEngine_ServiceConfig
3333
int nSocksTimeOut; //TCP超时时间
3434
int nTunnelTimeOut; //HTTP超时时间
3535
int nForwardTimeOut; //转发超时时间
36+
int nProxyTimeout; //代理超时时间
3637
}st_XTime; //次数*时间=超时
3738
struct
3839
{
@@ -47,6 +48,13 @@ typedef struct tag_XEngine_ServiceConfig
4748
XCHAR tszAPIUrl[MAX_PATH];
4849
XCHAR tszServiceName[128];
4950
}st_XReport;
51+
struct
52+
{
53+
XCHAR tszDstIPAddr[128];
54+
int nSrcPort;
55+
int nDstPort;
56+
bool bEnable;
57+
}st_XProxy;
5058
struct
5159
{
5260
list<string>* pStl_ListVer;

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Error.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717
#define ERROR_MODULE_CONFIGURE_JSON_XTIME 0xA0005 //读取XTIME配置失败
1818
#define ERROR_MODULE_CONFIGURE_JSON_XLOG 0xA0006 //读取XLOG配置失败
1919
#define ERROR_MODULE_CONFIGURE_JSON_XVER 0xA0008 //没有版本配置
20-
#define ERROR_MODULE_CONFIGURE_JSON_XREPORT 0xA0009 //没有报告配置
20+
#define ERROR_MODULE_CONFIGURE_JSON_XREPORT 0xA0009 //没有报告配置
21+
#define ERROR_MODULE_CONFIGURE_JSON_XPROXY 0xA0010 //没有代理配置

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
9999
pSt_ServerConfig->st_XMax.nIOThread = st_JsonXMax["nIOThread"].asInt();
100100
pSt_ServerConfig->st_XMax.nForwardThread = st_JsonXMax["nForwardThread"].asInt();
101101

102-
if (st_JsonRoot["XTime"].empty() || (4 != st_JsonRoot["XTime"].size()))
102+
if (st_JsonRoot["XTime"].empty() || (5 != st_JsonRoot["XTime"].size()))
103103
{
104104
Config_IsErrorOccur = true;
105105
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XTIME;
@@ -110,6 +110,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
110110
pSt_ServerConfig->st_XTime.nSocksTimeOut = st_JsonXTime["nSocksTimeOut"].asInt();
111111
pSt_ServerConfig->st_XTime.nTunnelTimeOut = st_JsonXTime["nTunnelTimeOut"].asInt();
112112
pSt_ServerConfig->st_XTime.nForwardTimeOut = st_JsonXTime["nForwardTimeOut"].asInt();
113+
pSt_ServerConfig->st_XTime.nProxyTimeout = st_JsonXTime["nProxyTimeout"].asInt();
113114

114115
if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size()))
115116
{
@@ -135,6 +136,18 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
135136
_tcsxcpy(pSt_ServerConfig->st_XReport.tszAPIUrl, st_JsonXReport["tszAPIUrl"].asCString());
136137
_tcsxcpy(pSt_ServerConfig->st_XReport.tszServiceName, st_JsonXReport["tszServiceName"].asCString());
137138

139+
if (st_JsonRoot["XProxy"].empty() || (4 != st_JsonRoot["XProxy"].size()))
140+
{
141+
Config_IsErrorOccur = true;
142+
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPROXY;
143+
return false;
144+
}
145+
Json::Value st_JsonXProxy = st_JsonRoot["XProxy"];
146+
pSt_ServerConfig->st_XProxy.bEnable = st_JsonXProxy["bEnable"].asBool();
147+
pSt_ServerConfig->st_XProxy.nSrcPort = st_JsonXProxy["nSrcPort"].asInt();
148+
pSt_ServerConfig->st_XProxy.nDstPort = st_JsonXProxy["nDstPort"].asInt();
149+
_tcsxcpy(pSt_ServerConfig->st_XProxy.tszDstIPAddr, st_JsonXProxy["tszDstIPAddr"].asCString());
150+
138151
return true;
139152
}
140153
/********************************************************************

XEngine_Source/XEngine_ServiceApp/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_Cryption -l
1111
-lXEngine_ModuleConfigure -lXEngine_ModuleSession -lXEngine_ModuleProtocol \
1212
-ljsoncpp -lXEngine_InfoReport
1313
LIBEX =
14-
OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ServiceApp.o
14+
OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ProxyTask.o XEngine_ServiceApp.o
1515

1616
ifeq ($(RELEASE),1)
1717
FLAGS = -c
@@ -63,6 +63,8 @@ XEngine_TunnelTask.o:./XEngine_TunnelTask.cpp
6363
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TunnelTask.cpp
6464
XEngine_ForwardTask.o:./XEngine_ForwardTask.cpp
6565
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ForwardTask.cpp
66+
XEngine_ProxyTask.o:./XEngine_ProxyTask.cpp
67+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ProxyTask.cpp
6668

6769
XEngine_ServiceApp.o:./XEngine_ServiceApp.cpp
6870
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ServiceApp.cpp

XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ using namespace std;
6464
#include "XEngine_SocksTask.h"
6565
#include "XEngine_TunnelTask.h"
6666
#include "XEngine_ForwardTask.h"
67+
#include "XEngine_ProxyTask.h"
6768
/********************************************************************
6869
// Created: 2021/12/02 16:34:41
6970
// File Name: D:\XEngine_ServiceApp\XEngine_Source\XEngine_ServiceApp\XEngine_Hdr.h
@@ -92,13 +93,17 @@ extern XHANDLE xhForwardHeart;
9293
extern XHANDLE xhForwardPacket;
9394
extern XHANDLE xhForwardPool;
9495
extern XHANDLE xhForwardClient;
96+
//代理转发服务器
97+
extern XHANDLE xhProxySocket;
98+
extern XHANDLE xhProxyHeart;
9599
//配置文件
96100
extern XENGINE_SERVICECONFIG st_ServiceConfig;
97101

98102
//网络类型定义
99103
#define XENGINE_CLIENT_NETTYPE_SOCKS 1
100104
#define XENGINE_CLIENT_NETTYPE_TUNNEL 2
101105
#define XENGINE_CLIENT_NETTYPE_FORWARD 3
106+
#define XENGINE_CLIENT_NETTYPE_PROXY 4
102107
//关闭模式
103108
#define XENGINE_CLIENT_CLOSE_NETWORK 1
104109
#define XENGINE_CLIENT_CLOSE_HEARTBEAT 2

XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,23 @@ void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSoc
9595
{
9696
XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_HEARTBEAT);
9797
}
98+
//////////////////////////////////////////////////////////////////////////Forward相关
99+
bool CALLBACK Network_Callback_ProxyLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam)
100+
{
101+
return XEngine_Proxy_Connect(lpszClientAddr);
102+
}
103+
void CALLBACK Network_Callback_ProxyRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
104+
{
105+
XEngine_Proxy_Recvmsg(lpszClientAddr, lpszRecvMsg, nMsgLen);
106+
}
107+
void CALLBACK Network_Callback_ProxyLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam)
108+
{
109+
XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_PROXY, XENGINE_CLIENT_CLOSE_NETWORK);
110+
}
111+
void CALLBACK Network_Callback_ProxyHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam)
112+
{
113+
XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_PROXY, XENGINE_CLIENT_CLOSE_HEARTBEAT);
114+
}
98115
//////////////////////////////////////////////////////////////////////////网络IO关闭操作
99116
void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType)
100117
{
@@ -182,6 +199,23 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType)
182199
ModuleSession_Forward_Delete(lpszClientAddr);
183200
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
184201
}
202+
else if (XENGINE_CLIENT_NETTYPE_PROXY == nIPProto)
203+
{
204+
if (XENGINE_CLIENT_CLOSE_NETWORK == nCloseType)
205+
{
206+
SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr);
207+
}
208+
else if (XENGINE_CLIENT_CLOSE_HEARTBEAT == nCloseType)
209+
{
210+
NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr);
211+
}
212+
else
213+
{
214+
SocketOpt_HeartBeat_DeleteAddrEx(xhProxyHeart, lpszClientAddr);
215+
NetCore_TCPXCore_CloseForClientEx(xhProxySocket, lpszClientAddr);
216+
}
217+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType);
218+
}
185219
else
186220
{
187221
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("未知客户端:%s,离开服务器"), lpszClientAddr);
@@ -220,6 +254,15 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs
220254
}
221255
SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr);
222256
}
257+
else if (XENGINE_CLIENT_NETTYPE_PROXY == nIPProto)
258+
{
259+
if (!NetCore_TCPXCore_SendEx(xhProxySocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1))
260+
{
261+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Proxy客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError());
262+
return false;
263+
}
264+
SocketOpt_HeartBeat_ActiveAddrEx(xhProxyHeart, lpszClientAddr);
265+
}
223266
else
224267
{
225268
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError());

XEngine_Source/XEngine_ServiceApp/XEngine_Network.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSoc
2525
void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam);
2626
void CALLBACK Network_Callback_ForwardLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
2727
void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
28+
//Forward相关
29+
bool CALLBACK Network_Callback_ProxyLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
30+
void CALLBACK Network_Callback_ProxyRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam);
31+
void CALLBACK Network_Callback_ProxyLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam);
32+
void CALLBACK Network_Callback_ProxyHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam);
2833
//关闭与发送
2934
void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType);
3035
bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nIPProto);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "XEngine_Hdr.h"
2+
/********************************************************************
3+
// Created: 2025/01/20 10:59:05
4+
// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ProxyTask.cpp
5+
// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp
6+
// File Base: XEngine_ProxyTask
7+
// File Ext: cpp
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: 代理服务协议
11+
// History:
12+
*********************************************************************/
13+
bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr)
14+
{
15+
XSOCKET hSocket = 0;
16+
if (!XClient_TCPSelect_Create(&hSocket, st_ServiceConfig.st_XProxy.tszDstIPAddr, st_ServiceConfig.st_XProxy.nDstPort, 2))
17+
{
18+
return false;
19+
}
20+
SocketOpt_HeartBeat_InsertAddrEx(xhProxyHeart, lpszClientAddr);
21+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Proxy客户端:%s,连接到服务器"), lpszClientAddr);
22+
return true;
23+
}
24+
bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
25+
{
26+
return true;
27+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
/********************************************************************
3+
// Created: 2025/01/20 10:45:13
4+
// File Name: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp\XEngine_ProxyTask.h
5+
// File Path: D:\XEngine_ProxyServer\XEngine_Source\XEngine_ServiceApp
6+
// File Base: XEngine_ProxyTask
7+
// File Ext: h
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: 代理转发协议
11+
// History:
12+
*********************************************************************/
13+
bool XEngine_Proxy_Connect(LPCXSTR lpszClientAddr);
14+
bool XEngine_Proxy_Recvmsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen);

0 commit comments

Comments
 (0)