Skip to content

Commit 7b5122b

Browse files
committed
modify:http parse buffer is stack not heap.
1 parent e05af35 commit 7b5122b

File tree

8 files changed

+39
-37
lines changed

8 files changed

+39
-37
lines changed

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.cpp

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ CProtocolModule_Parse::~CProtocolModule_Parse()
4040
意思:输出解析到的头协议
4141
参数.四:pptszMsgBuffer
4242
In/Out:Out
43-
类型:二级指针
43+
类型:字符指针
4444
可空:Y
45-
意思:输出消息内容,需要释放内存
45+
意思:输出消息内容
4646
参数.五:pInt_MsgLen
4747
In/Out:Out
4848
类型:整数型指针
@@ -53,7 +53,7 @@ CProtocolModule_Parse::~CProtocolModule_Parse()
5353
意思:是否成功
5454
备注:
5555
*********************************************************************/
56-
BOOL CProtocolModule_Parse::ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR** pptszMsgBuffer, int* pInt_MsgLen)
56+
BOOL CProtocolModule_Parse::ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR* ptszMsgBuffer, int* pInt_MsgLen)
5757
{
5858
Protocol_IsErrorOccur = FALSE;
5959

@@ -177,34 +177,25 @@ BOOL CProtocolModule_Parse::ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int
177177
}
178178

179179
int nPos = 0;
180-
*pptszMsgBuffer = (TCHAR*)malloc(*pInt_MsgLen);
181-
if (NULL == *pptszMsgBuffer)
182-
{
183-
Protocol_IsErrorOccur = TRUE;
184-
Protocol_dwErrorCode = ERROR_MQ_MODULE_PROTOCOL_MALLOC;
185-
return FALSE;
186-
}
187-
memset(*pptszMsgBuffer, '\0', *pInt_MsgLen);
188-
189180
if (!st_JsonRoot["st_MQProtocol"].isNull())
190181
{
191-
memcpy(*pptszMsgBuffer + nPos, &st_MQProtocol, sizeof(XENGINE_PROTOCOL_XMQ));
182+
memcpy(ptszMsgBuffer + nPos, &st_MQProtocol, sizeof(XENGINE_PROTOCOL_XMQ));
192183
nPos += sizeof(XENGINE_PROTOCOL_XMQ);
193184
}
194185
if (!st_JsonRoot["st_Auth"].isNull())
195186
{
196-
memcpy(*pptszMsgBuffer + nPos, &st_ProtocolAuth, sizeof(XENGINE_PROTOCOL_USERAUTH));
187+
memcpy(ptszMsgBuffer + nPos, &st_ProtocolAuth, sizeof(XENGINE_PROTOCOL_USERAUTH));
197188
nPos += sizeof(XENGINE_PROTOCOL_USERAUTH);
198189
}
199190
if (!st_JsonRoot["st_User"].isNull())
200191
{
201-
memcpy(*pptszMsgBuffer + nPos, &st_ProtocolInfo, sizeof(XENGINE_PROTOCOL_USERINFO));
192+
memcpy(ptszMsgBuffer + nPos, &st_ProtocolInfo, sizeof(XENGINE_PROTOCOL_USERINFO));
202193
nPos += sizeof(XENGINE_PROTOCOL_USERINFO);
203194
}
204195
if (!st_JsonRoot["st_Payload"].isNull())
205196
{
206197
Json::Value st_JsonPayLoad = st_JsonRoot["st_Payload"];
207-
memcpy(*pptszMsgBuffer + nPos, st_JsonPayLoad["tszPayData"].asCString(), st_JsonPayLoad["nPayLen"].asInt());
198+
memcpy(ptszMsgBuffer + nPos, st_JsonPayLoad["tszPayData"].asCString(), st_JsonPayLoad["nPayLen"].asInt());
208199
}
209200
return TRUE;
210201
}

XEngine_Source/MQCore_ProtocolModule/ProtocolModule_Parse/ProtocolModule_Parse.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CProtocolModule_Parse
1717
CProtocolModule_Parse();
1818
~CProtocolModule_Parse();
1919
public:
20-
BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR** pptszMsgBuffer, int* pInt_MsgLen);
20+
BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR* ptszMsgBuffer, int* pInt_MsgLen);
2121
protected:
2222
private:
2323
};

XEngine_Source/MQCore_ProtocolModule/Protocol_Define.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@ extern "C" BOOL ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO* pSt_Pr
174174
类型:数据结构指针
175175
可空:Y
176176
意思:输出解析到的头协议
177-
参数.四:pptszMsgBuffer
177+
参数.四:ptszMsgBuffer
178178
In/Out:Out
179-
类型:二级指针
179+
类型:字符指针
180180
可空:Y
181-
意思:输出消息内容,需要释放内存
181+
意思:输出消息内容
182182
参数.五:pInt_MsgLen
183183
In/Out:Out
184184
类型:整数型指针
@@ -189,4 +189,4 @@ extern "C" BOOL ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO* pSt_Pr
189189
意思:是否成功
190190
备注:
191191
*********************************************************************/
192-
extern "C" BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr = NULL, TCHAR * *pptszMsgBuffer = NULL, int* pInt_MsgLen = NULL);
192+
extern "C" BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr = NULL, TCHAR *ptszMsgBuffer = NULL, int* pInt_MsgLen = NULL);

XEngine_Source/MQCore_ProtocolModule/pch.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ extern "C" BOOL ProtocolModule_Packet_PassUser(XENGINE_PROTOCOL_USERINFO * pSt_P
5050
/************************************************************************/
5151
/* 解析类函数 */
5252
/************************************************************************/
53-
extern "C" BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, TCHAR * *pptszMsgBuffer, int* pInt_MsgLen)
53+
extern "C" BOOL ProtocolModule_Parse_Http(LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, TCHAR *ptszMsgBuffer, int* pInt_MsgLen)
5454
{
55-
return m_ProtocolParse.ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, pSt_ProtocolHdr, pptszMsgBuffer, pInt_MsgLen);
55+
return m_ProtocolParse.ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, pSt_ProtocolHdr, ptszMsgBuffer, pInt_MsgLen);
5656
}

XEngine_Source/XEngine_MQServiceApp/MQService_HttpTask.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,14 @@ BOOL MessageQueue_Http_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCTST
5050
if (0 == _tcsnicmp(lpszMethod, pSt_HTTPParam->tszHttpMethod, _tcslen(lpszMethod)))
5151
{
5252
int nPLen = 0;
53-
TCHAR* ptszMsgBuffer = NULL;
53+
TCHAR tszMsgBuffer[4096];
5454
XENGINE_PROTOCOLHDR st_ProtocolHdr;
55+
56+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
5557
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
5658

57-
ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, &st_ProtocolHdr, &ptszMsgBuffer, &nPLen);
58-
MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, ptszMsgBuffer, nPLen, XENGINE_MQAPP_NETTYPE_HTTP);
59-
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
59+
ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, &st_ProtocolHdr, tszMsgBuffer, &nPLen);
60+
MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, tszMsgBuffer, nPLen, XENGINE_MQAPP_NETTYPE_HTTP);
6061
}
6162
else
6263
{

XEngine_Source/XEngine_MQServiceApp/MQService_Net.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ void XEngine_MQXService_Close(LPCTSTR lpszClientAddr, int nIPProto, BOOL bHeart)
9090
else if (XENGINE_MQAPP_NETTYPE_WEBSOCKET == nIPProto)
9191
{
9292
RfcComponents_WSPacket_DeleteEx(xhWSPacket, lpszClientAddr);
93-
NetCore_TCPXCore_CloseForClientEx(xhWSSocket, lpszClientAddr);;
93+
NetCore_TCPXCore_CloseForClientEx(xhWSSocket, lpszClientAddr);
9494
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Websocket客户端离开,Websocket客户端地址:%s"), lpszClientAddr);
9595
}
9696
else
9797
{
9898
RfcComponents_HttpServer_CloseClinetEx(xhHTTPPacket, lpszClientAddr);
99-
NetCore_TCPXCore_CloseForClientEx(xhHTTPSocket, lpszClientAddr);;
99+
NetCore_TCPXCore_CloseForClientEx(xhHTTPSocket, lpszClientAddr);
100100
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("HTTP客户端离开,HTTP客户端地址:%s"), lpszClientAddr);
101101
}
102102
XENGINE_PROTOCOL_USERINFO st_UserInfo;

