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

📄 mgcp_scm.c

📁 一个有关MGCP协议的源程序文件
💻 C
📖 第 1 页 / 共 5 页
字号:
         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 + -