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

📄 mgcp_scm.c

📁 一个有关MGCP协议的源程序文件
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
*
*       Fun:    mgScmLoadGwFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmReloadGwFromDb
(
U8  *id,
mgGateway   *oldGw
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    U32         num, i;
    S16 ret;
    
    myData = sqlConnGet();
    sprintf(szSQL, 
    "select dname, ip_addr, port, id from gateway_tbl where id = \'%s\'", 
    id);
        
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
		    GcpRmvMg(oldGw);

            row = sqlGetRow(res);
            ret = cmHashListDelete(&mgGwHashList, (PTR)oldGw);
            if (ret != ROK) {
                scmPrint(( "OOPS: Can't delete the gateway from gateway list.\n"));
                RETVALUE(RFAILED);
            }            
            strcpy(oldGw->dName, row[0]);
            ret = cmHashListInsert(&mgGwHashList, (PTR)oldGw, _strlwr(oldGw->dName), cmStrlen(oldGw->dName));
            if (ret != ROK) {
                RETVALUE(RFAILED);
            }
            
            if ((row[1] == NULLP) || (cmStrlen(row[1]) == 0)) {
                oldGw->ipAddr = 0;
            }
            else {
                CmInetNetAddr address;
                
                if(cmInetConvertStrToIpAddr(cmStrlen(row[1]), row[1], &address) != ROK) {
                    scmPrint(( "Failed to convert IP address (%s).\n", row[1]));
                    RETVALUE(RFAILED);
                }
                oldGw->ipAddr = address.u.ipv4NetAddr;
            }
            oldGw->port      = (U16)strtoul(row[2], &stopStr, 10);
            oldGw->gwid = (U16)strtoul(row[3], &stopStr, 10);
			GcpCfgMg(oldGw);
        }
        sqlClear(res);
    }
    else {
        scmPrint(( "SQL_CONN Error: Couldn't execute %s on the server !\n", szSQL));
    }

    sqlConnPut(myData);

    RETVALUE(ROK);
}

/*
*
*       Fun:    mgScmLoadGwFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmLoadGwFromDb
(
U8  *name
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    mgGateway   gw;
    U32         num, i;
    
    myData = sqlConnGet();
    /* Load Gateways */
    if (*name != '*') 
        sprintf(szSQL, 
        "select dname, ip_addr, port, id, firmware_version, area_code, vpbx_id, state from gateway_tbl where dname = \'%s\'", 
        name);
    else
        sprintf(szSQL, 
        "select dname, ip_addr, port, id, firmware_version, area_code, vpbx_id, state from gateway_tbl");
        
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
            row = sqlGetRow(res);
            strcpy(gw.dName, row[0]);
            if ((row[1] == NULLP) || (cmStrlen(row[1]) == 0)) {
                gw.ipAddr = 0;
            }
            else {
                CmInetNetAddr address;
                
                if(cmInetConvertStrToIpAddr(cmStrlen(row[1]), row[1], &address) == ROK) {
                	gw.ipAddr = address.u.ipv4NetAddr;
                } else {
                    scmPrint(( "Failed to convert IP address (%s).\n", row[1]));
                    gw.ipAddr = (U32) rand();
                }
            }
            gw.port      = (U16)strtoul(row[2], &stopStr, 10);
            gw.gwid= (U16)strtoul(row[3], &stopStr, 10);
			if (row[4] && (row[4][0] =='V' || row[4][0] == 'v'))
				strncpy(gw.verStr, row[4], sizeof(gw.verStr));
			else
				gw.verStr[0] = 0;

			
            if ((row[5] == NULLP) || (strlen(row[5]) == 0)) {
                gw.areaCode[0] = '\0';
            }
            else {
                strcpy(gw.areaCode, row[5]);
            }
            gw.vPBXid = strtoul(row[6], &stopStr, 10);

			strncpy(gw.staStr, row[7], sizeof(gw.verStr));

            gw.bStatic   = TRUE; //(U8)strtoul(row[4], &stopStr, 10);
            gw.type      = 0; //(U8)strtoul(row[5], &stopStr, 10);
            gw.lostPackets = 0;
			
            if (mgScmLoadGw(&gw) != ROK) {
                scmPrint(( "Failed to load Gateway (%s)\n", gw.dName));
            }
        }
        sqlClear(res);
    }
    else {
        scmPrint(( "SQL_CONN Error: Couldn't execute %s on the server !\n", szSQL));
    }

    sqlConnPut(myData);

    RETVALUE(ROK);
}

/*
*
*       Fun:    mgScmLoadEpFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmReloadEpFromDb
(
U8 *domain,
U8 *local,
mgEndpoint  *ep
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    U32         num, i;
    
    myData = sqlConnGet();
    sprintf(szSQL, 
    "select dname, lclname, phone, account, vpbx_id, fwd_uncon, fwd_on_busy, fwd_on_no_ans, enabled, fwd_on_hotline, type from endpoint_tbl, dgtMap where enabled=1 and phone!=\'\' and dname = \'%s\' and lclname=\'%s\'",
    domain, local);
        
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
            row = sqlGetRow(res);
            strcpy(ep->dName, row[0]);
            strcpy(ep->lclName, row[1]);
         //   strcpy(ep.phoneNum, row[2]);
            strcpy(ep->extnNum, row[2]); //row[3]           
            strcpy(ep->account, row[3]);
            
            ep->vPBXid           = strtoul(row[4], &stopStr, 10);
            
            if ((row[5] == NULLP) || (strlen(row[5]) == 0)) {
                ep->fwdOnAnyPhNum[0] = '\0';
            }
            else {
                strcpy(ep->fwdOnAnyPhNum, row[5]);
            }
            
            if ((row[6] == NULLP) || (strlen(row[6]) == 0)) {
                ep->fwdOnBusyPhNum[0] = '\0';
            }
            else {
                strcpy(ep->fwdOnBusyPhNum, row[6]);
            }
            
            if ((row[7] == NULLP) || (strlen(row[7]) == 0)) {
                ep->fwdOnNoAnsPhNum[0] = '\0';
            }
            else {
                strcpy(ep->fwdOnNoAnsPhNum, row[7]);
            }
            ep->enabled = (U8)strtoul(row[8], &stopStr, 10);
            
            if ((row[9] == NULLP) || (strlen(row[9]) == 0)) {
                ep->fwdOnHotline[0] = '\0';
            }
            else {
                strcpy(ep->fwdOnHotline, row[9]);
            }

            if (row[10][0] != 'o' && row[10][0] != 'O') {
                ep->portTye= PT_FXS;
            } else {
                ep->portTye= PT_FXO;
            }

            if ((row[11] == NULLP) || (strlen(row[11]) == 0)) {
                ep->dgtMap[0] = '\0';
            }
            else {
                strcpy(ep->dgtMap, row[11]);
            }
        }
        sqlClear(res);
    }
    else {
        scmPrint(( "SQL_CONN Error: Couldn't execute %s on the server !\n", szSQL));
    }

    sqlConnPut(myData);

    RETVALUE(ROK);
}

/*
*
*       Fun:    mgScmLoadEpFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmLoadEpFromDb
(
U8  *domain,
U8  *local
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    mgEndpoint  ep;
    U32         num, i;
    
    myData = sqlConnGet();
    if (*domain == '*')
        sprintf(szSQL, 
        "select dname, lclname, phone, account, vpbx_id, fwd_uncon, fwd_on_busy, fwd_on_no_ans, enabled, fwd_on_hotline, type, dgtMap from endpoint_tbl where enabled='1'");
    else 
    if (*local == '*')
        sprintf(szSQL,
        "select dname, lclname, phone, account, vpbx_id, fwd_uncon, fwd_on_busy, fwd_on_no_ans, enabled, fwd_on_hotline, type, dgtMap from endpoint_tbl where enabled='1' and dname = \'%s\'", domain);
    else
        sprintf(szSQL, 
        "select dname, lclname, phone, account, vpbx_id, fwd_uncon, fwd_on_busy, fwd_on_no_ans, enabled, fwd_on_hotline, type, dgtMap from endpoint_tbl where enabled='1' and dname = \'%s\' and lclname=\'%s\'",
        domain, local);
        
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
            row = sqlGetRow(res);
            strcpy(ep.dName, row[0]);
            strcpy(ep.lclName, row[1]);
         //   strcpy(ep.phoneNum, row[2]);
            strcpy(ep.extnNum, row[2]); //row[3]           
            strcpy(ep.account, row[3]);
            
            ep.acl              = 1;//(U8)strtoul(row[5], &stopStr, 10);
            ep.proto            = PROTOCOL_MGCP;
            ep.bSupCallXfer     = TRUE;
            ep.bSupCallWaiting  = TRUE;
            ep.vPBXid           = strtoul(row[4], &stopStr, 10);
            if ((row[5] == NULLP) || (strlen(row[5]) == 0)) {
                ep.fwdOnAnyPhNum[0] = '\0';
            }
            else {
                strcpy(ep.fwdOnAnyPhNum, row[5]);
            }
            
            if ((row[6] == NULLP) || (strlen(row[6]) == 0)) {
                ep.fwdOnBusyPhNum[0] = '\0';
            }
            else {
                strcpy(ep.fwdOnBusyPhNum, row[6]);
            }
            
            if ((row[7] == NULLP) || (strlen(row[7]) == 0)) {
                ep.fwdOnNoAnsPhNum[0] = '\0';
            }
            else {
                strcpy(ep.fwdOnNoAnsPhNum, row[7]);
            }
            ep.enabled = (U8)strtoul(row[8], &stopStr, 10);
            
            if ((row[9] == NULLP) || (strlen(row[9]) == 0)) {
                ep.fwdOnHotline[0] = '\0';
            }
            else {
                strcpy(ep.fwdOnHotline, row[9]);
            }

            if (row[10][0] != 'o' && row[10][0] != 'O') {
                ep.portTye= PT_FXS;
            } else {
                ep.portTye= PT_FXO;
            }
			
            if ((row[11] == NULLP) || (strlen(row[11]) == 0)) {
                ep.dgtMap[0] = '\0';
            }
            else {
                strcpy(ep.dgtMap, row[11]);
            }

            if (mgScmLoadEp(&ep) != ROK) {
                scmPrint(( "Failed to load endpoint (%s@%s)\n", ep.lclName, ep.dName));
            }
        }
        sqlClear(res);
    }
    else {
        scmPrint(( "SQL_CONN Error: Couldn't execute %s on the server !\n", szSQL));
    }

    sqlConnPut(myData);

    RETVALUE(ROK);
}


/*
*
*       Fun:    mgScmLoadEpFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmLoadWorkGroupFromDb
(
Void
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    mgWorkGroup group;
    U32         num, i;
    
    myData = sqlConnGet();
    sprintf(szSQL, "select vpbx_id, phone, dName1, lclname1, dName2, lclname2, dName3, lclname3, \
		dName4, lclname4, dName5, lclname5, dName6, lclname6, dName7, lclname7, \
		dName8, lclname8 from workgroup_tbl");
        
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
			S32 k =0;
            row = sqlGetRow(res);
			group.vPBXid = strtoul(row[0], &stopStr, 10);
            strcpy(group.phone, row[1]);

			if (row[2][0] != '\0' && row[3][0] != '\0') {
	            strcpy(group.dName[k], row[2]);
	            strcpy(group.lclName[k], row[3]);
				k++;
			}

			if (row[4][0] != '\0' && row[5][0] != '\0') {
	            strcpy(group.dName[k], row[4]);
	            strcpy(group.lclName[k], row[5]);
				k++;
			}

			if (row[6][0] != '\0' && row[7][0] != '\0') {
	            strcpy(group.dName[k], row[6]);
	            strcpy(group.lclName[k], row[7]);
				k++;
			}

			if (row[8][0] != '\0' && row[9][0] != '\0') {
	            strcpy(group.dName[k], row[8]);
	            strcpy(group.lclName[k], row[9]);
				k++;
			}

			//5
			if (row[10][0] != '\0' && row[11][0] != '\0') {
	            strcpy(group.dName[k], row[10]);
	            strcpy(group.lclName[k], row[11]);
				k++;
			}

			if (row[12][0] != '\0' && row[13][0] != '\0') {
	            strcpy(group.dName[k], row[12]);
	            strcpy(group.lclName[k], row[13]);
				k++;
			}

			if (row[14][0] != '\0' && row[15][0] != '\0') {
	            strcpy(group.dName[k], row[14]);
	            strcpy(group.lclName[k], row[15]);
				k++;
			}

			if (row[16][0] != '\0' && row[17][0] != '\0') {
	            strcpy(group.dName[k], row[16]);
	            strcpy(group.lclName[k], row[17]);
				k++;
			}
			group.noOfMembers = k;

			if (k > 0) {
	            if (mgScmLoadWorkGroup(&group) != ROK) {
	                scmPrint(("Failed to load workgroup\n"));
	                exit(-1);
	            }
			}
        }
        sqlClear(res);
    }
    else {
        scmPrint(( "SQL_CONN Error: Couldn't execute %s on the server !\n", szSQL));
    }

    sqlConnPut(myData);

    RETVALUE(ROK);
}

/*
*
*       Fun:    mgScmLoadGenFromDb 
*
*       Desc:   Load a VPBX into memory from databse
*
*       Ret:    ROK
*               RFAILED
*
*       Notes:  None
*
*       File:   mgc_scm.c
*
*/
PRIVATE S16 mgScmLoadGenFromDb
(
Void
)
{
    Txt         szSQL[1024], *stopStr;
    SQL_CONN	*myData;
    SQL_RES	    *res;
    SQL_ROW     row;
    U32         num, i;
    
    myData = sqlConnGet();

    strcpy(szSQL, "select mgc_ip, port, packet_time, silence_sup, codec, cfgport, \
		h323CsPort, maxCall, startPort, use_rbt, bill_server, bill_auth_port, bill_acct_port\
		from gencfg_tbl");
    if (sqlQuery(myData, szSQL, &res) == 0) {
        num = sqlGetNumRows(res);
        for (i = 0; i < num; i++) {
            row = sqlGetRow(res);
            if ((row[0] == NULLP) || (cmStrlen(row[0]) == 0)) {
                mgCfg.mgcIpAddr 	  = 0;
                mgCfg.mgcIpAddrStr[0] = '\0';
            }
            else {
                CmInetNetAddr address;
                if(cmInetConvertStrToIpAddr(cmStrlen(row[0]), row[0], &address) != ROK) {
                    scmPrint(( "Failed to convert IP address (%s).\n", row[0]));
                    RETVALUE(RFAILED);
                }             
                mgCfg.mgcIpAddr = address.u.ipv4NetAddr;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -