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

📄 cmparam.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 5 页
字号:
                chNodeId=call->callSignalAddress;
            break;
        }
        case cmParamDestinationInfo:
        case cmParamFullDestinationInfo:
        {
            if (call->destinationInfo<0)
                chNodeId=call->destinationInfo=pvtAddRoot(hVal,NULL,0,NULL);
            else
                chNodeId=call->destinationInfo;
            break;
        }
        case cmParamRouteCallSignalAddress:
        {
            if (call->routeCallSignalAddress<0)
                chNodeId=call->routeCallSignalAddress=pvtAddRoot(hVal,app->hAddrSyn,0,NULL);
            else
                chNodeId=call->routeCallSignalAddress;
            break;
        }
        default:
            /* Other parameters are taken from the property */
            if (app->callPropertyMode != pmodeDoNotUseProperty)
            {
                int messageNodeId;
                if ((messageNodeId=pvtGetChild(hVal,nodeId,getParamMessage(param),NULL))<0)
                {
                    messageNodeId=pvtAddTree(hVal,nodeId,hVal,pvtGetChild(hVal,app->appDB,getParamMessage(param),NULL));
                }
                chNodeId=pvtBuildByFieldIds(hVal,messageNodeId,getParamName(param), 0, NULL);
            }
            else
            {
                cmCallParamEnum paramEnum;
                paramEnum = getParamNumber(param);
                if (call->paramNodeId[paramEnum] < 0)
                    chNodeId=call->paramNodeId[paramEnum]=pvtAddRoot(hVal,getParamSyntax(app, paramEnum),0,NULL);
                else
                    chNodeId=call->paramNodeId[paramEnum];
            }
            break;
    }

    if (chNodeId<0)
    {
        emaUnlock((EMAElement)hsCall);
        cmiAPIExit(hApp,(char*)"cmCallSetParam: [%d]",chNodeId);
        return chNodeId;
    }

    switch(param)
    {
    case cmParamSetupCanOverlapSending :
        pvtSet(hVal,chNodeId,-1, value, 0);  /* set canOverlapSend to RV_TRUE */
        break;


    case cmParamSourceAddress           :
    case cmParamDestinationAddress      :
    case cmParamDestExtraCallInfo       :
    case cmParamAlternativeAliasAddress :
    case cmParamAlternativeDestExtraCallInfo :
    case cmParamAlternativeExtension    :
    case cmParamCalledPartyNumber       :
    case cmParamCalledPartySubAddress   :
    case cmParamCallingPartyNumber      :
    case cmParamCallingPartySubAddress  :
    case cmParamExtension               :
    case cmParamConnectedAddress        :

        length=((cmAlias*)svalue)->length;

        if ((param!=cmParamCalledPartyNumber &&
            param!=cmParamCalledPartySubAddress &&
            param!=cmParamCallingPartyNumber &&
            param!=cmParamCallingPartySubAddress) ||
            (((cmAlias*)svalue)->type == cmAliasTypeEndpointID) ||
            (((cmAlias*)svalue)->type == cmAliasTypeGatekeeperID))

        {
            int synNodeId;
            pstNodeType type;
            pvtGet(hVal,chNodeId,NULL,&synNodeId,NULL,NULL);
            type=pstGetNodeType(pvtGetSynTree(hVal,chNodeId),synNodeId);
            if (type==pstSequenceOf || type==pstSetOf)
            {
                int tmpNodeId=chNodeId;
                if ((chNodeId=pvtGetByIndex(hVal, chNodeId, index+1, NULL)) < 0)
                {
                    chNodeId=pvtAdd(hVal, tmpNodeId, -800, 0, NULL, 0); /* create node */
                }

                if(chNodeId<0)
                {
                    emaUnlock((EMAElement)hsCall);
                    cmiAPIExit(hApp, (char*)"cmCallSetParam() [%d]",chNodeId);
                    return chNodeId;
                }
            }
            else if (index)
            {
                emaUnlock((EMAElement)hsCall);
                cmiAPIExit(hApp, (char*)"cmCallSetParam() invalid index [%d]",index);
                return RV_ERROR_UNKNOWN;
            }
            ret = aliasToVt(hVal,(cmAlias*)svalue,chNodeId);
        }
        else
        {
            if (param==cmParamCalledPartyNumber || param==cmParamCallingPartyNumber)
            {
                if ((ret = pvtAdd(hVal,chNodeId,__q931(numberDigits),length, ((cmAlias*)svalue)->string,NULL))>=0)
                {
                    int typeOfNumber = 2;
                    int numberingPlanIdentification = 1;
                    int baseNodeId;
                    ret = baseNodeId = pvtAdd(hVal,chNodeId,__q931(octet3),0, NULL,NULL);

                    if (((cmAlias*)svalue)->type==cmAliasTypePartyNumber)
                    switch(((cmAlias*)svalue)->pnType)
                    {
                            /* the numbering plan is according to
                               Recommendations E.163 and E.164.*/
                        case cmPartyNumberPublicUnknown:
                            /* if used number digits carry prefix indicating type
                               of number according to national recommendations*/
                            typeOfNumber = 0;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberPublicInternationalNumber:
                            typeOfNumber = 1;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberPublicNationalNumber:
                            typeOfNumber = 2;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberPublicNetworkSpecificNumber:
                            /* not used, value reserved */
                            typeOfNumber = 3;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberPublicSubscriberNumber:
                            typeOfNumber = 4;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberPublicAbbreviatedNumber:
                            /* valid only for called party number at the outgoing
                               access, network substitutes appropriate number. */
                            typeOfNumber = 6;
                            numberingPlanIdentification = 1;
                        break;
                        case cmPartyNumberDataPartyNumber:
                            /* not used, value reserved */
                            typeOfNumber = 0;
                            numberingPlanIdentification = 3;
                        break;
                        case cmPartyNumberTelexPartyNumber:
                            /* not used, value reserved*/
                            typeOfNumber = 0;
                            numberingPlanIdentification = 4;
                        break;
                        case cmPartyNumberPrivateUnknown:
                            typeOfNumber = 0;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberPrivateLevel2RegionalNumber:
                            typeOfNumber = 2;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberPrivateLevel1RegionalNumber:
                            typeOfNumber = 2;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberPrivatePISNSpecificNumber:
                            typeOfNumber = 3;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberPrivateLocalNumber:
                            typeOfNumber = 2;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberPrivateAbbreviatedNumber:
                            typeOfNumber = 6;
                            numberingPlanIdentification = 9;
                        break;
                        case cmPartyNumberNationalStandardPartyNumber:
                            typeOfNumber = 0;
                            numberingPlanIdentification = 8;
                        break;
                        default:
                            if (((cmAlias*)svalue)->pnType&0x80)
                            {
                                typeOfNumber = ((((cmAlias*)svalue)->pnType)>>4)&0x7;
                                numberingPlanIdentification = (((cmAlias*)svalue)->pnType)&0xf;
                            }
                    }

                    if ((ret  = pvtAdd(hVal, baseNodeId, __q931(typeOfNumber), typeOfNumber, NULL, NULL))>=0)
                    {
                        ret = pvtAdd(hVal, baseNodeId, __q931(numberingPlanIdentification), numberingPlanIdentification, NULL, NULL);

                    }
                }
                if (ret<0)
                {
                    emaUnlock((EMAElement)hsCall);
                    cmiAPIExit(hApp, (char*)"cmCallSetParam() [%d]",ret);
                    return ret;
                }
            }
            if (param==cmParamCalledPartySubAddress || param==cmParamCallingPartySubAddress)
            {
                int typeOfSubaddress = 0;
                int oddEvenIndicator = 0;
                if ((ret = pvtAdd(hVal,chNodeId,__q931(subaddressInformation),length, ((cmAlias*)svalue)->string,NULL))>=0)
                {
                    int baseNodeId;
                    ret = baseNodeId = pvtAdd(hVal,chNodeId,__q931(octet3),0, NULL,NULL);

                    if (((cmAlias*)svalue)->type==cmAliasTypePartyNumber)
                    if (((cmAlias*)svalue)->pnType&0x80)
                    {
                        typeOfSubaddress = ((((cmAlias*)svalue)->pnType)>>4)&0x7;
                        oddEvenIndicator = ((((cmAlias*)svalue)->pnType)>>3)&0x1;
                    }

                    if ((ret  = pvtAdd(hVal, baseNodeId, __q931(typeOfSubaddress), typeOfSubaddress, NULL, NULL))>=0)
                    {
                        ret = pvtAdd(hVal, baseNodeId, __q931(oddEvenIndicator), oddEvenIndicator, NULL, NULL);

                    }
                }
                if (ret<0)
                {
                    emaUnlock((EMAElement)hsCall);
                    cmiAPIExit(hApp, (char*)"cmCallSetParam() [%d]",ret);
                    return ret;
                }
            }

        }
        break;

    case cmParamSetupNonStandardData       :
    case cmParamCallProceedingNonStandardData  :
    case cmParamAlertingNonStandardData    :
    case cmParamConnectNonStandardData     :
    case cmParamReleaseCompleteNonStandardData :
    case cmParamSetupFastStart         :
    case cmParamConnectFastStart       :
    case cmParamAlertingFastStart       :
    case cmParamCallProcFastStart       :
        if (value >= 0)
            pvtShiftTree(hVal,chNodeId,value);
        else
            pvtDelete(hVal,chNodeId);
        break;
    case cmParamFullSourceInfo      :
    case cmParamFullSourceAddre

⌨️ 快捷键说明

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