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

📄 config.c

📁 telcobridges pri develop,30b+d
💻 C
📖 第 1 页 / 共 5 页
字号:
/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |	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 + -