Skip to content

Commit 572e909

Browse files
committed
modify:mode 0 rule forward support
1 parent 148cb60 commit 572e909

File tree

14 files changed

+400
-85
lines changed

14 files changed

+400
-85
lines changed

XEngine_Release/XEngine_Config/XEngine_Config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
"XProxy": {
3434
"nRuleMode": 0,
3535
"tszDestIPAddr": [
36-
"10.0.4.69:5403",
37-
"10.0.4.69:5404"
36+
"127.0.0.1:5501",
37+
"127.0.0.1:5501"
3838
],
3939
"tszRuleIPAddr": [
4040
"10.0.0.1-10.0.4.69:5403",

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_APIHelp/ModuleHelp_APIHelp.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,18 @@ bool CModuleHelp_APIHelp::ModuleHelp_APIHelp_QSort(XPVOID lPBase, int nNumber, i
5858
//////////////////////////////////////////////////////////////////////////
5959
int CModuleHelp_APIHelp::ModuleHelp_APIHelp_QSortCmp(const void* lParam, const void* WParam)
6060
{
61-
int nAValue = *(const int*)lParam;
62-
int nBValue = *(const int*)WParam;
61+
// 先把 a/b 当作指向 “SESSION_IPCONUT*” 的指针来处理
62+
const SESSION_IPCONUT* pSt_IPAParam = *(const SESSION_IPCONUT* const*)lParam;
63+
const SESSION_IPCONUT* pSt_IPWParam = *(const SESSION_IPCONUT* const*)WParam;
6364

64-
return nAValue - nBValue;
65+
// 然后比较它们的字段
66+
if (pSt_IPAParam->nIPCount < pSt_IPWParam->nIPCount)
67+
{
68+
return -1;
69+
}
70+
else if (pSt_IPAParam->nIPCount > pSt_IPWParam->nIPCount)
71+
{
72+
return +1;
73+
}
74+
return 0;
6575
}

XEngine_Source/XEngine_ModuleSession/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp
66
LOADSO =
77
LIB = -lXEngine_BaseLib -lXEngine_Algorithm
88
LIBEX =
9-
OBJECTS = ModuleSession_Forward.o ModuleSession_Socks.o ModuleSession_Tunnel.o ModuleSession_Proxy.o pch.o
9+
OBJECTS = ModuleSession_Forward.o ModuleSession_Socks.o ModuleSession_Tunnel.o ModuleSession_Proxy.o ModuleSession_ProxyRule.o pch.o
1010

1111
ifeq ($(RELEASE),1)
1212
FLAGS = -c -D _RELEASE
@@ -58,6 +58,8 @@ ModuleSession_Tunnel.o:./ModuleSession_Tunnel/ModuleSession_Tunnel.cpp
5858
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Tunnel/ModuleSession_Tunnel.cpp
5959
ModuleSession_Proxy.o:./ModuleSession_Proxy/ModuleSession_Proxy.cpp
6060
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Proxy/ModuleSession_Proxy.cpp
61+
ModuleSession_ProxyRule.o:./ModuleSession_Proxy/ModuleSession_ProxyRule.cpp
62+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Proxy/ModuleSession_ProxyRule.cpp
6163

6264
pch.o:./pch.cpp
6365
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ typedef struct
2929
}SESSION_FORWARD, * LPSESSION_FORWARD;
3030
typedef struct
3131
{
32-
XCHAR tszIPAddr[128];
3332
int nIPCount;
33+
XCHAR tszIPAddr[128];
3434
}SESSION_IPCONUT;
3535
//////////////////////////////////////////////////////////////////////////
3636
// 导出函数
@@ -583,13 +583,84 @@ extern "C" bool ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int*
583583
*********************************************************************/
584584
extern "C" bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr);
585585
/********************************************************************
586-
函数名称:ModuleSession_Proxy_GetIPCount
587-
函数功能:获取IP目标转发地址的统计
588-
参数.一:pppSt_IPCount
586+
函数名称:ModuleSession_ProxyRule_Insert
587+
函数功能:插入一个后台服务
588+
参数.一:lpszIPAddr
589+
In/Out:In
590+
类型:常量字符指针
591+
可空:N
592+
意思:输入要插入的后台服务
593+
返回值
594+
类型:逻辑型
595+
意思:是否成功
596+
备注:
597+
*********************************************************************/
598+
extern "C" bool ModuleSession_ProxyRule_Insert(LPCXSTR lpszIPAddr);
599+
/********************************************************************
600+
函数名称:ModuleSession_ProxyRule_Delete
601+
函数功能:删除一个后台服务地址
602+
参数.一:lpszIPAddr
603+
In/Out:In
604+
类型:常量字符指针
605+
可空:N
606+
意思:输入要操作的后台服务地址
607+
返回值
608+
类型:逻辑型
609+
意思:是否成功
610+
备注:
611+
*********************************************************************/
612+
extern "C" bool ModuleSession_ProxyRule_Delete(LPCXSTR lpszIPAddr);
613+
/********************************************************************
614+
函数名称:ModuleSession_ProxyRule_Set
615+
函数功能:设置后台服务信息
616+
参数.一:lpszIPAddr
617+
In/Out:In
618+
类型:常量字符指针
619+
可空:N
620+
意思:输入要操作的地址
621+
参数.二:lpszUseAddr
622+
In/Out:In
623+
类型:常量字符指针
624+
可空:N
625+
意思:输入使用的客户端地址
626+
参数.三:bAdd
627+
In/Out:In
628+
类型:逻辑型
629+
可空:Y
630+
意思:添加还是删除
631+
返回值
632+
类型:逻辑型
633+
意思:是否成功
634+
备注:
635+
*********************************************************************/
636+
extern "C" bool ModuleSession_ProxyRule_Set(LPCXSTR lpszIPAddr, LPCXSTR lpszUseAddr, bool bAdd = true);
637+
/********************************************************************
638+
函数名称:ModuleSession_ProxyRule_GetCount
639+
函数功能:获取统计信息
640+
参数.一:lpszIPAddr
641+
In/Out:In
642+
类型:常量字符指针
643+
可空:N
644+
意思:输入要操作的地址
645+
参数.二:pInt_Count
589646
In/Out:Out
647+
类型:整数型指针
648+
可空:N
649+
意思:输出个数
650+
返回值
651+
类型:逻辑型
652+
意思:是否成功
653+
备注:
654+
*********************************************************************/
655+
extern "C" bool ModuleSession_ProxyRule_GetCount(LPCXSTR lpszIPAddr, int* pInt_Count);
656+
/********************************************************************
657+
函数名称:ModuleSession_ProxyRule_GetList
658+
函数功能:获取所有列表
659+
参数.一:pppSt_IPCount
660+
In/Out:In
590661
类型:三级指针
591662
可空:N
592-
意思:输出IP目标转发地址列表信息
663+
意思:输出获取到的列表信息
593664
参数.二:pInt_Count
594665
In/Out:Out
595666
类型:整数型指针
@@ -600,4 +671,4 @@ extern "C" bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr);
600671
意思:是否成功
601672
备注:
602673
*********************************************************************/
603-
extern "C" bool ModuleSession_Proxy_GetIPCount(SESSION_IPCONUT*** pppSt_IPCount, int* pInt_Count);
674+
extern "C" bool ModuleSession_ProxyRule_GetList(SESSION_IPCONUT*** pppSt_IPCount, int* pInt_Count);

XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.cpp

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -244,70 +244,4 @@ bool CModuleSession_Proxy::ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr)
244244
}
245245
st_Locker.unlock();
246246
return true;
247-
}
248-
/********************************************************************
249-
函数名称:ModuleSession_Proxy_GetIPCount
250-
函数功能:获取IP目标转发地址的统计
251-
参数.一:pppSt_IPCount
252-
In/Out:Out
253-
类型:三级指针
254-
可空:N
255-
意思:输出IP目标转发地址列表信息
256-
参数.二:pInt_Count
257-
In/Out:Out
258-
类型:整数型指针
259-
可空:N
260-
意思:输出列表个数
261-
返回值
262-
类型:逻辑型
263-
意思:是否成功
264-
备注:
265-
*********************************************************************/
266-
bool CModuleSession_Proxy::ModuleSession_Proxy_GetIPCount(SESSION_IPCONUT ***pppSt_IPCount, int* pInt_Count)
267-
{
268-
Session_IsErrorOccur = false;
269-
270-
if (NULL == pppSt_IPCount || NULL == pInt_Count)
271-
{
272-
Session_IsErrorOccur = true;
273-
Session_dwErrorCode = ERROR_MODULE_SESSION_PROXY_PARAMENT;
274-
return false;
275-
}
276-
std::list<SESSION_IPCONUT> stl_ListIPCount;
277-
st_Locker.lock_shared();
278-
//遍历
279-
for (auto stl_MapIterator = stl_MapSession.begin(); stl_MapIterator != stl_MapSession.end(); stl_MapIterator++)
280-
{
281-
//遍历已有的列表
282-
bool bFound = false;
283-
for (auto stl_ListIterator = stl_ListIPCount.begin(); stl_ListIterator != stl_ListIPCount.end(); stl_ListIterator++)
284-
{
285-
if (0 == _tcsxnicmp(stl_ListIterator->tszIPAddr, stl_MapIterator->second.tszDstAddr, _tcsxlen(stl_ListIterator->tszIPAddr)))
286-
{
287-
bFound = true;
288-
stl_ListIterator->nIPCount++;
289-
break;
290-
}
291-
}
292-
//是否找到
293-
if (!bFound)
294-
{
295-
//没有找到加入新的列表
296-
SESSION_IPCONUT st_IPCount = {};
297-
st_IPCount.nIPCount = 1;
298-
_tcsxcpy(st_IPCount.tszIPAddr, stl_MapIterator->second.tszDstAddr);
299-
stl_ListIPCount.push_back(st_IPCount);
300-
}
301-
}
302-
st_Locker.unlock_shared();
303-
304-
*pInt_Count = stl_ListIPCount.size();
305-
BaseLib_Memory_Malloc((XPPPMEM)pppSt_IPCount, *pInt_Count, sizeof(SESSION_IPCONUT));
306-
307-
auto stl_ListIterator = stl_ListIPCount.begin();
308-
for (int i = 0; stl_ListIterator != stl_ListIPCount.end(); stl_ListIterator++)
309-
{
310-
*(*pppSt_IPCount)[i] = *stl_ListIterator;
311-
}
312-
return true;
313247
}

XEngine_Source/XEngine_ModuleSession/ModuleSession_Proxy/ModuleSession_Proxy.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class CModuleSession_Proxy
2727
bool ModuleSession_Proxy_GetForToken(XNETHANDLE xhToken, SESSION_FORWARD* pSt_ProxyInfo);
2828
bool ModuleSession_Proxy_List(SESSION_FORWARD*** pppSt_ListUser, int* pInt_Count, LPCXSTR lpszAddr = NULL);
2929
bool ModuleSession_Proxy_Delete(LPCXSTR lpszIPAddr);
30-
bool ModuleSession_Proxy_GetIPCount(SESSION_IPCONUT ***pppSt_IPCount, int* pInt_Count);
3130
private:
3231
shared_mutex st_Locker;
3332
private:

0 commit comments

Comments
 (0)