📄 rvmdm.c
字号:
rvMdmRegisterEvent(pkg,"of");
rvMdmRegisterEvent(pkg,"on");
rvMdmRegisterEvent(pkg,"fl");
rvMdmRegisterSignal(pkg,"ri",180000);
rvMegacoParameterValueConstruct(¶m, "exact");
rvMegacoParameterValueOr(¶m, "state");
rvMegacoParameterValueOr(¶m, "failWrong");
rvMdmPackageRegisterLocalControlProperty(pkg, "strict", ¶m);
rvMegacoParameterValueConstruct(¶m, "True");
rvMegacoParameterValueOr(¶m, "False");
rvMdmPackageRegisterLocalControlProperty(pkg, "init", ¶m);
rvMegacoParameterValueConstruct(¶m, "");
rvMdmPackageRegisterLocalControlProperty(pkg, "mindur", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "maxdur", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "cad", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "freq", ¶m);
/* Register package dd */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"dd");
rvMdmRegisterEvent(pkg,"d0");
rvMdmRegisterEvent(pkg,"d1");
rvMdmRegisterEvent(pkg,"d2");
rvMdmRegisterEvent(pkg,"d3");
rvMdmRegisterEvent(pkg,"d4");
rvMdmRegisterEvent(pkg,"d5");
rvMdmRegisterEvent(pkg,"d6");
rvMdmRegisterEvent(pkg,"d7");
rvMdmRegisterEvent(pkg,"d8");
rvMdmRegisterEvent(pkg,"d9");
rvMdmRegisterEvent(pkg,"da");
rvMdmRegisterEvent(pkg,"db");
rvMdmRegisterEvent(pkg,"dc");
rvMdmRegisterEvent(pkg,"dd");
rvMdmRegisterEvent(pkg,"ds");
rvMdmRegisterEvent(pkg,"do");
rvMdmRegisterEvent(pkg,"ce");
/* For this package also register digitmap data */
rvMdmDigitMapDataConstruct(&dmData,"ce",
rvMegacoDigitMapBuildDDEvComplete,
rvMegacoDigitMapTranslateDDEvent,
mgr->a);
rvMdmPackageRegisterDigitMapData(pkg,&dmData);
rvMdmDigitMapDataDestruct(&dmData);
/* Register package dg */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"dg");
rvMdmRegisterSignal(pkg,"d0",-1);
rvMdmRegisterSignal(pkg,"d1",-1);
rvMdmRegisterSignal(pkg,"d2",-1);
rvMdmRegisterSignal(pkg,"d3",-1);
rvMdmRegisterSignal(pkg,"d4",-1);
rvMdmRegisterSignal(pkg,"d5",-1);
rvMdmRegisterSignal(pkg,"d6",-1);
rvMdmRegisterSignal(pkg,"d7",-1);
rvMdmRegisterSignal(pkg,"d8",-1);
rvMdmRegisterSignal(pkg,"d9",-1);
rvMdmRegisterSignal(pkg,"da",-1);
rvMdmRegisterSignal(pkg,"db",-1);
rvMdmRegisterSignal(pkg,"dc",-1);
rvMdmRegisterSignal(pkg,"dd",-1);
rvMdmRegisterSignal(pkg,"ds",-1);
rvMdmRegisterSignal(pkg,"do",-1);
/* Register package cg */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"cg");
rvMdmRegisterSignal(pkg,"bt",30000);
rvMdmRegisterSignal(pkg,"wt",180000);
rvMdmRegisterSignal(pkg,"rt",180000);
rvMdmRegisterSignal(pkg,"dt",16000);
rvMdmRegisterSignal(pkg,"ct",30000);
rvMdmRegisterSignal(pkg,"sit",180000);
rvMdmRegisterSignal(pkg,"pt",180000);
rvMdmRegisterSignal(pkg,"cw",300+85+250);
rvMdmRegisterSignal(pkg,"cr",180000);
/* Register package ct */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"ct");
rvMdmRegisterSignal(pkg,"ct",180000);
rvMdmRegisterSignal(pkg,"rsp",180000);
rvMegacoParameterValueConstruct(¶m, "success");
rvMegacoParameterValueOr(¶m, "failure");
rvMdmPackageRegisterLocalControlProperty(pkg, "res", ¶m);
/* Register package tonedet */
/*--------------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"tonedet");
rvMdmRegisterEvent(pkg,"std");
rvMdmRegisterEvent(pkg,"etd");
rvMdmRegisterEvent(pkg,"ltd");
rvMegacoParameterValueConstruct(¶m, "");
rvMdmPackageRegisterLocalControlProperty(pkg, "tl", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "dur", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "tid", ¶m);
/* Register package tonegen */
/*--------------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"tonegen");
rvMdmRegisterSignal(pkg,"pt",-1);
rvMegacoParameterValueConstruct(¶m, "");
rvMdmPackageRegisterLocalControlProperty(pkg, "tl", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "ind", ¶m);
/* Register package nt */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"nt");
rvMdmRegisterEvent(pkg,"netfail");
rvMdmRegisterEvent(pkg,"qualert");
rvMdmRegisterEvent(pkg,"cs");
rvMdmPackageRegisterStatistic(pkg, "dur");
rvMdmPackageRegisterStatistic(pkg, "os");
rvMdmPackageRegisterStatistic(pkg, "or");
rvMegacoParameterValueConstruct(¶m, "");
rvMdmPackageRegisterLocalControlProperty(pkg, "cs", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "th", ¶m);
rvMdmPackageRegisterLocalControlProperty(pkg, "jit", ¶m);
/* Register package rtp */
/*----------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"rtp");
rvMdmRegisterEvent(pkg,"pltrans");
rvMdmPackageRegisterStatistic(pkg, "ps");
rvMdmPackageRegisterStatistic(pkg, "pr");
rvMdmPackageRegisterStatistic(pkg, "pl");
rvMdmPackageRegisterStatistic(pkg, "jit");
rvMegacoParameterValueConstruct(¶m, "");
rvMdmPackageRegisterLocalControlProperty(pkg, "rtppltype", ¶m);
/* Register package cd */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"cd");
rvMdmRegisterEvent(pkg,"dt");
rvMdmRegisterEvent(pkg,"rt");
rvMdmRegisterEvent(pkg,"bt");
rvMdmRegisterEvent(pkg,"ct");
rvMdmRegisterEvent(pkg,"sit");
rvMdmRegisterEvent(pkg,"wt");
rvMdmRegisterEvent(pkg,"pt");
rvMdmRegisterEvent(pkg,"cw");
rvMdmRegisterEvent(pkg,"cr");
/* Register package tdmc */
/*---------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"tdmc");
rvMegacoParameterValueConstruct(¶m, "on");
rvMegacoParameterValueOr(¶m, "off");
rvMdmPackageRegisterLocalControlProperty(pkg, "ec", ¶m);
rvMegacoParameterValueConstruct(¶m, "automatic");
rvMdmPackageRegisterLocalControlProperty(pkg, "gain", ¶m);
/* Register package base root */
/*----------------------------*/
pkg = rvMdmTermMgrCreatePackage(mgr,"root");
/* Put an arbitrary value to avoid failing parsing with a wildcarding
response (I'm not sure what the meaning shoud be...) */
rvMegacoParameterValueConstruct(¶m, "0");
rvMdmPackageRegisterTermStateProperty(pkg, "maxNumberOfContexts", ¶m);
rvMdmPackageRegisterTermStateProperty(pkg, "maxTerminationsPerContext", ¶m);
rvMdmPackageRegisterTermStateProperty(pkg, "normalMGExecutionTime", ¶m);
rvMdmPackageRegisterTermStateProperty(pkg, "normalMGCExecutionTime", ¶m);
rvMdmPackageRegisterTermStateProperty(pkg, "ProvisionalResponseTimerValue", ¶m);
}
void rvMdmTermMgrConstruct_(RvMdmTermMgr* mgr,RvAlloc * a) {
mgr->a = a;
rvMapConstruct(RvIString,RvMdmPackagePtr)(&mgr->packageData,a);
rvPtrListConstruct(&mgr->termClassList,mgr->a);
mgr->connectF = defaultTermMgrConnect;
mgr->disconnectF = defaultTermMgrDisconnect;
mgr->contextCreatedF = defaultContextCreated;
mgr->contextDeletedF = defaultContextDeleted;
rvPtrListConstruct(&mgr->digitMapData,a);
mgr->maxContexts = 0xFFFFFFFF;
mgr->maxTermPerContext = 0xFFFFFFFF;
mgr->userData = NULL;
rvMdmRegisterPackages(mgr);
}
/*$
{function:
{name: rvMdmTermMgrConstructMegaco}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p: Constructs a termination manager that uses a Megaco stack.}
}
{proto: void rvMdmTermMgrConstructMegaco(RvMdmTermMgr* mgr,RvMegacoEntity* localEntity,RvMegacoEntityAddress* mgcAddr,void * XStack);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:localEntity} {d:A pointer to the entity object containing the address of the local entity.This pointer should be valid as long as the termination manager is running.}}
{param: {n:mgcAddr} {d:A pointer to the entity object containing the address of the primary MGC.This pointer can go out of scope upon retruning from this function.}}
{param: {n:XStack} {d:A pointer to a constructed Megaco stack.}}
}
}
$*/
void rvMdmTermMgrConstructMegaco(RvMdmTermMgr* mgr,RvMegacoEntity* localEntity,RvMegacoEntityAddress* mgcAddr,void * XStack) {
RvMegacoTermMgr * megacoMgr;
RvMdmPackage* pkg;
/* Base constructor */
rvMdmTermMgrConstruct_(mgr,&rvDefaultAlloc);
/* Should construct here the megaco termination manager, etc */
megacoMgr = rvAllocAllocate(mgr->a,sizeof(RvMegacoTermMgr));
rvMegacoTermMgrConstructA(megacoMgr,localEntity, mgr->a);
rvMegacoTermMgrMgcAddrListAdd(megacoMgr,mgcAddr);
rvMegacoTermMgrSetMdmMgr(megacoMgr,mgr);
mgr->xType = RV_MDMXTERMMGRTYPE_MEGACO;
/* Register and build the default packages */
pkg = rvMdmTermMgrCreatePackage(mgr,"g");
rvMdmPackageBuildGenericPkg(pkg);
}
/*$
{function:
{name: rvMdmTermMgrDestruct}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p: Destructs the termination manager and release all the memory.}
}
{proto: void rvMdmTermMgrDestruct(RvMdmTermMgr* mgr);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
}
}
$*/
void rvMdmTermMgrDestruct(RvMdmTermMgr* mgr) {
RvPtrListIter i;
if(mgr->xType == RV_MDMXTERMMGRTYPE_MEGACO)
rvMegacoTermMgrDestruct((RvMegacoTermMgr *)mgr->xTermMgr);
/* Destruct all the term class objects */
for(i=rvPtrListBegin(&mgr->termClassList);i!=rvPtrListEnd(&mgr->termClassList);i=rvPtrListIterNext(i)){
RvMdmTermClass * termClass = rvPtrListIterData(i);
rvMdmTermClassDestruct_(termClass);
rvAllocDeallocate(mgr->a,sizeof(RvMdmTermClass),termClass);
}
rvPtrListDestruct(&mgr->termClassList);
rvMapDestruct(&mgr->packageData);
/* TODO : Free the list members ??? */
rvPtrListDestruct(&mgr->digitMapData);
rvAllocDeallocate(mgr->a,sizeof(RvMegacoTermMgr),mgr->xTermMgr);
}
/*$
{function:
{name: rvMdmTermMgrSetMaxContexts}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p: Set the maximal number of simultaneous contexts supported by the MG.
(not counting the null context).}
}
{proto: void rvMdmTermMgrSetMaxContexts(RvMdmTermMgr* mgr,RvUint32 maxContexts);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:maxContexts} {d:the maximal number of contexts.}}
}
{notes:
{note:
In Megaco, this is equivalent to setting the maxNumberOfContexts property
of the Base Root Package for the root termination.
}
{note:
If this function is not called, the number of contexts is not
limited.
}
}
}
$*/
void rvMdmTermMgrSetMaxContexts(RvMdmTermMgr* mgr,RvUint32 maxContexts) {
mgr->maxContexts = maxContexts;
}
/*$
{function:
{name: rvMdmTermMgrSetMaxTermsPerContext}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p: Set the maximal number of terminations that can be present in a context.}
}
{proto: vvoid rvMdmTermMgrSetMaxTermsPerContext(RvMdmTermMgr* mgr,RvUint32 maxTermsPerContext);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:maxTermsPerContext} {d:the maximal number of termination in an active context.}}
}
{notes:
{note:
In Megaco, this is equivalent to setting the MaxTerminationsPerContext property
of the Base Root Package for the root termination.
}
{note:
If this function is not called, the number of terminations per context is not
limited.
}
}
}
$*/
void rvMdmTermMgrSetMaxTermsPerContext(RvMdmTermMgr* mgr,RvUint32 maxTermPerContext) {
mgr->maxTermPerContext = maxTermPerContext;
}
/*$
{function:
{name: rvMdmTermMgrStart}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p:After calling this function the termination manager will start processing
commands and events, and the MG will signal that is going up.}
}
{proto: void rvMdmTermMgrStart(RvMdmTermMgr* mgr,RvMdmServiceChange * sc);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:sc} {d:The service change parameters o NULL.}}
{param: {n:delay} {d:The delay in milliseconds to wait before starting the MDM.}}
}
{notes:
{note:
Usually called after registering the physical endpoints.
}
{note:
If sc is NULL default values will be used.
}
}
}
$*/
void rvMdmTermMgrStart(RvMdmTermMgr* mgr,RvMdmServiceChange * sc, int delay) {
mgr->xTermMgrClbks->startF(mgr->xTermMgr,sc, delay);
}
/*$
{function:
{name: rvMdmTermMgrStop}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p:Calling this function will cause the MG to signal that is going down.}
}
{proto: void rvMdmTermMgrStop(RvMdmTermMgr* mgr,RvMdmServiceChange * sc);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:sc} {d:The service change parameters o NULL.}}
}
{notes:
{note:
If sc is NULL default values will be used.
}
}
}
$*/
void rvMdmTermMgrStop(RvMdmTermMgr* mgr,RvMdmServiceChange * sc) {
mgr->xTermMgrClbks->stopF(mgr->xTermMgr,sc);
}
/*$
{function:
{name: rvMdmTermMgrClearTerminations}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p:Calling this function will unregister all the terminations and indicate that they
are going down.}
}
{proto: void rvMdmTermMgrClearTerminations(RvMdmTermMgr* mgr,RvMdmServiceChange * sc);}
{params:
{param: {n:mgr} {d:A pointer to termination manager object.}}
{param: {n:sc} {d:The service change parameters o NULL.}}
}
{notes:
{note:
If sc is NULL default values will be used.
}
}
}
$*/
void rvMdmTermMgrClearTerminations(RvMdmTermMgr* mgr,RvMdmServiceChange * sc) {
mgr->xTermMgrClbks->clearTermF(mgr->xTermMgr,sc);
}
/*$
{function:
{name: rvMdmTermMgrCreateTermClass}
{class: RvMdmTermMgr}
{include: rvmdm.h}
{description:
{p:Allocates and construct a ne
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -