@@ -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/* *******************************************************************
0 commit comments