18,356
社区成员
发帖
与我相关
我的任务
分享
case UNFRAME_STATE_INFO_ENUM:
{
// 获取消息体还未接收的长度
UINT32 unLeftLen = OM_GET_RX_LEFT_LEN;
// 消息存放缓冲区已经有的内容长度
UINT32 unUsedLen = OM_GET_MBUF_USEDLEN;
if ( unTempDataLen > unLeftLen )
{
// 表明是条完整消息
PRINT_LOG("domsg","unTempDataLen > unLeftLen"," Line:%ld" , __LINE__);
if ( 0x9F == pTempData[unLeftLen + 1] )
{
PRINT_LOG("domsg","0x9F == pTempData[unLeftLen + 1]"," Line:%ld" , __LINE__);
memcpy( pMsgBuf + unUsedLen, pTempData, unLeftLen );
// 一条完整的消息已经剥离完成,调用或者发送给上层接口处理
// pMsgBuf对应的内存也要到上层去释放,避免重复的copy操作
/*if (NULL != m_pMsgReport)
{
m_pMsgReport->OMTProbeMsgProcess( (char*)pMsgBuf );
}*/
if (NULL != m_pUe)
{
PRINT_LOG("domsg","PostMsgToUE"," Line:%ld" , __LINE__);
m_pUe->PostMsgToUE(pMsgBuf);
}
// 清空解帧结构变量,准备解一条新的消息
CLEAR_UNFRAME_STATE_ST;
ucUnFrameState = UNFRAME_STATE_HEAD_ENUM;
// 调整接收缓冲区的指针以及剩余内容的长度
pTempData += unLeftLen;
unTempDataLen -= unLeftLen;
}
// 消息有问题
else
{
PRINT_LOG("domsg","消息有问题"," Line:%ld" , __LINE__);
// 重新一块内存,简化处理
pTempCvBuff = (UINT8*) malloc( unTempDataLen + unUsedLen);
if ( !pTempCvBuff )
{
return FALSE;
}
// 初始化分配的内存
memset( pTempCvBuff, 0, unTempDataLen + unUsedLen );
if ( pMsgBuf )
{
memcpy( pTempCvBuff, pMsgBuf, unUsedLen );
memcpy( pTempCvBuff + unUsedLen, pTempData, unTempDataLen );
OM_FREE_RX_MBUFF;
}
// 清空解帧结构变量,准备解一条新的消息
CLEAR_UNFRAME_STATE_ST;
ucUnFrameState = UNFRAME_STATE_HEAD_ENUM;
pTempData = pTempCvBuff;
unTempDataLen += unUsedLen;
}
}
// socket缓冲区中的最后一条消息
else if ( unTempDataLen == unLeftLen )
{