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

📄 gc_wrapper.cpp

📁 Conferencing code using Dialogic hardware
💻 CPP
字号:
/**********@@@SOFT@@@WARE@@@COPY@@@RIGHT@@@**********************************
* DIALOGIC CONFIDENTIAL
*
* Copyright (C) 2006-2007 Dialogic Corporation. All Rights Reserved.
* The source code contained or described herein and all documents related
* to the source code ("Material") are owned by Dialogic Corporation or its
* suppliers or licensors. Title to the Material remains with Dialogic Corporation
* or its suppliers and licensors. The Material contains trade secrets and
* proprietary and confidential information of Dialogic or its suppliers and
* licensors. The Material is protected by worldwide copyright and trade secret
* laws and treaty provisions. No part of the Material may be used, copied,
* reproduced, modified, published, uploaded, posted, transmitted, distributed,
* or disclosed in any way without Dialogic's prior express written permission.
*
* No license under any patent, copyright, trade secret or other intellectual
* property right is granted to or conferred upon you by disclosure or delivery
* of the Materials, either expressly, by implication, inducement, estoppel or
* otherwise. Any license under such intellectual property rights must be
* express and approved by Dialogic in writing.
*
***********************************@@@SOFT@@@WARE@@@COPY@@@RIGHT@@@**********/
//***********************************************************************
//***********************************************************************

//
// Some GlobalCall related functions (global scope)
//

#include "pdl.h"

static const char *CNF_MODULE_NAME = "GC_WRAPPER";

static bool gc_started = false; // indicates either gc was started

//*****************************************************************************
// Purpose	: 
//    invoke gc_Start
// Parameters:	
//    [in] pAppParams - Application parameters (from configuration file)
// Returns:	
//    bool
//*****************************************************************************
#define NUM_VIRTBOARDS 1
bool gc_start_wrapper(CnfDemoPrm  * pAppParams) {
bool brc = false;
    if (!gc_started) {
	    GC_START_STRUCT	gclib_start;
	    IPCCLIB_START_DATA cclibStartData;
	    IP_VIRTBOARD virtBoards[NUM_VIRTBOARDS];        // 
        
        // Init data structure and IP_VIRTBOARDS
		INIT_IPCCLIB_START_DATA(&cclibStartData, NUM_VIRTBOARDS, virtBoards);
        for (int inx = 0; inx < NUM_VIRTBOARDS; inx++ ){
              INIT_IP_VIRTBOARD(&(virtBoards[inx]));
        }

	    cclibStartData.num_boards = NUM_VIRTBOARDS;
	    cclibStartData.board_list = &(virtBoards[0]);
		cclibStartData.max_parm_data_size = MAX_SDP_MESSAGE;
		cclibStartData.media_operational_mode = pAppParams->GetCommonPrm()->m_call_control_mode;

        // Specify non-default parameters from configuration file
        int all_calls = pAppParams->GetRequestedNumberOfIptDevices();  // SIP/H323/IP
        int sip_calls = pAppParams->GetRequestedNumberOfIptDevices("SIP");
        int h323_calls = pAppParams->GetRequestedNumberOfIptDevices("H323");
        int ip_calls = pAppParams->GetRequestedNumberOfIptDevices("IP");
	    virtBoards[0].total_max_calls = all_calls;
	    virtBoards[0].h323_max_calls  = h323_calls + ip_calls;
	    virtBoards[0].sip_max_calls   = sip_calls + ip_calls;
        if (sip_calls){
            virtBoards[0].sip_msginfo_mask  = IP_SIP_MSGINFO_ENABLE | IP_SIP_MIME_ENABLE  ;
		                    //  IP_SIP_MSGINFO_ENABLE 
		                    //  IP_SIP_MIME_ENABLE  
		                    //  IP_SIP_FASTSTART_CODERS_IN_OFFERED
        }
        // Specify cc libraries to start
        int num_libs = 0;
        CCLIB_START_STRUCT cclib_start[3];
            cclib_start[num_libs].cclib_name = "GC_H3R_LIB";
            cclib_start[num_libs++].cclib_data = &cclibStartData;

            cclib_start[num_libs].cclib_name = "GC_IPM_LIB";
            cclib_start[num_libs++].cclib_data = 0;

            if ( pAppParams->GetRequestedNumberOfDtiDevices() > 0 ){
                 cclib_start[num_libs].cclib_name = "GC_DM3CC_LIB";
                 cclib_start[num_libs++].cclib_data = 0;
            }
            
    	gclib_start.num_cclibs = num_libs;
	    gclib_start.cclib_list = cclib_start;

        gc_dump(&gclib_start, LOG_DBG,  glb_pAppLog, CNF_MODULE_NAME);

        GLBLOG(LOG_DBG, CNF_MODULE_NAME,"***Entering gc_Start()");
          int rc =  gc_Start(&gclib_start);
        GLBLOG(RC(rc), CNF_MODULE_NAME,
                    "%d = gc_Start(%d ipt devices)",
                    rc, pAppParams->GetRequestedNumberOfIptDevices());

        if (rc == GC_SUCCESS){
            gc_started = true;
            brc = true;
        } else {
            process_gc_error(CNF_MODULE_NAME);
        } 
    }else { 
        GLBLOG(LOG_ERR1, CNF_MODULE_NAME,
                         "gc_Start:: GC is already started");
    }
 return brc;
}//	End of gc_start_wrapper()

//*****************************************************************************
// Purpose	: 
//    invoke gc_Stop
// Parameters:	
//    none
// Returns:	
//    bool
//*****************************************************************************
bool gc_stop_wrapper() {
bool brc = true;
   if ( gc_started) {
        GLBLOG(LOG_DBG, CNF_MODULE_NAME, "***Entering gc_Stop()");
          int rc = gc_Stop();
        GLBLOG(RC(rc), CNF_MODULE_NAME, "%d = gc_Stop()", rc );
        if (rc != GC_SUCCESS) {
            process_gc_error(CNF_MODULE_NAME);
            brc = false;
        }
        gc_started = false;
   }
   return brc;
} // End of gc_stop_wrapper()

//*****************************************************************************
// Purpose	: 
//    process latest gc error
// Parameters:	
//    [in] object name - used for Log purposes (use device name or module name)
// Returns:	
//    bool - false indicates error while processing - too bad :( 
//*****************************************************************************
bool process_gc_error(const char *name){
  // process error return as shown
GC_INFO gc_error_info;
int rc;
bool brc = true;
    rc = gc_ErrorInfo( &gc_error_info );
    GLBLOG(RC(rc), name, "%d = gc_ErrorInfo( &gc_error_info )", rc);
    if (rc == GC_SUCCESS) {
        gc_dump(&gc_error_info, LOG_APP, GLBLOGOBJ, CNF_MODULE_NAME);
    }else {
        brc = false;
    }
 return brc;
} // End of process_gc_error()

//*****************************************************************************
// Purpose	: 
//   Dump structure GC_INFO 
// Parameters:	
//    [in] GC_UNFO structure, Log type, Log object and name of the logging object
// Returns:	
//    none
//*****************************************************************************
void gc_dump(GC_INFO *pInfo, MSG_TYPE Msg, CGenLog *pLog, const char *name){
    pLog->Log(Msg, name, "GC    ErrorValue: = 0x%x - %s",pInfo->gcValue, pInfo->gcMsg);
    pLog->Log(Msg, name, "CClib ErrorValue: = 0x%x - %s",pInfo->ccValue, pInfo->ccMsg);
    pLog->Log(Msg, name, "CClib             = 0x%x - %s",pInfo->ccLibId, pInfo->ccLibName);
 return;
} // End of gc_dump()

//*****************************************************************************
// Purpose	: 
//   Dump structure GC_START
// Parameters:	
//    [in] GC_UNFO structure, Log type, Log object and name of the logging object
// Returns:	
//    none
//*****************************************************************************
extern void gc_dump(GC_START_STRUCT *pStart,MSG_TYPE Msg, CGenLog *pLog, const char *name){

    pLog->Log(Msg, name, "Num_cclibs = %d", pStart->num_cclibs);
    int inx;
    for (inx = 0; inx < pStart->num_cclibs; inx++) {
         gc_dump(&(pStart->cclib_list[inx]),Msg,pLog,name);
    }
} // End of gc_dump()

//*****************************************************************************
// Purpose	: 
//   Dump structure GC_START
// Parameters:	
//    [in] GC_UNFO structure, Log type, Log object and name of the logging object
// Returns:	
//    none
//*****************************************************************************
extern void gc_dump(CCLIB_START_STRUCT *pStart,MSG_TYPE Msg, CGenLog *pLog, const char *name){

    pLog->Log(Msg, name, " cclib_name  = %s",   pStart->cclib_name);
    pLog->Log(Msg, name, "  cclib_data = 0x%x", pStart->cclib_data);
} // End of gc_dump()

⌨️ 快捷键说明

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