@@ -44,7 +44,7 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam)
4444 if (HttpProtocol_Server_GetMemoryEx (xhHTTPPacket, ppSst_ListAddr[i]->tszClientAddr , &ptszMsgBuffer, &nMsgLen, &st_HTTPReqparam, &pptszListHdr, &nHDRCount))
4545 {
4646 // 在另外一个函数里面处理数据
47- HTTPTask_TastPost_Handle (&st_HTTPReqparam, ppSst_ListAddr[i]->tszClientAddr , ptszMsgBuffer, nMsgLen, & pptszListHdr, nHDRCount);
47+ HTTPTask_TastPost_Handle (&st_HTTPReqparam, ppSst_ListAddr[i]->tszClientAddr , ptszMsgBuffer, nMsgLen, pptszListHdr, nHDRCount);
4848 // 释放内存
4949 BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMsgBuffer);
5050 BaseLib_Memory_Free ((XPPPMEM)&pptszListHdr, nHDRCount);
@@ -55,16 +55,13 @@ XHTHREAD XCALLBACK HTTPTask_TastPost_Thread(XPVOID lParam)
5555 }
5656 return 0 ;
5757}
58- bool HTTPTask_TastPost_Handle (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszRVBuffer, int nRVLen, XCHAR*** ppptszHDRList , int nHDRCount)
58+ bool HTTPTask_TastPost_Handle (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszRVBuffer, int nRVLen, XCHAR** pptszHDRList , int nHDRCount)
5959{
6060 int nMsgLen = 4096 ;
6161 LPCXSTR lpszMethodPost = _X (" POST" );
6262 LPCXSTR lpszMethodGet = _X (" GET" );
63- XCHAR tszMsgBuffer[4096 ];
64- RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam; // 发送给客户端的参数
65-
66- memset (tszMsgBuffer, ' \0 ' , sizeof (tszMsgBuffer));
67- memset (&st_HDRParam, ' \0 ' , sizeof (RFCCOMPONENTS_HTTP_HDRPARAM));
63+ XCHAR tszMsgBuffer[4096 ] = {};
64+ RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
6865
6966 st_HDRParam.nHttpCode = 200 ; // HTTP CODE码
7067 st_HDRParam.bIsClose = true ; // 收到回复后就关闭
@@ -89,7 +86,7 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
8986 if (nListCount < 1 )
9087 {
9188 // 是不是代理转发
92- if (HTTPTask_TaskPost_SLProxy (lpszClientAddr, tszGBKBuffer, ppptszHDRList , nHDRCount))
89+ if (HTTPTask_TaskPost_SLProxy (lpszClientAddr, tszGBKBuffer, &pptszHDRList , nHDRCount))
9390 {
9491 return true ;
9592 }
@@ -100,6 +97,111 @@ bool HTTPTask_TastPost_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
10097 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,发送的URL请求参数不正确:%s" ), lpszClientAddr, tszGBKBuffer);
10198 return false ;
10299 }
100+ // http验证
101+ if (st_ServiceConfig.st_XVerifcation .bEnable )
102+ {
103+ int nVType = 0 ;
104+ RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
105+
106+ st_HDRParam.nHttpCode = 401 ;
107+ st_HDRParam.bIsClose = true ;
108+ st_HDRParam.bAuth = true ;
109+ // 打包验证信息
110+ int nHDRLen = 0 ;
111+ XCHAR tszHDRBuffer[XPATH_MAX] = {};
112+ if (1 == st_ServiceConfig.st_XVerifcation .nVType )
113+ {
114+ Verification_HTTP_BasicServerPacket (tszHDRBuffer, &nHDRLen);
115+ }
116+ else
117+ {
118+ XCHAR tszNonceStr[64 ] = {};
119+ XCHAR tszOpaqueStr[64 ] = {};
120+ Verification_HTTP_DigestServerPacket (tszHDRBuffer, &nHDRLen, tszNonceStr, tszOpaqueStr);
121+ }
122+ // 后去验证方法
123+ if (!Verification_HTTP_GetType (pptszHDRList, nHDRCount, &nVType))
124+ {
125+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
126+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
127+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式:%d,错误:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .nVType , Verification_GetLastError ());
128+ return false ;
129+ }
130+ // 验证方式是否一致
131+ if (st_ServiceConfig.st_XVerifcation .nVType != nVType)
132+ {
133+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
134+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
135+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式错误,请求:%d,需求:%d" ), lpszClientAddr, nVType, st_ServiceConfig.st_XVerifcation .nVType );
136+ return false ;
137+ }
138+ bool bRet = false ;
139+
140+ if (_tcsxlen (st_ServiceConfig.st_XVerifcation .tszAPIAuth ) > 0 )
141+ {
142+ int nHTTPCode = 0 ;
143+ int nMSGLen = 0 ;
144+ XCLIENT_APIHTTP st_APIHttp = {};
145+ XCHAR* ptszMSGBuffer = NULL ;
146+ if (!APIClient_Http_Request (_X (" GET" ), st_ServiceConfig.st_XVerifcation .tszAPIAuth , NULL , &nHTTPCode, &ptszMSGBuffer, &nMSGLen, NULL , NULL , &st_APIHttp))
147+ {
148+ st_HDRParam.nHttpCode = 500 ;
149+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
150+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
151+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误码:%lX" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , APIClient_GetLastError ());
152+ return false ;
153+ }
154+ if (200 != nHTTPCode)
155+ {
156+ st_HDRParam.nHttpCode = 500 ;
157+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
158+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
159+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误:%d" ), lpszClientAddr, st_ServiceConfig.st_XVerifcation .tszAPIAuth , nHTTPCode);
160+ return false ;
161+ }
162+ XENGINE_PROTOCOL_USERAUTH st_UserAuth = {};
163+ if (!ModuleProtocol_Parse_Verifcation (ptszMSGBuffer, nMsgLen, st_UserAuth.tszUserName , st_UserAuth.tszUserPass ))
164+ {
165+ st_HDRParam.nHttpCode = 500 ;
166+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
167+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
168+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,返回内容:%s 错误,无法继续" ), lpszClientAddr, ptszMSGBuffer);
169+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
170+ return false ;
171+ }
172+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
173+
174+ if (1 == nVType)
175+ {
176+ bRet = Verification_HTTP_Basic (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pptszHDRList, nHDRCount);
177+ }
178+ else if (2 == nVType)
179+ {
180+ bRet = Verification_HTTP_Digest (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
181+ }
182+ }
183+ else
184+ {
185+ if (1 == nVType)
186+ {
187+ bRet = Verification_HTTP_Basic (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pptszHDRList, nHDRCount);
188+ }
189+ else if (2 == nVType)
190+ {
191+ bRet = Verification_HTTP_Digest (st_ServiceConfig.st_XVerifcation .tszUserName , st_ServiceConfig.st_XVerifcation .tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszHDRList, nHDRCount);
192+ }
193+ }
194+
195+ if (!bRet)
196+ {
197+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszMsgBuffer, &nMsgLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
198+ XEngine_Network_Send (lpszClientAddr, tszMsgBuffer, nMsgLen);
199+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证处理错误,可能用户密码登信息不匹配,类型:%d" ), lpszClientAddr, nVType);
200+ return false ;
201+ }
202+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" HTTP客户端:%s,HTTP验证类型:%d 通过" ), lpszClientAddr, nVType);
203+ }
204+
103205 XCHAR tszKey[XPATH_MAX];
104206 XCHAR tszValue[XPATH_MAX];
105207 LPCXSTR lpszFuncName = _X (" api" );
0 commit comments