XEngine_Source/XEngine_MQServiceApp/MQService_TCPTask.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ BOOL MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCTSTR lpszC
108108
pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REPUSERLOG;
109109
if (_tcslen(st_ServiceCfg.st_XPass.tszPassLogin) > 0)
110110
{
111-
int nHTTPCode = 0;
112111
int nRVLen = 0;
113-
TCHAR* ptszRVBuffer = NULL;
112+
int nHTTPCode = 0;
114113
TCHAR* ptszSDBuffer = NULL;
115114
APIHELP_HTTPPARAMENT st_HTTPParament;
115+
116116
memset(&st_HTTPParament, '\0', sizeof(APIHELP_HTTPPARAMENT));
117117

118118
st_HTTPParament.nTimeConnect = 2;
@@ -127,8 +127,8 @@ BOOL MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCTSTR lpszC
127127
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("%s客户端:%s,请求远程验证失败,错误:%lX,HTTPCode:%d"), lpszClientType, lpszClientAddr, APIHelp_GetLastError(), nHTTPCode);
128128
return FALSE;
129129
}
130-
ProtocolModule_Parse_Http(ptszSDBuffer, nSDLen, NULL, &ptszRVBuffer, &nRVLen);
131-
memcpy(&st_UserInfo, ptszRVBuffer, nRVLen);
130+
ProtocolModule_Parse_Http(ptszSDBuffer, nSDLen, NULL, (TCHAR*)&st_UserInfo, &nRVLen);
131+
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszSDBuffer);
132132
}
133133
else
134134
{
@@ -160,6 +160,15 @@ BOOL MessageQueue_TCP_Handle(XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, LPCTSTR lpszC
160160
XEngine_MQXService_Send(lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
161161
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("%s客户端:%s,请求验证成功,用户名:%s,密码:%s"), lpszClientType, lpszClientAddr, st_ProtocolAuth.tszUserName, st_ProtocolAuth.tszUserPass);
162162
}
163+
else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSEROUT == pSt_ProtocolHdr->unOperatorCode)
164+
{
165+
XENGINE_PROTOCOL_USERAUTH st_ProtocolAuth;
166+
memset(&st_ProtocolAuth, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH));
167+
168+
memcpy(&st_ProtocolAuth, lpszMsgBuffer, sizeof(XENGINE_PROTOCOL_USERAUTH));
169+
170+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("%s客户端:%s,用户登出成功,用户名:%s,密码:%s"), lpszClientType, lpszClientAddr, st_ProtocolAuth.tszUserName, st_ProtocolAuth.tszUserPass);
171+
}
163172
else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_MQ_REQUSERREG == pSt_ProtocolHdr->unOperatorCode)
164173
{
165174
XENGINE_PROTOCOL_USERINFO st_UserInfo;

XEngine_Source/XEngine_MQServiceApp/MQService_WSTask.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ BOOL MessageQueue_Websocket_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer
4040
if (ENUM_XENGINE_RFCOMPONENTS_WEBSOCKET_OPCODE_TEXT == enOPCode)
4141
{
4242
int nPLen = 0;
43-
TCHAR* ptszMsgBuffer = NULL;
43+
TCHAR tszMsgBuffer[4096];
4444
XENGINE_PROTOCOLHDR st_ProtocolHdr;
45+
46+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
4547
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
4648

47-
ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, &st_ProtocolHdr, &ptszMsgBuffer, &nPLen);
48-
MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, ptszMsgBuffer, nPLen, XENGINE_MQAPP_NETTYPE_WEBSOCKET);
49-
BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer);
49+
ProtocolModule_Parse_Http(lpszMsgBuffer, nMsgLen, &st_ProtocolHdr, tszMsgBuffer, &nPLen);
50+
MessageQueue_TCP_Handle(&st_ProtocolHdr, lpszClientAddr, tszMsgBuffer, nPLen, XENGINE_MQAPP_NETTYPE_WEBSOCKET);
5051
}
5152
else
5253
{

0 commit comments

Comments
 (0)