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