📄 config.c
字号:
/*--------------------------------------------------------------------------------------------------------------------------------
|
| Project: VoiceLink TB640 sample (ISDN)
|
| Filename: config.c
|
| Copyright: TelcoBridges 2002-2003, All Rights Reserved
|
| Description: This file contains the functions to dynamically configure a set of trunks and stacks asynchronously
|
| Notes: Tabs = 4
|
*-------------------------------------------------------------------------------------------------------------------------------
|
| Revision: $Revision: 1.83.2.1 $
|
*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------
| Includes
*------------------------------------------------------------------------------------------------------------------------------*/
/* System includes */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
/* Local includes */
#include "tbx_ostypes.h"
#include "tbx_id.h"
#include "tbx_result.h"
#include "tbx_msg.h"
#include "tbx_std.h"
#include "tbx_api.h"
#include "tbx_featmgr.h"
#include "tb640_id.h"
#include "tb640_handle.h"
#include "tb640_adpmgr.h"
#include "tb640_trkmgr.h"
#include "tb640_ctbusmgr.h"
#include "tb640_isdnmgr.h"
#include "tb640_connmgr.h"
#include "tbx_os_wrapper.h"
#include "tbxfeatures.h"
#include "tbx_hash.h"
#include "tbx_pool_of_buffers.h"
#include "tbx_timer.h"
#include "tbxasync.h"
#include "tbx_cli.h"
#include "isdn.h"
#include "prototypes.h"
#include "macros.h"
/*--------------------------------------------------------------------------------------------------------------------------------
| Forward declarations
*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------
| Defines
*------------------------------------------------------------------------------------------------------------------------------*/
/* Timeout in msec to wait in the TBXReceiveMsg() function while waiting for adapters to register */
#define TB640_ISDN_ADAPTER_LOOP_MSG_RECEIVE_TIMEOUT_MSEC 0
/* Timeout value for TbxReceiveMsg() used by the operation library */
#define TB640_ISDN_OPERATION_RECEIVE_MSG_TIMEOUT_MSEC 250
/* Maximum number of operation active in one library at the same time */
#define TB640_ISDN_MAX_OPERATION_PER_LIBRARY (TB640_ISDN_MAX_TRUNK_PER_OPERATION_LIBRARY * TB640_ISDN_MAX_TIMESLOT_IN_TRUNK * 4)
/* Allocation granularity for the operation library */
#define TB640_ISDN_ALLOCATION_GRANULARITY 512
/* Max concurrent request per operation library */
#define TB640_ISDN_MAX_CONCURRENT_REQUEST_PER_LIBRARY (TB640_ISDN_MAX_OPERATION_PER_LIBRARY * 10)
/* Maximum timeout waiting for adapters attach/detach */
#define TB640_ISDN_ADAPTER_ATTACH_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for adapters Ctbus alloc/free */
#define TB640_ISDN_ADAPTER_CTBUS_ALLOC_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for adapters Trunk alloc/free */
#define TB640_ISDN_ADAPTER_TRUNK_ALLOC_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for adapters Trunk activation/maintenance */
#define TB640_ISDN_ADAPTER_TRUNK_ACTIVATION_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for adapters trunk resources alloc/free */
#define TB640_ISDN_ADAPTER_TRUNK_RESOURCE_ALLOC_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for connection destruction */
#define TB640_ISDN_ADAPTER_CONNECTION_DESTRUCTION_TIMEOUT_MSEC (10*1000)
/* Maximum timeout waiting for adapters stack alloc/free */
#define TB640_ISDN_ADAPTER_STACK_ALLOC_TIMEOUT_MSEC (45*1000)
/* Maximum timeout waiting for adapters B-channel states retrieval */
#define TB640_ISDN_ADAPTER_BCHANNEL_STATES_GET_TIMEOUT_MSEC (45*1000)
/*--------------------------------------------------------------------------------------------------------------------------------
| Types
*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------
| Versioning
*------------------------------------------------------------------------------------------------------------------------------*/
#ifdef WIN32
/*@unused@*/ static char g_szFileVersion [] = "$Revision: 1.83.2.1 $";
#endif
/*--------------------------------------------------------------------------------------------------------------------------------
| Global variables
*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------
| Macros
*------------------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------------------
| Function Prototypes
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT TB640IsdnOpenAdapters (void);
TBX_RESULT TB640IsdnCloseAdapters (void);
TBX_RESULT TB640IsdnFreeCtBusResources (void);
TBX_RESULT TB640IsdnFreeTrunks (void);
TBX_RESULT TB640IsdnFreeTrunkResources (void);
TBX_RESULT TB640IsdnDestroyConnections (void);
TBX_RESULT TB640IsdnFreeStacks (void);
TBX_RESULT TB640IsdnMaintenanceTrunks (void);
/*--------------------------------------------------------------------------------------------------------------------------------
| Implementation
*------------------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640IsdnConfigureSystem: This function allocates and configure the trunks, stacks, CTBus resources and operation librairies
| required to run this application
|
| ~ : No arguments used
|
| Note : ~
|
| Return : TBX_RESULT_OK
| TBX_RESULT_FAIL
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640IsdnConfigureSystem (void)
{
TBX_LIB_PARAMS LibParam;
TBX_RESULT result;
TBX_UINT32 un32Count;
TBX_UINT32 un32Count2;
TBX_MSG_HANDLE hMsg;
TBX_ASYNC_LIB_PARAMS OperationLibParams;
PTB640_ISDN_ADAPTER_INFO pAdapterInfo;
PTBX_EVT_API_NOTIF_ADAPTER_ADDED pEvtAdapterAdded;
PTBX_EVT_API_NOTIF_ADAPTER_REMOVED pEvtAdapterRemoved;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/* Initialize local variables */
pEvtAdapterAdded = NULL;
pEvtAdapterRemoved = NULL;
hMsg = NULL;
/* Initialize stress-test statistics semaphore */
TBX_SEM_CREATE (&g_StressStatsSem, 1, 1);
/* Initializes the TBX library */
memset (&LibParam, 0, sizeof (LibParam));
LibParam.un32StructVersion = 1;
LibParam.un32WatchdogTimeoutSec = TB640_ISDN_ADAPTER_WATCHDOG_TIMEOUT_SEC;
LibParam.TransportType = TBX_TRANSPORT_TYPE_ETHERNET;
LibParam.MsgRxThreadPrio = TBX_MSG_RX_THREAD_PRIO_HIGHER;
LibParam.un32SendFifoSize = TBX_SEND_FIFO_SIZE_DEFAULT;
LibParam.pMsgTrace = NULL;
LibParam.pStderr = g_AppContext->pLogFile;
if( g_AppContext->un32GatewayPortNumber > 0 )
{
/* get the first gateway port and put it in the default gateway parameter */
LibParam.un16TbxGwPort = (TBX_UINT16)g_AppContext->aun32GatewayPort[0];
/* get all the other gateway port */
if( g_AppContext->un32GatewayPortNumber > 1 )
{
TBX_UINT32 un32GwCount;
for( un32GwCount = 1; un32GwCount < g_AppContext->un32GatewayPortNumber; un32GwCount++ )
{
LibParam.aun16ExtraTbxGwPort[un32GwCount-1] = (TBX_UINT16)g_AppContext->aun32GatewayPort[un32GwCount];
}
}
}
else
{
/* set default gateway */
LibParam.un16TbxGwPort = 0;
}
#if 0
/* Network redundancy parameters suited for application debugging */
LibParam.NetworkRedundancyParams.un32StructVersion = 1;
LibParam.NetworkRedundancyParams.un32PollDelayMs = 0;
LibParam.NetworkRedundancyParams.un32NetworkDownDelayMs = TBX_NETWORK_REDUNDANCY_DEFAULT_NETWORK_DOWN_DELAY_MS;
LibParam.NetworkRedundancyParams.un32AdapterDownDelayMs = TBX_NETWORK_REDUNDANCY_DEFAULT_ADAPTER_DOWN_DELAY_MS;
LibParam.NetworkRedundancyParams.fUseNetworkGw0 = TBX_TRUE;
LibParam.NetworkRedundancyParams.fUseNetworkGw1 = TBX_TRUE;
LibParam.NetworkRedundancyParams.un32PreferredGateway = 1;
#endif
strcpy( LibParam.szApplicationName, "ISDN" );
/* Opening the TBX library */
result = TBXOpenLib (&LibParam, &(g_AppContext->hTbxLib));
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(result, 0, "Unable to open TBX library");
}
TB640_ISDN_LOG (TRACE_LEVEL_4, "+--------------------------------------------------------------\n");
TB640_ISDN_LOG (TRACE_LEVEL_4, "| TBX Library %s (0x%08X)\n", LibParam.szBuildTag, LibParam.un32BuildNumber);
TB640_ISDN_LOG (TRACE_LEVEL_4, "+--------------------------------------------------------------\n\n");
/* Create the op context semaphores */
for (un32Count=0; un32Count<g_AppContext->un32NbAdapter; un32Count++)
{
pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Count]);
for (un32Count2=0; un32Count2<TB640_ISDN_NB_OPERATION_LIBRARY_REQUIRED; un32Count2++)
{
TBX_SEM_CREATE (&(pAdapterInfo->Lock.aOperationLibSem[un32Count2]), 1, 1);
pAdapterInfo->Lock.apszOperationLibSemFile[un32Count2] = "";
}
}
/* Open adapters specified in configuration file */
result = TB640IsdnOpenAdapters ();
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(result, 0, "Unable to open requested adapters");
}
/* Open the operation libraries */
for (un32Count=0; un32Count<g_AppContext->un32NbAdapter; un32Count++)
{
pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Count]);
/* Initialize the adapter states semaphore */
TBX_SEM_CREATE (&(pAdapterInfo->AdapterSem), 1, 1);
pAdapterInfo->un32NbSyncReceived = 0;
/* Initialize the adapter removal synchronization semaphore */
TBX_SEM_CREATE (&(pAdapterInfo->AttachOrDetachOpDoneSem), 0, TB640_ISDN_MAX_OPERATION_PER_LIBRARY);
/* Initialize the transiant calls semaphore */
TBX_SEM_CREATE (&(pAdapterInfo->TransientCallsSem), 1, 1);
pAdapterInfo->un32TransientCalls = 0;
for (un32Count2=0; un32Count2<(((pAdapterInfo->un32NbTrunk-1)/TB640_ISDN_MAX_TRUNK_PER_OPERATION_LIBRARY)+1); un32Count2++)
{
TBX_FILTER_PARAMS AsyncLibCustomFilter;
/* One more operation library */
pAdapterInfo->un32NbOperationLib++;
/* Configure the library parameters */
memset( &OperationLibParams, 0, sizeof(OperationLibParams) );
OperationLibParams.un32ReceiveTimeoutMSec = TB640_ISDN_OPERATION_RECEIVE_MSG_TIMEOUT_MSEC;
OperationLibParams.un32OpContextMaxCount = TB640_ISDN_MAX_OPERATION_PER_LIBRARY;
OperationLibParams.un32OpContextAllocGranularity = TB640_ISDN_ALLOCATION_GRANULARITY;
OperationLibParams.un32OpContextUserContextSize = sizeof (TB640_ISDN_CALL_CONTEXT);
OperationLibParams.un32RequestContextMaxCount = TB640_ISDN_MAX_CONCURRENT_REQUEST_PER_LIBRARY;
OperationLibParams.un32RequestContextAllocGranularity = TB640_ISDN_ALLOCATION_GRANULARITY;
OperationLibParams.pfnUnknowMsgHandler = TB640IsdnEventMessageHandler;
OperationLibParams.pfnAdapterRemovedHandler = TB640IsdnAsyncLibAdapterRemovedHandler;
OperationLibParams.pvAppContext = TB640_ISDN_CREATE_APP_CONTEXT (un32Count, un32Count2);
OperationLibParams.pfnErrorPrint = TB640IsdnAsyncLibErrorPrint;
/* Add one custom filter to async lib */
OperationLibParams.un32NbCustomFilters = 1;
OperationLibParams.paCustomFilters = &AsyncLibCustomFilter;
AsyncLibCustomFilter.un32StructVersion = 1;
AsyncLibCustomFilter.FilterMask = TBX_FILTER_MSG_ID | TBX_FILTER_ADAPTER_HANDLE;
AsyncLibCustomFilter.MsgId = TB640_MSG_ID_ADAPTER_NOTIF_CPU_REPORT;
AsyncLibCustomFilter.hAdapter = pAdapterInfo->hAdapter;
/* Configure the unique ID (taken from the configuration file */
pAdapterInfo->aun64UniqueId [un32Count2] = g_AppContext->un64AppUniqueId + (TBX_UINT64)un32Count2;
/* Open the library */
result = TBXAsyncOpen (
g_AppContext->hTbxLib,
pAdapterInfo->hAdapter,
&OperationLibParams,
&(pAdapterInfo->ahOperationLib [un32Count2]),
&(pAdapterInfo->aun64UniqueId [un32Count2]));
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(result, 0, "Unable to open operation library");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -