⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmgeneral.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 5 页
字号:
 *          function does not automatically start Stack activity and accesses only
 *          the "system" configuration tree. To start the Stack use cmStart() function.
 *          The application may change configuration settings between cmInitialize()
 *          and cmStart() using cmGetXXXConfigurationHandle() functions.
 *
 * input  : hApp    - Stack handle for the application
 * output : none
 * return : Non-negative value on success
 *          Negative value on failure
 ************************************************************************/
RVAPI
int RVCALLCONV cmStart(
        IN  HAPP        hApp)
{
    int rv=RV_ERROR_UNKNOWN;
    cmElem* app=(cmElem*)hApp;
    if (!hApp) return RV_ERROR_UNKNOWN;
    cmiAPIEnter(hApp, "cmStart(hApp=0x%p)", app);

    /* Make sure we haven't started yet */
    if (!app->start)
    {
        CMTRANSANNEXEPARAM eParams;
        /* Activate the transport module */
        int port;
        int annexENodeId;
        cmTransportAddress tpktTA;
        cmTransportAddress annexETA;

        app->diffSrcAddressInSetupAndARQ=RV_FALSE;
        if (pvtGetChild(app->hVal,app->q931Conf,__q931(diffSrcAddressInSetupAndARQ),NULL)>=0)
        {
            app->diffSrcAddressInSetupAndARQ=RV_TRUE;
        }


        pvtGet(app->hVal,pvtGetChild(app->hVal,app->q931Conf,__q931(callSignalingPort),NULL),NULL,NULL,&port,NULL);
        tpktTA.type=cmTransportTypeIP;
        tpktTA.ip=app->localIPAddress;
        tpktTA.port=(RvUint16)port;

        __pvtGetByFieldIds(annexENodeId, app->hVal, app->rasConf, {_q931(alternateTransportAddresses) _q931(annexE) _nul(1) _q931(ipAddress) _q931(port) LAST_TOKEN}, NULL, &port, NULL);
        if (annexENodeId < 0)
            port = 2517;
        annexETA.distribution=cmDistributionUnicast;
        annexETA.type=cmTransportTypeIP;
        annexETA.ip=app->localIPAddress;
        annexETA.port=(RvUint16)port;

        {
            int nodeId;

            nodeId=cmGetQ931ConfigurationHandle(hApp);
            /* Annex E parameters */
            eParams.useAnnexE = RV_FALSE;
            if ((nodeId=pvtGetChild(app->hVal,nodeId,__q931(useAnnexE) ,NULL))>=0)
                eParams.useAnnexE = RV_TRUE;

            /* set the Annex E parameters */
            eParams.t_R1    = 500;
            eParams.t_R2    = (RvUint)(eParams.t_R1 * 21 / 10);
            eParams.n_R1    = 8;
            eParams.t_IMA1  = 6000;
            eParams.n_IMA1  = 6;
            eParams.t_DT    = 1;

            if (eParams.useAnnexE)
            {
                if (pvtGetChildValue(app->hVal,nodeId,__q931(t_R1) ,(int *)&eParams.t_R1,NULL)<0)
                    eParams.t_R1 = 500;
                eParams.t_R2 = (RvUint)(eParams.t_R1 * 21 / 10);
                if (pvtGetChildValue(app->hVal,nodeId,__q931(n_R1) ,(int *)&eParams.n_R1,NULL)<0)
                    eParams.n_R1 = 8;
                if (pvtGetChildValue(app->hVal,nodeId,__q931(t_IMA1) ,(int *)&eParams.t_IMA1,NULL)<0)
                    eParams.t_IMA1 = 6000;
                if (pvtGetChildValue(app->hVal,nodeId,__q931(n_IMA1) ,(int *)&eParams.n_IMA1,NULL)<0)
                    eParams.n_IMA1 = 6;
                if (pvtGetChildValue(app->hVal,nodeId,__q931(t_DT) ,(int *)&eParams.t_DT,NULL)<0)
                    eParams.t_DT = 1;
            }

        }
        if (cmTransStart(app->hTransport,&tpktTA,&annexETA,(int)(app->localIPAddress),&eParams)==cmTransOK)
        {
            rv=0;

            if ((tpktTA.ip == 0) || (eParams.useAnnexE && (annexETA.ip == 0)))
            {
                RvAddress localAddr;
                RvUint32 numAddrs = 1;
                RvStatus res;

                res = RvHostLocalGetAddress(&numAddrs, &localAddr);

                if ((res == RV_OK) && (numAddrs > 0))
                {
                    if (tpktTA.ip == 0)
                        tpktTA.ip = RvAddressIpv4GetIp(RvAddressGetIpv4(&localAddr));
                    if (eParams.useAnnexE && (annexETA.ip == 0))
                        annexETA.ip = RvAddressIpv4GetIp(RvAddressGetIpv4(&localAddr));

                    RvAddressDestruct(&localAddr);
                }
            }

            /* Set the Q931 address for the log */
            app->q931Chan=pvtAddRoot(app->hVal,app->hAddrSyn,0,NULL);
            cmTAToVt(app->hVal,app->q931Chan, &tpktTA);

            /* Set the Q931 address for the log */
            if (eParams.useAnnexE)
            {
                /* Make sure to "fix" the Annex E port inside RAS configuration if necessary */
                __pvtGetByFieldIds(annexENodeId, app->hVal, app->rasConf, {_q931(alternateTransportAddresses) _q931(annexE) _nul(1) LAST_TOKEN}, NULL, NULL, NULL);
                if (annexENodeId >= 0)
                    cmTAToVt(app->hVal, annexENodeId, &annexETA);

                app->q931AnnexEChan=pvtAddRoot(app->hVal,app->hAddrSyn,0,NULL);
                cmTAToVt(app->hVal,app->q931AnnexEChan, &annexETA);
            }
            else
                app->q931AnnexEChan = RV_PVT_INVALID_NODEID;

            /* Create a database of default values to messages */
            app->appDB=pvtAddRoot(app->hVal,app->hSyn,0,NULL);

            {
                int tmpNodeId,tmpNodeId1;
                int msgNodeId;
                char OID[10];
                int length;

                length=utlEncodeOID(sizeof(OID),OID,H225_PROTOCOL_IDENTIFIER);

                /*Setup*/
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(setup),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(setup) LAST_TOKEN},0,NULL);

                tmpNodeId=pvtAdd(app->hVal,msgNodeId,__q931(bearerCapability),0,NULL,NULL);
                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(octet3),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(codingStandard),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(informationTransferCapability),8,NULL,NULL);

                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(octet4),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(transferMode),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(informationTransferRate),16,NULL,NULL);

                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(octet5),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(layer1Ident),1,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(userInformationLayer1Protocol),5,NULL,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(setup) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(activeMC),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(mediaWaitForConnect),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(multipleCalls),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(maintainConnection),0,NULL,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(conferenceGoal) _q931(create) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(callType) _q931(pointToPoint) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(screeningIndicator) _q931(userProvidedVerifiedAndFailed) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(presentationIndicator) _q931(presentationAllowed) LAST_TOKEN},0,NULL);

                /*CallProceeding*/
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(callProceeding),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(callProceeding) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(callProceeding) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(multipleCalls),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(maintainConnection),0,NULL,NULL);


                /*Alerting*/
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(alerting),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(alerting) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(alerting) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(multipleCalls),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(maintainConnection),0,NULL,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(presentationIndicator) _q931(presentationAllowed) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(screeningIndicator) _q931(userProvidedVerifiedAndFailed) LAST_TOKEN},0,NULL);

                /*Connect*/
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(connect),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(connect) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(connect) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(multipleCalls),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(maintainConnection),0,NULL,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(presentationIndicator) _q931(presentationAllowed) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(screeningIndicator) _q931(userProvidedVerifiedAndFailed) LAST_TOKEN},0,NULL);

                /*Release Complete*/
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(releaseComplete),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(releaseComplete) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(releaseComplete) LAST_TOKEN},0,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(presentationIndicator) _q931(presentationAllowed) LAST_TOKEN},0,NULL);
                __pvtBuildByFieldIds(tmpNodeId,app->hVal,tmpNodeId1,
                    {_q931(screeningIndicator) _q931(userProvidedVerifiedAndFailed) LAST_TOKEN},0,NULL);

                /* Facility */
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(facility),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(facility) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(facility),0,NULL,NULL);
                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(facility) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(multipleCalls),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(maintainConnection),0,NULL,NULL);
                pvtAddBranch2(app->hVal,tmpNodeId1,__q931(reason),__q931(undefinedReason));

                /* Status Enquiry */
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(statusEnquiry),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(statusEnquiry) LAST_TOKEN},0,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(statusInquiry) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);

                /* Status */
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(status),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

                __pvtBuildByFieldIds(msgNodeId,app->hVal,tmpNodeId,
                    {_q931(message) _q931(status) LAST_TOKEN},0,NULL);

                tmpNodeId=pvtAdd(app->hVal,msgNodeId,__q931(cause),0,NULL,NULL);
                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(octet3),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(codingStandard),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(spare),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(location),0,NULL,NULL);
                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(octet4),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(causeValue),0,NULL,NULL);

                tmpNodeId=pvtAdd(app->hVal,msgNodeId,__q931(callState),0,NULL,NULL);
                tmpNodeId1=pvtAdd(app->hVal,tmpNodeId,__q931(codingStandard),0,NULL,NULL);

                tmpNodeId1=pvtAdd(app->hVal,msgNodeId,__q931(userUser),0,NULL,NULL);
                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolDiscriminator),5,NULL,NULL);

                __pvtBuildByFieldIds(tmpNodeId1,app->hVal,tmpNodeId1,
                    {_q931(h323_UserInformation) _q931(h323_uu_pdu) _q931(h323_message_body) _q931(status) LAST_TOKEN},0,NULL);

                pvtAdd(app->hVal,tmpNodeId1,__q931(protocolIdentifier),length,OID,NULL);

                /* Information */
                tmpNodeId=pvtAdd(app->hVal,app->appDB,__q931(information),0,NULL,NULL);

                pvtAdd(app->hVal,tmpNodeId,__q931(protocolDiscriminator),8,NULL,NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -