Skip to content

Commit 86416a4

Browse files
committed
modify:save and value away for socks
1 parent e25c4d8 commit 86416a4

File tree

7 files changed

+165
-163
lines changed

7 files changed

+165
-163
lines changed

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -202,22 +202,22 @@ extern "C" bool ModuleSession_Socks_Delete(LPCXSTR lpszClientID);
202202
类型:常量字符指针
203203
可空:N
204204
意思:输入要操作的客户端
205-
参数.二:lParam
205+
参数.二:xhClient
206206
In/Out:In
207-
类型:无类型指针
207+
类型:句柄
208208
可空:N
209-
意思:输入设置的内容
210-
参数.三:nLen
209+
意思:输入客户端网络句柄
210+
参数.三:lpszClientAddr
211211
In/Out:In
212-
类型:整数型
212+
类型:常量字符指针
213213
可空:N
214-
意思:输入要设置内容大小
214+
意思:绑定的客户端地址
215215
返回值
216216
类型:逻辑型
217217
意思:是否成功
218218
备注:
219219
*********************************************************************/
220-
extern "C" bool ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPVOID lParam, int nLen);
220+
extern "C" bool ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XNETHANDLE xhClient, LPCXSTR lpszClientAddr);
221221
/********************************************************************
222222
函数名称:ModuleSession_Socks_GetInfo
223223
函数功能:获取自定义信息
@@ -226,46 +226,55 @@ extern "C" bool ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPVOID lParam,
226226
类型:常量字符指针
227227
可空:N
228228
意思:输入要操作的客户端
229-
参数.二:lParam
229+
参数.二:pxhClient
230230
In/Out:Out
231-
类型:无类型指针
231+
类型:句柄
232232
可空:N
233-
意思:输出获取到的内容
234-
参数.三:pInt_Len
235-
In/Out:Out
236-
类型:整数型指针
237-
可空:Y
238-
意思:输出内容大小
233+
意思:输出客户端网络句柄
239234
返回值
240235
类型:逻辑型
241236
意思:是否成功
242237
备注:
243238
*********************************************************************/
244-
extern "C" bool ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XPVOID lParam, int* pInt_Len = NULL);
239+
extern "C" bool ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XNETHANDLE* pxhClient);
245240
/********************************************************************
246-
函数名称:ModuleSession_Socks_GetList
247-
函数功能:获取所有自定义数据
248-
参数.一:xpppMem
249-
In/Out:Out
250-
类型:三级指针
241+
函数名称:ModuleSession_Socks_GetHandleForAddr
242+
函数功能:通过客户端地址获取句柄
243+
参数.一:lpszClientAddr
244+
In/Out:In
245+
类型:常量字符指针
251246
可空:N
252-
意思:输出获取到的列表
253-
参数.二:pInt_Count
247+
意思:输入要获取的客户端地址
248+
参数.二:pxhClient
254249
In/Out:Out
255-
类型:整数型指针
250+
类型:句柄
256251
可空:N
257-
意思:输出列表个数
258-
参数.三:nSize
252+
意思:输出句柄
253+
返回值
254+
类型:逻辑型
255+
意思:是否成功
256+
备注:
257+
*********************************************************************/
258+
extern "C" bool ModuleSession_Socks_GetHandleForAddr(LPCXSTR lpszClientAddr, XNETHANDLE* pxhClient);
259+
/********************************************************************
260+
函数名称:ModuleSession_Socks_GetAddrForHandle
261+
函数功能:通过客户端句柄来获得对应的IP地址
262+
参数.一:pxhClient
263+
In/Out:In
264+
类型:句柄
265+
可空:N
266+
意思:输入句柄
267+
参数.二:lpszClientAddr
259268
In/Out:Out
260-
类型:整数型
269+
类型:字符指针
261270
可空:N
262-
意思:输入每个成员的大小
271+
意思:输出获取的客户端地址
263272
返回值
264273
类型:逻辑型
265274
意思:是否成功
266275
备注:
267276
*********************************************************************/
268-
extern "C" bool ModuleSession_Socks_GetList(XPPPMEM xpppMem, int* pInt_Count, int nSize);
277+
extern "C" bool ModuleSession_Socks_GetAddrForHandle(XNETHANDLE xhClient, XCHAR* ptszClientAddr);
269278
/********************************************************************
270279
函数名称:ModuleSession_Socks_GetStatus
271280
函数功能:获取客户端状态

XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.cpp

Lines changed: 89 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ bool CModuleSession_Socks::ModuleSession_Socks_Create(LPCXSTR lpszClientID)
5252
}
5353
memset(pSt_SocksClinet, '\0', sizeof(RFCPROTOCOL_SOCKS5CLIENT));
5454

55-
_tcsxcpy(pSt_SocksClinet->tszClientAddr, lpszClientID);
5655
pSt_SocksClinet->enProxyStatus = ENUM_PROXY_SESSION_SOCKS_STATUS_CREATE;
5756

5857
st_Locker.lock();
@@ -81,11 +80,6 @@ bool CModuleSession_Socks::ModuleSession_Socks_Delete(LPCXSTR lpszClientID)
8180
unordered_map<xstring, RFCPROTOCOL_SOCKS5CLIENT*>::const_iterator stl_MapIterator = stl_MapClients.find(lpszClientID);
8281
if (stl_MapIterator != stl_MapClients.end())
8382
{
84-
if (NULL != stl_MapIterator->second->lParam)
85-
{
86-
free(stl_MapIterator->second->lParam);
87-
stl_MapIterator->second->lParam = NULL;
88-
}
8983
stl_MapClients.erase(stl_MapIterator);
9084
}
9185
st_Locker.unlock();
@@ -99,26 +93,26 @@ bool CModuleSession_Socks::ModuleSession_Socks_Delete(LPCXSTR lpszClientID)
9993
类型:常量字符指针
10094
可空:N
10195
意思:输入要操作的客户端
102-
参数.二:lParam
96+
参数.二:xhClient
10397
In/Out:In
104-
类型:无类型指针
98+
类型:句柄
10599
可空:N
106-
意思:输入设置的内容
107-
参数.三:nLen
100+
意思:输入客户端网络句柄
101+
参数.三:lpszClientAddr
108102
In/Out:In
109-
类型:整数型
103+
类型:常量字符指针
110104
可空:N
111-
意思:输入要设置内容大小
105+
意思:绑定的客户端地址
112106
返回值
113107
类型:逻辑型
114108
意思:是否成功
115109
备注:
116110
*********************************************************************/
117-
bool CModuleSession_Socks::ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPVOID lParam, int nLen)
111+
bool CModuleSession_Socks::ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XNETHANDLE xhClient, LPCXSTR lpszClientAddr)
118112
{
119113
Session_IsErrorOccur = false;
120114

121-
if ((NULL == lpszClientID) || (NULL == lParam))
115+
if ((NULL == lpszClientID))
122116
{
123117
Session_IsErrorOccur = true;
124118
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_PARAMENT;
@@ -133,31 +127,8 @@ bool CModuleSession_Socks::ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPV
133127
st_Locker.unlock();
134128
return false;
135129
}
136-
//内存是否已经申请
137-
if (NULL == stl_MapIterator->second->lParam)
138-
{
139-
stl_MapIterator->second->lParam = malloc(nLen);
140-
if (NULL == stl_MapIterator->second->lParam)
141-
{
142-
Session_IsErrorOccur = true;
143-
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_MALLOC;
144-
st_Locker.unlock();
145-
return false;
146-
}
147-
}
148-
else
149-
{
150-
stl_MapIterator->second->lParam = realloc(stl_MapIterator->second->lParam, nLen);
151-
if (NULL == stl_MapIterator->second->lParam)
152-
{
153-
Session_IsErrorOccur = true;
154-
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_MALLOC;
155-
st_Locker.unlock();
156-
return false;
157-
}
158-
}
159-
stl_MapIterator->second->nCTMLen = nLen;
160-
memcpy(stl_MapIterator->second->lParam, lParam, nLen);
130+
stl_MapIterator->second->xhClient = xhClient;
131+
_tcsxcpy(stl_MapIterator->second->tszClientAddr, lpszClientAddr);
161132
st_Locker.unlock();
162133
return true;
163134
}
@@ -169,26 +140,21 @@ bool CModuleSession_Socks::ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPV
169140
类型:常量字符指针
170141
可空:N
171142
意思:输入要操作的客户端
172-
参数.二:lParam
143+
参数.二:pxhClient
173144
In/Out:Out
174-
类型:无类型指针
145+
类型:句柄
175146
可空:N
176-
意思:输出获取到的内容
177-
参数.三:pInt_Len
178-
In/Out:Out
179-
类型:整数型指针
180-
可空:Y
181-
意思:输出内容大小
147+
意思:输出客户端网络句柄
182148
返回值
183149
类型:逻辑型
184150
意思:是否成功
185151
备注:
186152
*********************************************************************/
187-
bool CModuleSession_Socks::ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XPVOID lParam, int* pInt_Len /* = NULL */)
153+
bool CModuleSession_Socks::ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XNETHANDLE *pxhClient)
188154
{
189155
Session_IsErrorOccur = false;
190156

191-
if ((NULL == lpszClientID) || (NULL == lParam))
157+
if ((NULL == lpszClientID))
192158
{
193159
Session_IsErrorOccur = true;
194160
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_PARAMENT;
@@ -203,65 +169,108 @@ bool CModuleSession_Socks::ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XPV
203169
st_Locker.unlock_shared();
204170
return false;
205171
}
206-
if (NULL == stl_MapIterator->second->lParam)
172+
*pxhClient = stl_MapIterator->second->xhClient;
173+
st_Locker.unlock_shared();
174+
return true;
175+
}
176+
/********************************************************************
177+
函数名称:ModuleSession_Socks_GetHandleForAddr
178+
函数功能:通过客户端地址获取句柄
179+
参数.一:lpszClientAddr
180+
In/Out:In
181+
类型:常量字符指针
182+
可空:N
183+
意思:输入要获取的客户端地址
184+
参数.二:pxhClient
185+
In/Out:Out
186+
类型:句柄
187+
可空:N
188+
意思:输出句柄
189+
返回值
190+
类型:逻辑型
191+
意思:是否成功
192+
备注:
193+
*********************************************************************/
194+
bool CModuleSession_Socks::ModuleSession_Socks_GetHandleForAddr(LPCXSTR lpszClientAddr, XNETHANDLE* pxhClient)
195+
{
196+
Session_IsErrorOccur = false;
197+
198+
if ((NULL == lpszClientAddr))
207199
{
208200
Session_IsErrorOccur = true;
209-
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_NOTSET;
210-
st_Locker.unlock_shared();
201+
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_PARAMENT;
211202
return false;
212203
}
213-
memcpy(lParam, stl_MapIterator->second->lParam, stl_MapIterator->second->nCTMLen);
214-
if (NULL != pInt_Len)
204+
bool bFound = false;
205+
206+
st_Locker.lock_shared();
207+
for (auto stl_MapIterator = stl_MapClients.begin(); stl_MapIterator != stl_MapClients.end(); stl_MapIterator++)
215208
{
216-
*pInt_Len = stl_MapIterator->second->nCTMLen;
209+
if (0 == _tcsxnicmp(lpszClientAddr, stl_MapIterator->second->tszClientAddr, _tcsxlen(lpszClientAddr)))
210+
{
211+
bFound = true;
212+
*pxhClient = stl_MapIterator->second->xhClient;
213+
break;
214+
}
217215
}
218-
219216
st_Locker.unlock_shared();
217+
218+
if (!bFound)
219+
{
220+
Session_IsErrorOccur = true;
221+
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_NOTFOUND;
222+
return false;
223+
}
220224
return true;
221225
}
222226
/********************************************************************
223-
函数名称:ModuleSession_Socks_GetList
224-
函数功能:获取所有自定义数据
225-
参数.一:xpppMem
226-
In/Out:Out
227-
类型:三级指针
228-
可空:N
229-
意思:输出获取到的列表
230-
参数.二:pInt_Count
231-
In/Out:Out
232-
类型:整数型指针
227+
函数名称:ModuleSession_Socks_GetAddrForHandle
228+
函数功能:通过客户端句柄来获得对应的IP地址
229+
参数.一:pxhClient
230+
In/Out:In
231+
类型:句柄
233232
可空:N
234-
意思:输出列表个数
235-
参数.三:nSize
233+
意思:输入句柄
234+
参数.二:lpszClientAddr
236235
In/Out:Out
237-
类型:整数型
236+
类型:字符指针
238237
可空:N
239-
意思:输入每个成员的大小
238+
意思:输出获取的客户端地址
240239
返回值
241240
类型:逻辑型
242241
意思:是否成功
243242
备注:
244243
*********************************************************************/
245-
bool CModuleSession_Socks::ModuleSession_Socks_GetList(XPPPMEM xpppMem, int* pInt_Count, int nSize)
244+
bool CModuleSession_Socks::ModuleSession_Socks_GetAddrForHandle(XNETHANDLE xhClient, XCHAR* ptszClientAddr)
246245
{
247246
Session_IsErrorOccur = false;
248247

249-
st_Locker.lock_shared();
250-
251-
*pInt_Count = stl_MapClients.size();
252-
BaseLib_Memory_Malloc(xpppMem, *pInt_Count, nSize);
248+
if ((NULL == ptszClientAddr))
249+
{
250+
Session_IsErrorOccur = true;
251+
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_PARAMENT;
252+
return false;
253+
}
254+
bool bFound = false;
253255

254-
unordered_map<xstring, RFCPROTOCOL_SOCKS5CLIENT*>::const_iterator stl_MapIterator = stl_MapClients.begin();
255-
for (int i = 0; stl_MapIterator != stl_MapClients.end(); stl_MapIterator++, i++)
256+
st_Locker.lock_shared();
257+
for (auto stl_MapIterator = stl_MapClients.begin(); stl_MapIterator != stl_MapClients.end(); stl_MapIterator++)
256258
{
257-
//是否设置有值
258-
if ((NULL != stl_MapIterator->second->lParam) && (stl_MapIterator->second->nCTMLen > 0))
259+
if (xhClient == stl_MapIterator->second->xhClient)
259260
{
260-
memcpy((*xpppMem)[i], stl_MapIterator->second->lParam, stl_MapIterator->second->nCTMLen);
261+
_tcsxcpy(ptszClientAddr, stl_MapIterator->second->tszClientAddr);
262+
bFound = true;
263+
break;
261264
}
262265
}
263266
st_Locker.unlock_shared();
264267

268+
if (!bFound)
269+
{
270+
Session_IsErrorOccur = true;
271+
Session_dwErrorCode = ERROR_MODULE_SESSION_SOCKS_NOTFOUND;
272+
return false;
273+
}
265274
return true;
266275
}
267276
/********************************************************************

XEngine_Source/XEngine_ModuleSession/ModuleSession_Socks/ModuleSession_Socks.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,8 @@
1616
typedef struct
1717
{
1818
XCHAR tszClientAddr[128]; //代理客户端地址
19-
XCHAR tszCMDBuffer[128]; //地址信息
20-
int nCMDLen; //CMD地址信息大小
21-
int nCTMLen; //自定义大小
19+
XNETHANDLE xhClient; //客户端句柄
2220
ENUM_PROXY_SESSION_SOCKS_STATUS enProxyStatus; //客户端状态
23-
XPVOID lParam;
2421
}RFCPROTOCOL_SOCKS5CLIENT, * LPRFCPROTOCOL_SOCKS5CLIENT;
2522

2623

@@ -32,9 +29,10 @@ class CModuleSession_Socks
3229
public:
3330
bool ModuleSession_Socks_Create(LPCXSTR lpszClientID);
3431
bool ModuleSession_Socks_Delete(LPCXSTR lpszClientID);
35-
bool ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XPVOID lParam, int nLen);
36-
bool ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XPVOID lParam, int* pInt_Len = NULL);
37-
bool ModuleSession_Socks_GetList(XPPPMEM xpppMem, int* pInt_Count, int nSize);
32+
bool ModuleSession_Socks_SetInfo(LPCXSTR lpszClientID, XNETHANDLE xhClient, LPCXSTR lpszClientAddr);
33+
bool ModuleSession_Socks_GetInfo(LPCXSTR lpszClientID, XNETHANDLE *pxhClient);
34+
bool ModuleSession_Socks_GetHandleForAddr(LPCXSTR lpszClientAddr, XNETHANDLE* pxhClient);
35+
bool ModuleSession_Socks_GetAddrForHandle(XNETHANDLE xhClient, XCHAR *ptszClientAddr);
3836
bool ModuleSession_Socks_GetStatus(LPCXSTR lpszClientID, ENUM_PROXY_SESSION_SOCKS_STATUS* penSocks);
3937
bool ModuleSession_Socks_SetStatus(LPCXSTR lpszClientID, ENUM_PROXY_SESSION_SOCKS_STATUS enStatus);
4038
bool ModuleSession_Socks_List(XCHAR*** ppptszClientList, int* pInt_ListCount);

0 commit comments

Comments
 (0)