コード例 #1
0
//查询外部域列表
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
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
// 对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;
}
コード例 #5
0
ファイル: Ps2EsProcessor.cpp プロジェクト: eSDK/esdk_SipSDK
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;
}
コード例 #6
0
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
コード例 #7
0
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;
}
コード例 #8
0
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
コード例 #9
0
ファイル: Ps2EsProcessor.cpp プロジェクト: eSDK/esdk_SipSDK
/*****************************************************************************
 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
    }