@@ -48,6 +48,95 @@ bool MessageQueue_Http_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
4848 LPCXSTR lpszPostMethod = _X (" POST" );
4949 LPCXSTR lpszGetMethod = _X (" GET" );
5050
51+ if (st_ServiceCfg.st_XVerification .bEnable )
52+ {
53+ int nVType = 0 ;
54+ RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
55+
56+ st_HDRParam.nHttpCode = 401 ;
57+ st_HDRParam.bIsClose = true ;
58+ st_HDRParam.bAuth = true ;
59+ // 打包验证信息
60+ int nHDRLen = 0 ;
61+ XCHAR tszHDRBuffer[XPATH_MAX] = {};
62+ if (1 == st_ServiceCfg.st_XVerification .nVType )
63+ {
64+ Verification_HTTP_BasicServerPacket (tszHDRBuffer, &nHDRLen);
65+ }
66+ else
67+ {
68+ XCHAR tszNonceStr[64 ] = {};
69+ XCHAR tszOpaqueStr[64 ] = {};
70+ Verification_HTTP_DigestServerPacket (tszHDRBuffer, &nHDRLen, tszNonceStr, tszOpaqueStr);
71+ }
72+ // 后去验证方法
73+ if (!Verification_HTTP_GetType (pptszListHdr, nHdrCount, &nVType))
74+ {
75+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
76+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
77+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式:%d,错误:%lX" ), lpszClientAddr, st_ServiceCfg.st_XVerification .nVType , Verification_GetLastError ());
78+ return false ;
79+ }
80+ // 验证方式是否一致
81+ if (st_ServiceCfg.st_XVerification .nVType != nVType)
82+ {
83+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
84+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
85+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证方式错误,请求:%d,需求:%d" ), lpszClientAddr, nVType, st_ServiceCfg.st_XVerification .nVType );
86+ return false ;
87+ }
88+ bool bRet = false ;
89+ int nHTTPCode = 0 ;
90+ int nMSGLen = 0 ;
91+ XCLIENT_APIHTTP st_APIHttp = {};
92+
93+ XCHAR* ptszMSGBuffer = NULL ;
94+ if (!APIClient_Http_Request (_X (" GET" ), st_ServiceCfg.st_XVerification .tszAuthPass , NULL , &nHTTPCode, &ptszMSGBuffer, &nMSGLen, NULL , NULL , &st_APIHttp))
95+ {
96+ st_HDRParam.nHttpCode = 500 ;
97+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
98+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
99+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误码:%lX" ), lpszClientAddr, st_ServiceCfg.st_XVerification .tszAuthPass , APIClient_GetLastError ());
100+ return false ;
101+ }
102+ if (200 != nHTTPCode)
103+ {
104+ st_HDRParam.nHttpCode = 500 ;
105+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
106+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
107+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,GET请求验证服务:%s 失败,错误:%d" ), lpszClientAddr, st_ServiceCfg.st_XVerification .tszAuthPass , nHTTPCode);
108+ return false ;
109+ }
110+ XENGINE_PROTOCOL_USERINFO st_UserAuth = {};
111+ if (!ProtocolModule_Parse_Register (ptszMSGBuffer, nMsgLen, &st_UserAuth))
112+ {
113+ st_HDRParam.nHttpCode = 500 ;
114+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
115+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
116+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,返回内容:%s 错误,无法继续" ), lpszClientAddr, ptszMSGBuffer);
117+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
118+ return false ;
119+ }
120+ BaseLib_Memory_FreeCStyle ((XPPMEM)&ptszMSGBuffer);
121+
122+ if (1 == nVType)
123+ {
124+ bRet = Verification_HTTP_Basic (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pptszListHdr, nHdrCount);
125+ }
126+ else if (2 == nVType)
127+ {
128+ bRet = Verification_HTTP_Digest (st_UserAuth.tszUserName , st_UserAuth.tszUserPass , pSt_HTTPParam->tszHttpMethod , pptszListHdr, nHdrCount);
129+ }
130+
131+ if (!bRet)
132+ {
133+ HttpProtocol_Server_SendMsgEx (xhHTTPPacket, tszPKTBuffer, &nPKTLen, &st_HDRParam, NULL , 0 , tszHDRBuffer);
134+ NetCore_TCPXCore_SendEx (xhHTTPSocket, lpszClientAddr, tszPKTBuffer, nPKTLen);
135+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" HTTP客户端:%s,用户验证失败,验证处理错误,可能用户密码登信息不匹配,类型:%d" ), lpszClientAddr, nVType);
136+ return false ;
137+ }
138+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" HTTP客户端:%s,HTTP验证类型:%d 通过" ), lpszClientAddr, nVType);
139+ }
51140 int nUrlCount = 0 ;
52141 XCHAR** ppSt_ListUrl;
53142 HttpProtocol_ServerHelp_GetParament (pSt_HTTPParam->tszHttpUri , &ppSt_ListUrl, &nUrlCount);
0 commit comments