📄 mgcp_scm.c
字号:
RETVALUE(ROK);
}
RETVALUE(RFAILED);
}
PUBLIC S16 mgScmDeregGwDB
(
mgGateway *gw
)
{
Txt szSQL[1024], timeStr[64], ip_addrStr[16];
SQL_CONN *myData;
SQL_RES *res;
U8 *byte;
SGetDateTime(&gw->downTime);
DTPBUF(gw->downTime, timeStr);
myData = sqlConnGet();
gw->ipAddr = (U32) rand();
gw->port = rand() & 0xFFFF;
byte = &gw->ipAddr;
sprintf(ip_addrStr, "%d.%d.%d.%d", byte[3], byte[2], byte[1], byte[0]);
sprintf(szSQL,
"update gateway_tbl set downtime=\'%s\', state=\'%s\',ip_addr=\'%s\', port=\'%d\' where dname = \'%s\'",
timeStr, "离线", ip_addrStr, gw->port, gw->dName);
scmPrint(("[SQL] %s\n",szSQL));
sqlQuery(myData, szSQL, &res);
sqlConnPut(myData);
}
/*
*
* Fun: mgScmDeregGw
*
* Desc: De-register a gateway while disconnected
*
* Ret: ROK
* RFAILED
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmDeregGw
(
mgGateway *pGw
)
{
mgEndpoint *ep, *prevEp = NULLP;
S16 ret;
MGC_TRC(mgScmDeregGw)
scmPrint(("mgScmDeregGw(dName=%s, reg=%s).\n",pGw->dName, pGw->reg ? "yes" : "no" ));
if (pGw->reg == FALSE) {
RETVALUE(RFAILED);
}
// GcpDeRegMg(pGw);
mgScmDeregGwDB(pGw);
pGw->reg = FALSE;
ret = cmHashListDelete(&mgActiveGwHashList, (PTR)pGw);
if (ret != ROK) {
scmPrint(("Failed to delete gateway from active list.\n"));
RETVALUE(RFAILED);
}
scmPrint(("De-register gateway.\n"));
pGw->ipAddr = 0;
/* iterate the endpoint list to send disconnect event to them */
while(cmHashListGetNext(&pGw->tListCp, (PTR)prevEp, (PTR*)&ep) == ROK) {
//mgDisconnectEp(ep, RZN_EP_UNLOAD);
smPostEvnt(ep, MGC_EV_OUTSERVICE, NULL);
prevEp = ep;
}
RETVALUE(ROK);
}
/*
*
* Fun: mgScmGetGwById
*
* Desc: Get gateway by gateway id
*
* Ret: ROK
* RFAILED
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmGetGwById
(
U32 id,
mgGateway **ppGw
)
{
RETVALUE(cmHashListFind(&mgActiveGwHashList, (U8*)&id, sizeof(U32), 0, (PTR*)ppGw));
}
/*
*
* Fun: mgScmGetVpbxById
*
* Desc: Get VPBX by VPBX id
*
* Ret: ROK
* RFAILED
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmGetVpbxById
(
U32 id,
mgVPBX **pbx
)
{
RETVALUE(cmHashListFind(&mgVpbxHashList, (U8*)&id, sizeof(U32), 0, (PTR*)pbx));
}
PUBLIC S16 mgScmGetVpbxByName
(
U8 *name,
mgVPBX **pbx
)
{
mgVPBX *pVpbx, *pPrev = NULLP;
while(cmHashListGetNext(&mgVpbxHashList, (PTR)pPrev, (PTR*)&pVpbx) == ROK) {
if (strcmp(name, pVpbx->name) == 0) {
*pbx = pVpbx;
RETVALUE(ROK);
}
pPrev = pVpbx;
}
RETVALUE(RFAILED);
}
/*
*
* Fun: mgScmGetGenSilenceSuppression
*
* Desc: Get config for silence Suppression
*
* Ret: "on"
* "off"
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC U8* mgScmGetGenSilenceSuppression
(
void
)
{
RETVALUE(mgCfg.silenceSuppression);
}
/*
*
* Fun: mgScmGetGenPacketTime
*
* Desc: Get config for packetization period
*
* Ret: packetization period
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC U16 mgScmGetGenPacketTime
(
void
)
{
RETVALUE(mgCfg.pktPeriodTime);
}
/*
*
* Fun: mgScmGetGenCodec
*
* Desc: Get config for codec type
*
* Ret: codec type
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC U8* mgScmGetGenCodec
(
void
)
{
RETVALUE(mgCfg.codec);
}
/*
*
* Fun: mgScmClearEpDynPar
*
* Desc: Clear endpoint dynamic parameters
*
* Ret: <VOID>
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC void mgScmClearEpDynPar
(
mgEndpoint *ep
)
{
/* init dynamic fields */
ep->callState = EP_OUT_OF_SERVICE;
ep->svcType = SVC_NONE;
// ep->pVpbx = NULLP;
// ep->pGw = NULLP;
ep->primaryCall = NULLP;
ep->secondaryCall = NULLP;
ep->pActor = ACTOR_NONE;
ep->sActor = ACTOR_NONE;
ep->pCallState = CST_IDLE;
ep->sCallState = CST_IDLE;
ep->bOccupied = FALSE;
ep->bOffHook = FALSE;
RETVOID;
}
/*
*
* Fun: mgScmCreateDynEp
*
* Desc: Create a dynamic endpoint
*
* Ret: ROK
* RFAILED
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmCreateDynEp
(
U8 *lclName,
U8 *dname,
U8 *phn,
U8 proto,
size_t size,
mgEndpoint **endpoint
)
{
mgEndpoint *ep;
S16 ret;
MGC_TRC(mgScmCreateDynEp)
*endpoint = NULLP;
if (proto >= PROTOCOL_BUTT) {
scmPrint(( "Error: Unsupported protocol type, create failed.\n"));
RETVALUE(RFAILED);
}
ret = SGetSBuf(MGC_REG, MGC_POOL, (Data**)&ep, size);
if (ret != ROK) {
scmPrint(( "OOPS: failed to SGetSBuf in mgScmCreateDynEp.\n"));
RETVALUE(RFAILED);
}
memset(ep, 0, size);
strcpy(ep->lclName, lclName);
strcpy(ep->dName, dname);
strcpy(ep->phoneNum, phn);
ep->proto = proto;
/* init dynamic fields */
ep->vPBXid = 0;
ep->bSupCallXfer = FALSE;
ep->bSupCallWaiting = FALSE;
ep->acl = ACL_PUBLIC;
ep->callState = EP_IN_SERVICE;
ep->svcType = SVC_NONE;
ep->pVpbx = NULLP;
ep->pGw = NULLP;
ep->primaryCall = NULLP;
ep->secondaryCall = NULLP;
ep->pActor = ACTOR_NONE;
ep->sActor = ACTOR_NONE;
ep->pCallState = CST_IDLE;
ep->sCallState = CST_NONE;
ep->bOccupied = FALSE;
ep->bOffHook = FALSE;
ep->fwdOnAnyPhNum[0] = '\0';
ep->fwdOnBusyPhNum[0] = '\0';
ep->fwdOnNoAnsPhNum[0] = '\0';
ep->account[0] = '\0';
ep->extnNum[0] = '\0';
*endpoint = ep;
RETVALUE(ROK);
}
/*
*
* Fun: mgScmFreeDynEp
*
* Desc: Free a dynamic endpoint
*
* Ret: ROK
*
* Notes: <NONE>
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmFreeDynEp
(
mgEndpoint *ep
)
{
SPutSBuf(MGC_REG, MGC_POOL, (Data*)ep, sizeof(mgEndpoint));
RETVALUE(ROK);
}
/*
*
* Fun: mgScmIterateEp
*
* Desc: Iterate all endpoint loaded.
*
* Ret: ROK
*
* Notes: the iterator should not delete endpoint from termination list
* or delete gateway from gateway list.
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmIterateEp
(
mgEpIterator iterator
)
{
mgEndpoint *ep, *prevEp;
mgGateway *gw, *prevGw = NULLP;
MGC_TRC(mgScmIterateEp)
while(cmHashListGetNext(&mgGwHashList, (PTR)prevGw, (PTR*)&gw) == ROK) {
prevEp = NULLP;
while(cmHashListGetNext(&gw->tListCp, (PTR)prevEp, (PTR*)&ep) == ROK) {
iterator(ep);
prevEp = ep;
}
prevGw = gw;
}
RETVALUE(ROK);
}
PUBLIC S16 mgScmRegisterAllGateway
(
mgEpIterator regCb
)
{
mgEndpoint *ep, *prevEp;
mgGateway *gw, *prevGw = NULLP;
MGC_TRC(mgScmRegisterAllGateway)
while(cmHashListGetNext(&mgGwHashList, (PTR)prevGw, (PTR*)&gw) == ROK) {
if (cmStrcmp(gw->staStr, mpStrOnline) == 0) {
prevEp = NULLP;
while(cmHashListGetNext(&gw->tListCp, (PTR)prevEp, (PTR*)&ep) == ROK) {
regCb(ep);
break;
}
}
prevGw = gw;
}
RETVALUE(ROK);
}
/*
*
* Fun: mgScmIterateActiveGw
*
* Desc: Iterate all active media gateway.
*
* Ret: ROK
*
* Notes: the iterator should not delete gateway from
* from active gateway list.
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmIterateActiveGw
(
mgGwIterator iterator
)
{
mgGateway *gw = NULLP;
mgGateway *prevGw = NULLP;
// MGC_TRC(mgScmIterateActiveGw)
while(cmHashListGetNext(&mgActiveGwHashList, (PTR)prevGw, (PTR*)&gw) == ROK) {
iterator(gw);
prevGw = gw;
}
RETVALUE(ROK);
}
/*
*
* Fun: mgScmIterateGw
*
* Desc: Iterate all media gateway.
*
* Ret: ROK
*
* Notes: the iterator should not delete gateway from
* from gateway list.
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmIterateGw
(
mgGwIterator iterator
)
{
mgGateway *gw, *prevGw = NULLP;
MGC_TRC(mgScmIterateGw)
while(cmHashListGetNext(&mgGwHashList, (PTR)prevGw, (PTR*)&gw) == ROK) {
iterator(gw);
prevGw = gw;
}
RETVALUE(ROK);
}
/*
*
* Fun: mgScmFindGwByName
*
* Desc: Iterate all media gateway.
*
* Ret: ROK
*
* Notes: the iterator should not delete gateway from
* from gateway list.
*
* File: mgc_scm.c
*
*/
PRIVATE S16 mgScmFindGwById
(
U32 gwid,
mgGateway **ppGw
)
{
mgGateway *gw, *prevGw = NULLP;
MGC_TRC(mgScmFindGwByName)
while(cmHashListGetNext(&mgGwHashList, (PTR)prevGw, (PTR*)&gw) == ROK) {
if (gwid == gw->gwid) {
*ppGw = gw;
RETVALUE(OK);
}
prevGw = gw;
}
RETVALUE(RFAILED);
}
/*
*
* Fun: mgScmFindGwByName
*
* Desc: Iterate all media gateway.
*
* Ret: ROK
*
* Notes: the iterator should not delete gateway from
* from gateway list.
*
* File: mgc_scm.c
*
*/
PUBLIC S16 mgScmFindGwByName
(
S8* name,
mgGateway **ppGw
)
{
mgGateway
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -