📄 cmparam.c
字号:
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 + -