Skip to content

Commit bcd7cdb

Browse files
committed
added:http restful api that http api verification support
1 parent 4e70051 commit bcd7cdb

File tree

6 files changed

+123
-5
lines changed

6 files changed

+123
-5
lines changed

XEngine_Source/MQCore_ProtocolModule/MQCore_ProtocolModule.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ EXPORTS
77
ProtocolModule_Packet_MQNumber
88
ProtocolModule_Packet_PassAuth
99
ProtocolModule_Packet_PassUser
10+
ProtocolModule_Packet_PassHttp
1011
ProtocolModule_Packet_Http
1112
ProtocolModule_Packet_UserList
1213
ProtocolModule_Packet_TopicList

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,68 @@ bool CProtocolModule_Packet::ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USE
280280
return true;
281281
}
282282
/********************************************************************
283+
函数名称:ProtocolModule_Packet_PassHttp
284+
函数功能:HTTP请求验证打包函数
285+
参数.一:ptszMsgBuffer
286+
In/Out:Out
287+
类型:字符指针
288+
可空:N
289+
意思:输出打好包的缓冲区
290+
参数.二:pInt_MsgLen
291+
In/Out:Out
292+
类型:整数型指针
293+
可空:N
294+
意思:输出缓冲区大小
295+
参数.三:lpszToken
296+
In/Out:In
297+
类型:常量字符指针
298+
可空:N
299+
意思:输入用户请求的TOKEN
300+
参数.四:lpszAPIUser
301+
In/Out:In
302+
类型:常量字符指针
303+
可空:N
304+
意思:输入用户请求的API接口
305+
参数.五:lpszURIApi
306+
In/Out:In
307+
类型:常量字符指针
308+
可空:N
309+
意思:输入用户请求的完整URL地址
310+
返回值
311+
类型:逻辑型
312+
意思:是否成功
313+
备注:
314+
*********************************************************************/
315+
bool CProtocolModule_Packet::ProtocolModule_Packet_PassHttp(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszToken, LPCXSTR lpszAPIUser, LPCXSTR lpszURIApi)
316+
{
317+
Protocol_IsErrorOccur = false;
318+
319+
if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen))
320+
{
321+
Protocol_IsErrorOccur = true;
322+
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_PARAMENT;
323+
return false;
324+
}
325+
Json::Value st_JsonRoot;
326+
Json::Value st_JsonAuth;
327+
Json::StreamWriterBuilder st_JsonBuilder;
328+
329+
st_JsonAuth["lpszToken"] = lpszToken;
330+
st_JsonAuth["lpszAPIUser"] = lpszAPIUser;
331+
st_JsonAuth["lpszURIApi"] = lpszURIApi;
332+
333+
st_JsonRoot["unOperatorType"] = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_XMQ;
334+
st_JsonRoot["wReserve"] = 0;
335+
st_JsonRoot["byVersion"] = 2;
336+
st_JsonRoot["st_Auth"] = st_JsonAuth;
337+
338+
st_JsonBuilder["emitUTF8"] = true;
339+
340+
*pInt_MsgLen = Json::writeString(st_JsonBuilder, st_JsonRoot).length();
341+
memcpy(ptszMsgBuffer, Json::writeString(st_JsonBuilder, st_JsonRoot).c_str(), *pInt_MsgLen);
342+
return true;
343+
}
344+
/********************************************************************
283345
函数名称:ProtocolModule_Packet_Http
284346
函数功能:HTTP封包类
285347
参数.一:pSt_ProtocolHdr

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Packet/ProtocolModule_Packet.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class CProtocolModule_Packet
2929
bool ProtocolModule_Packet_MQNumber(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XENGINE_MQNUMBER* pSt_MQNumber, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nNetType);
3030
bool ProtocolModule_Packet_PassAuth(XENGINE_PROTOCOL_USERAUTH* pSt_ProtocolAuth, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode);
3131
bool ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO* pSt_ProtocolUser, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode);
32+
bool ProtocolModule_Packet_PassHttp(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszToken, LPCXSTR lpszAPIUser, LPCXSTR lpszURIApi);
3233
bool ProtocolModule_Packet_Http(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode = 0, LPCXSTR lpszMsgBuffer = NULL);
3334
bool ProtocolModule_Packet_UserList(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_PROTOCOL_USERINFO*** pppSt_UserInfo, int nListCount);
3435
bool ProtocolModule_Packet_TopicList(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XCHAR*** pppszTableName, int nListCount);

XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,40 @@ extern "C" bool ProtocolModule_Packet_PassAuth(XENGINE_PROTOCOL_USERAUTH* pSt_Pr
154154
*********************************************************************/
155155
extern "C" bool ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO* pSt_ProtocolUser, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, int nCode);
156156
/********************************************************************
157+
函数名称:ProtocolModule_Packet_PassHttp
158+
函数功能:HTTP请求验证打包函数
159+
参数.一:ptszMsgBuffer
160+
In/Out:Out
161+
类型:字符指针
162+
可空:N
163+
意思:输出打好包的缓冲区
164+
参数.二:pInt_MsgLen
165+
In/Out:Out
166+
类型:整数型指针
167+
可空:N
168+
意思:输出缓冲区大小
169+
参数.三:lpszToken
170+
In/Out:In
171+
类型:常量字符指针
172+
可空:N
173+
意思:输入用户请求的TOKEN
174+
参数.四:lpszAPIUser
175+
In/Out:In
176+
类型:常量字符指针
177+
可空:N
178+
意思:输入用户请求的API接口
179+
参数.五:lpszURIApi
180+
In/Out:In
181+
类型:常量字符指针
182+
可空:N
183+
意思:输入用户请求的完整URL地址
184+
返回值
185+
类型:逻辑型
186+
意思:是否成功
187+
备注:
188+
*********************************************************************/
189+
extern "C" bool ProtocolModule_Packet_PassHttp(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszToken, LPCXSTR lpszAPIUser, LPCXSTR lpszURIApi);
190+
/********************************************************************
157191
函数名称:ProtocolModule_Packet_Http
158192
函数功能:HTTP封包类
159193
参数.一:pSt_ProtocolHdr

XEngine_Source/MQCore_ProtocolModule/pch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ extern "C" bool ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO * pSt_P
4747
{
4848
return m_ProtocolPacket.ProtocolModule_Packet_PassUser(pSt_ProtocolUser, ptszMsgBuffer, pInt_MsgLen, nCode);
4949
}
50+
extern "C" bool ProtocolModule_Packet_PassHttp(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, LPCXSTR lpszToken, LPCXSTR lpszAPIUser, LPCXSTR lpszURIApi)
51+
{
52+
return m_ProtocolPacket.ProtocolModule_Packet_PassHttp(ptszMsgBuffer, pInt_MsgLen, lpszToken, lpszAPIUser, lpszURIApi);
53+
}
5054
extern "C" bool ProtocolModule_Packet_Http(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, int nCode, LPCXSTR lpszMsgBuffer)
5155
{
5256
return m_ProtocolPacket.ProtocolModule_Packet_Http(ptszMsgBuffer, pInt_MsgLen, nCode, lpszMsgBuffer);

XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,28 @@ bool MessageQueue_Http_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXST
7272
{
7373
//http://127.0.0.1:5202/api?function=user&auth=XENGINE_MQPasskey
7474
BaseLib_String_GetKeyValue(ppSt_ListUrl[1], _X("="), tszKey, tszValue);
75-
if (0 != _tcsxncmp(st_ServiceCfg.st_XAuthorize.tszToken, tszValue, _tcsxlen(st_ServiceCfg.st_XAuthorize.tszToken)))
75+
if (_tcsxlen(st_ServiceCfg.st_XAuthorize.tszHTTPPass) > 0)
7676
{
77-
ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "auth key is incorrent");
78-
XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP);
79-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,验证失败:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
80-
return false;
77+
int nHTTPCode = 0;
78+
ProtocolModule_Packet_PassHttp(tszPKTBuffer, &nPKTLen, pptszListHdr[1], pptszListHdr[0], pSt_HTTPParam->tszHttpMethod);
79+
APIClient_Http_Request("POST", st_ServiceCfg.st_XAuthorize.tszHTTPPass, tszPKTBuffer, &nHTTPCode);
80+
if (200 != nHTTPCode)
81+
{
82+
ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "auth key is incorrent");
83+
XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP);
84+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,验证失败:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
85+
return false;
86+
}
87+
}
88+
else
89+
{
90+
if (0 != _tcsxncmp(st_ServiceCfg.st_XAuthorize.tszToken, tszValue, _tcsxlen(st_ServiceCfg.st_XAuthorize.tszToken)))
91+
{
92+
ProtocolModule_Packet_Http(tszPKTBuffer, &nPKTLen, ERROR_XENGINE_MESSAGE_HTTP_AUTHORIZE, "auth key is incorrent");
93+
XEngine_MQXService_Send(lpszClientAddr, tszPKTBuffer, nPKTLen, XENGINE_MQAPP_NETTYPE_HTTP);
94+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求HTTP管理接口失败,验证失败:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpUri);
95+
return false;
96+
}
8197
}
8298
nMethodPos++;
8399
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求HTTP管理接口验证成功,验证TOKEN:%s"), lpszClientAddr, ppSt_ListUrl[1]);

0 commit comments

Comments
 (0)