//查询外部域列表 IVS_INT32 CDomainRouteMgr::GetExDomainList(const IVS_CHAR* pQueryInfo,IVS_CHAR** pRspXml) { CHECK_POINTER(m_pUserMgr, IVS_OPERATE_MEMORY_ERROR); if (NULL == pQueryInfo) { BP_RUN_LOG_ERR(IVS_OPERATE_MEMORY_ERROR, "Get ExDomain List", "Query Info is NULL"); return IVS_FAIL; } // 获取本域SMU连接 std::string strSMULinkID; IVS_INT32 iGetLinkRet = m_pUserMgr->GetLocalDomainLinkID(NET_ELE_SMU_NSS, strSMULinkID); if (IVS_SUCCEED != iGetLinkRet) { BP_RUN_LOG_ERR(iGetLinkRet, "Get LocalDomainLinkID failed", "NA"); return iGetLinkRet; } //创建要发送的CMD,拼装了NSS消息头 CCmd* pCmd = CNSSOperator::instance().BuildSMUCmd(NSS_GET_EXDOMAIN_LIST_REQ, pQueryInfo,strSMULinkID); CHECK_POINTER(pCmd, IVS_OPERATE_MEMORY_ERROR); //发送消息 IVS_INT32 iRet = IVS_FAIL; CCmd *pCmdRsp = CNSSOperator::instance().SendSyncCmd(pCmd); CHECK_POINTER(pCmdRsp, IVS_NET_RECV_TIMEOUT); *pRspXml = CNSSOperator::instance().ParseCmd2XML(pCmdRsp, iRet); HW_DELETE(pCmdRsp); return iRet; }//lint !e1762
IVS_INT32 CXmlProcess::GetCommBuildRet( CXml &xml, NSS_MSG_TYPE_E msgType, IVS_INT32 iType, const std::string& strLinkID) { IVS_UINT32 xmlLen = 0; const IVS_CHAR* pReq = xml.GetXMLStream(xmlLen); CHECK_POINTER(pReq, IVS_OPERATE_MEMORY_ERROR); BP_RUN_LOG_INF("COCXXmlProcess::GetCommBuildRet", "send XML = %s", pReq); //创建要发送的CMD,拼装了NSS消息头 CCmd* pCmd = CNSSOperator::instance().BuildSMUCmd(msgType, pReq, strLinkID); CHECK_POINTER(pCmd, IVS_SDK_RET_BP_CMD_REQ_INVALID); //发送消息 CCmd *pCmdRsp = CNSSOperator::instance().SendSyncCmd(pCmd); CHECK_POINTER(pCmdRsp, IVS_NET_RECV_TIMEOUT); //返回响应消息 IVS_INT32 iRet = IVS_SUCCEED; const IVS_CHAR* pRsp = NULL; if (BUILDRET == iType) { iRet = CNSSOperator::instance().ParseCmd2NSS(pCmdRsp); } else { pRsp = CNSSOperator::instance().ParseCmd2XML(pCmdRsp, iRet); } BP_RUN_LOG_INF("GetCommBuildRet", "revice XML = %s", pRsp); HW_DELETE(pCmdRsp); if (BUILSTRING == iType) { if (NULL == pRsp) { BP_RUN_LOG_ERR(iRet,"NULL == pRsp", "iRet = %d", iRet); return iRet; } if(iRet == IVS_SUCCEED) { iRet = IVS_XML_INVALID; xml.RemoveElem(); if(xml.Parse(pRsp)) { iRet = IVS_SUCCEED; } IVS_DELETE(pRsp, MUILI); } } BP_RUN_LOG_INF("GetCommBuildRet", "iType = %d,iRet = %d", iType, iRet); return iRet; }
int CNSSOperator::ConfCmd(CCmd* pCmd,unsigned short iReqID,const char* pData, const std::string& strTransID)const { CHECK_POINTER(pCmd, IVS_FAIL); pCmd->SetTransID(strTransID);//lint !e613 // 构造函数中构造了NSS消息头,seq id暂时修改为0 CNssXMLMsg nssXML(iReqID, 0, strTransID.c_str(), 0); //lint !e119 无此问题 // 将ansi转成utf-8 char* pDataUTF8 = CToolsHelp::ANSIToUTF8(pData); if (NULL == pDataUTF8) { BP_RUN_LOG_ERR(IVS_FAIL,"ansi to utf8 failed", "NA"); HW_DELETE(pCmd); return IVS_FAIL; } nssXML.SetXML(pDataUTF8, strlen(pDataUTF8)); // 拷贝了内存 // 删除数据 free(pDataUTF8); pDataUTF8 = NULL; // 定义ACE的消息缓冲,这个在cmd里面去释放,这里不释放 ACE_Message_Block* pMsgBlock = new ACE_Message_Block; //lint !e429 // 内部申请了内存 uint32_t iRet = nssXML.encode(pMsgBlock); if (NssRet_Succeed != iRet) { BP_RUN_LOG_ERR(IVS_FAIL,"encode block failed", "NA"); HW_DELETE(pCmd); return IVS_FAIL;//lint !e429 } // 设置数据到CMD,数据应该由CMD统一释放掉 pCmd->SetMsgBlock(pMsgBlock);//lint !e613 //return pCmd;//lint !e429 return IVS_SUCCEED; }
// 对xml添加一个loginID,并发送到SMU IVS_INT32 CNSSOperator::AddLoginIdAndSendCmd(unsigned short iReqID, const IVS_CHAR* pReqXml) const { CHECK_POINTER(pReqXml, IVS_OPERATE_MEMORY_ERROR); BP_RUN_LOG_INF("Add login id and send cmd", "send xml = %s", pReqXml); CCmd* pCmd = CNSSOperator::instance().BuildSMUCmd(iReqID, pReqXml); CHECK_POINTER(pCmd, IVS_OPERATE_MEMORY_ERROR); // 同步发送消息 CCmd *pCmdRsp = CNSSOperator::instance().SendSyncCmd(pCmd); CHECK_POINTER(pCmdRsp, IVS_NET_RECV_TIMEOUT); IVS_INT32 iRet = CNSSOperator::instance().ParseCmd2NSS(pCmdRsp); BP_RUN_LOG_INF("send cmd", "iRet= %d", iRet); HW_DELETE(pCmdRsp); return iRet; }
CPs2EsProcessor::~CPs2EsProcessor() { try { ReleasePktList(); } catch(...) { } if (NULL != m_pRtpFrameCache) { HW_DELETE_A(m_pRtpFrameCache); m_pWritePos = NULL; } if (NULL != m_pHstPESParse) { try { (void)m_pHstPESParse->Delete(); } catch(...) { } try { HW_DELETE(m_pHstPESParse); } catch(...) { m_pHstPESParse = NULL; } } try { m_pExtendHeader->release(); m_pExtendHeader = NULL; } catch(...) { } m_pWritePos = NULL; }
IVS_INT32 CReportMgr::SendQueryCmd(const IVS_CHAR* pReqXml, IVS_CHAR** pRspXml, IVS_INT32 iMsgType, IVS_INT32 iTimeOut) { IVS_DEBUG_TRACE(""); CHECK_POINTER(pReqXml, IVS_OPERATE_MEMORY_ERROR); CHECK_POINTER(m_UserMgr, IVS_OPERATE_MEMORY_ERROR); IVS_INT32 iRet = IVS_FAIL; std::string strLocalDomainLink; iRet = m_UserMgr->GetLocalDomainLinkID(NET_ELE_OMU_NSS, strLocalDomainLink); if (IVS_SUCCEED != iRet) { BP_RUN_LOG_ERR(iRet, "Send Query Cmd", "Get Local Domain OMU Link Failed"); return iRet; } CCmd *pCmd = CNSSOperator::instance().BuildOMUCmd(iMsgType, pReqXml, strLocalDomainLink); CHECK_POINTER(pCmd, IVS_OPERATE_MEMORY_ERROR); CCmd* pRspCmd =NULL; if (0 < iTimeOut) { // 1表示不采用默认的超时时间,即用iTimeOut pRspCmd = CNSSOperator::instance().SendSyncCmd(pCmd, (IVS_UINT32)iTimeOut, 1); } else { pRspCmd = CNSSOperator::instance().SendSyncCmd(pCmd); } if (NULL == pRspCmd) { BP_RUN_LOG_ERR(IVS_NET_RECV_TIMEOUT, "Send Query Cmd", "pRspCmd is NULL"); return IVS_NET_RECV_TIMEOUT; } iRet = IVS_SUCCEED; *pRspXml = CNSSOperator::instance().ParseCmd2XML(pRspCmd, iRet); HW_DELETE(pRspCmd); return iRet; }//lint !e1762
IVS_INT32 CDomainRouteMgr::SendCmdAndGetInfo(CXml& xmlRsp) const { IVS_INT32 iRet = IVS_FAIL; CHECK_POINTER(m_pUserMgr,IVS_OPERATE_MEMORY_ERROR); // 获取本域SMU连接 std::string strSMULinkID; IVS_INT32 iGetLinkRet = m_pUserMgr->GetLocalDomainLinkID(NET_ELE_SMU_NSS, strSMULinkID); if (IVS_SUCCEED != iGetLinkRet) { BP_RUN_LOG_ERR(iGetLinkRet, "Get LocalDomainLinkID failed", "NA"); return iGetLinkRet; } //创建要发送的CMD,拼装了NSS消息头 CCmd* pCmd = CNSSOperator::instance().BuildSMUCmd(NSS_GET_DOMAIN_ROUTE_REQ, NULL, strSMULinkID); CHECK_POINTER(pCmd, IVS_OPERATE_MEMORY_ERROR); //发送消息 CCmd *pCmdRsp = CNSSOperator::instance().SendSyncCmd(pCmd); CHECK_POINTER(pCmdRsp, IVS_NET_RECV_TIMEOUT); const IVS_CHAR* pRsp = CNSSOperator::instance().ParseCmd2XML(pCmdRsp, iRet); HW_DELETE(pCmdRsp); CHECK_POINTER(pRsp, iRet); if (IVS_SUCCEED != iRet) { BP_RUN_LOG_INF("Send Command get return value", " Error"); IVS_DELETE(pRsp, MUILI); //lint !e605 return IVS_FAIL; } iRet = IVS_XML_INVALID; BP_RUN_LOG_INF("Get domain route ", "pRsp:%s", pRsp); if (xmlRsp.Parse(pRsp)) { iRet = IVS_SUCCEED; } IVS_DELETE(pRsp, MUILI); //lint !e605 return iRet; }
IVS_INT32 CDomainRouteMgr::GetShareCatalogList(const IVS_CHAR* pQueryInfo, IVS_CHAR** pRspXml) { CHECK_POINTER(m_pUserMgr, IVS_OPERATE_MEMORY_ERROR); if (NULL == pQueryInfo) { BP_RUN_LOG_ERR(IVS_FAIL, "Get Share Cata log List", "Query Info is NULL"); return IVS_FAIL; } // 获取本域SMU连接 std::string strSMULinkID; IVS_INT32 iGetLinkRet = m_pUserMgr->GetLocalDomainLinkID(NET_ELE_SMU_NSS, strSMULinkID); if (IVS_SUCCEED != iGetLinkRet) { BP_RUN_LOG_ERR(iGetLinkRet, "Get LocalDomainLinkID failed", "NA"); return iGetLinkRet; } CCmd* pCmd = CNSSOperator::instance().BuildSMUCmd(NSS_GET_SHARE_CATALOG_LIST_REQ, pQueryInfo, strSMULinkID); CHECK_POINTER(pCmd, IVS_OPERATE_MEMORY_ERROR); //发送消息 IVS_INT32 iRet = IVS_FAIL; CCmd *pCmdRsp = CNSSOperator::instance().SendSyncCmd(pCmd); CHECK_POINTER(pCmdRsp, IVS_NET_RECV_TIMEOUT); const char* pBefore = CNSSOperator::instance().ParseCmd2XML(pCmdRsp, iRet); if (IVS_SUCCEED != iRet || NULL == pBefore) { HW_DELETE(pCmdRsp); BP_RUN_LOG_ERR(iRet, "Share Cata log list", "XML illegal "); return iRet; } HW_DELETE(pCmdRsp); std::string strBefore = pBefore; IVS_DELETE(pBefore, MUILI); //std::string strBefore("<Content><ShareDevList><ShareDevInfo><OriginDevCode>123456</OriginDevCode><OriginDomainCode>0123456789</OriginDomainCode><LocalDevCode>0123#001</LocalDevCode></ShareDevInfo></ShareDevList></Content>"); //std::string strBefore("<OriginDevCode>00000010000000000301</OriginDevCode><OriginDomainCode>001</OriginDomainCode><Latitude>0</Latitude><OriginDevCode>00000010000000000201#001</OriginDevCode><OriginDomainCode>001</OriginDomainCode><LocalDevCode /><Latitude>0</Latitude><OriginDevCode>00000010000000000101#001</OriginDevCode><OriginDomainCode>001</OriginDomainCode><OriginDevCode>1</OriginDevCode><OriginDomainCode /><LocalDevCode />"); std::string strAfter; iRet = ComplicationDevDomainCode(strBefore,strAfter); CXml xml; std::string strDomainCode; m_pUserMgr->GetDomainCode(strDomainCode); std::string strLocalDevCode; if (!xml.Parse(strAfter.c_str())) { BP_RUN_LOG_ERR(IVS_OPERATE_MEMORY_ERROR, "xml.Parse(strAfter) fail", "NA"); return IVS_OPERATE_MEMORY_ERROR; } if (!xml.FindElemEx("Content/ShareDevList")) { BP_RUN_LOG_ERR(IVS_SMU_DEV_REQ_XML_INVALID, "xml.FindElemEx(Content/ShareDevList) fail", "NA"); return IVS_SMU_DEV_REQ_XML_INVALID; } if (!xml.FindElem("ShareDevInfo")) { IVS_UINT32 uiXmlLen = 0; const IVS_CHAR* pRsp = xml.GetXMLStream(uiXmlLen); if (NULL == pRsp) { return IVS_SMU_DEV_REQ_XML_INVALID; } IVS_CHAR *cTmp = IVS_NEW(cTmp,strlen(pRsp) + 1); if (NULL == cTmp) { return IVS_ALLOC_MEMORY_ERROR; } memset(cTmp, 0, strlen(pRsp) + 1); memcpy(cTmp, pRsp, strlen(pRsp)); *pRspXml = cTmp; return IVS_SUCCEED; } do { (void)xml.IntoElem(); if (!xml.FindElem("LocalDevCode")) { BP_RUN_LOG_ERR(IVS_SMU_DEV_REQ_XML_INVALID, "xml.FindElem(LocalDevCode) fail", "NA"); return IVS_SMU_DEV_REQ_XML_INVALID; } const IVS_CHAR* pLocalDevCode = xml.GetElemValue(); if (NULL != pLocalDevCode) { strLocalDevCode = pLocalDevCode; } if (0 != strcmp(strLocalDevCode.c_str(), "")) { strLocalDevCode.append("#"); strLocalDevCode.append(strDomainCode); xml.ModifyElemValue(strLocalDevCode.c_str()); } xml.OutOfElem(); } while (xml.NextElem()); IVS_UINT32 uiLen = 0; const IVS_CHAR* pRsq = xml.GetXMLStream(uiLen); if (NULL == pRsq) { return IVS_SMU_DEV_REQ_XML_INVALID; } IVS_CHAR *cTmp = IVS_NEW(cTmp,strlen(pRsq) + 1); if (NULL == cTmp) { return IVS_ALLOC_MEMORY_ERROR; } memset(cTmp, 0, strlen(pRsq) + 1); memcpy(cTmp, pRsq, strlen(pRsq)); *pRspXml = cTmp; return iRet; }//lint !e1762
/***************************************************************************** Function: HSPspkt2ESFrm Description: 拼完一帧PS数据后处理媒体数据 Input: pPacket PS帧数据缓存 iPktLen PS帧数据长度 Output: pFrame 转换后数据存储缓存 iVideoLen 视频长度 iAudioLen 音频长度 Return: IVS_SUCCEED 成功 其他 失败 *****************************************************************************/ int CPs2EsProcessor::HSPspkt2ESFrm(unsigned char * pPacket, int iPktLen, unsigned char *&pFrame, int &iVideoLen, int &iAudioLen) { if (m_pHstPESParse == NULL) { HW_NEW(m_pHstPESParse, CHstPESParse); //lint !e774 !e831 if(NULL == m_pHstPESParse) { ERROR_LOG("m_pHstPESParse is NULL"); return IVS_ALLOC_MEMORY_ERROR; } if (m_pHstPESParse->Create()) { HW_DELETE(m_pHstPESParse); ERROR_LOG("Create PS parse fail"); return IVS_FAIL; } } int nStreamId = 0; HstPSHeader stPSHeader; HstPSFrame stPSFrame; stPSFrame.buf = m_pHstPESParse->mRawFrameBuffer.pPayLoad; stPSFrame.length = 0; stPSFrame.audio_length = 0; stPSFrame.max = m_pHstPESParse->mRawFrameBuffer.nMaxLength; int nConsumedBytes = 0; int nPSPacketLength = 0; int nVideoPayloadLength = 0; int nAudioPayloadLength = 0; unsigned char* pPSFrame = pPacket; unsigned char* pVideoPayload = m_pHstPESParse->mRawFrameBuffer.pCurPSPacketPayLoad; int uiTimes = 0; while (1) //lint !e716 { nPSPacketLength = m_pHstPESParse->ParsePSPacket( &stPSHeader, pPSFrame + nConsumedBytes, iPktLen - nConsumedBytes, &stPSFrame, &nStreamId); if (nPSPacketLength <= 0) { ERROR_LOG("Parse ps packet fail, it's a bad ps packet"); // 保证前面解析出来的数据不被抛弃 if (0 != uiTimes) { break; } return IVS_FAIL; } nConsumedBytes += nPSPacketLength; if (nConsumedBytes > iPktLen) { ERROR_LOG("Parse ps packet fail, ps packet length is wrong."); return IVS_FAIL; } memcpy(pVideoPayload + nVideoPayloadLength, stPSFrame.buf, (unsigned int)(stPSFrame.length + stPSFrame.audio_length)); nVideoPayloadLength += stPSFrame.length; nAudioPayloadLength += stPSFrame.audio_length; if (nConsumedBytes == iPktLen) { break; } ++uiTimes; // 此处为异常处理,出现失败直接恢复到原来的状态 if (m_RtpFrameOrganizer.checkLostPacket()) //lint !e1013 !e1055 !e746 { int iBuffLen = stPSFrame.length + stPSFrame.audio_length; unsigned char *pFindPESBuff = NULL; HW_NEW_A(pFindPESBuff, unsigned char, (unsigned int)iBuffLen); if (NULL == pFindPESBuff) //lint !e831 { ERROR_LOG("Alloc finde PES header buff fail"); continue; } memcpy(pFindPESBuff, stPSFrame.buf, (unsigned int)(stPSFrame.length + stPSFrame.audio_length)); for (int i = iBuffLen - (SEGMENT_MAX_SIZE_T / 2); i >= SEGMENT_MAX_SIZE_T; --i) { unsigned char ucType = 0; int iRet = m_pHstPESParse->CheckPSHeader(pFindPESBuff + i, 4, ucType); if (IVS_SUCCEED != iRet) { continue; } else { if (0xc0 == ucType) { nAudioPayloadLength -= (iBuffLen - i); } else { nVideoPayloadLength -= (iBuffLen - i); } nConsumedBytes -= (iBuffLen - i); //BP_DBG_LOG("Find pes header success, index=%d", i); break; } } HW_DELETE_A(pFindPESBuff); } //lint !e438 }