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

📄 parse.c

📁 telcobridges pri develop,30b+d
💻 C
📖 第 1 页 / 共 5 页
字号:
/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |	Project:    	VoiceLink TB640 sample (ISDN)
 |
 |	Filename:   	parse.c
 |
 |	Copyright:  	TelcoBridges 2002-2003, All Rights Reserved
 |
 |	Description:	This file contains the configuration script parsing
 |
 |	Notes:      	Tabs = 4
 |
 *-------------------------------------------------------------------------------------------------------------------------------
 |
 |	Revision:   	$Revision: 1.27.2.1 $
 |
 *------------------------------------------------------------------------------------------------------------------------------*/


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Includes
 *------------------------------------------------------------------------------------------------------------------------------*/

/* System includes */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <ctype.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_isdnmgr.h"
#include "tbx_os_wrapper.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
 *------------------------------------------------------------------------------------------------------------------------------*/
#define TB640_ISDN_PARSING_DELIMITERS				" \t\n\r"
#define TB640_ISDN_LINE_PARSING_DELIMITERS			", \t\n\r"


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Types
 *------------------------------------------------------------------------------------------------------------------------------*/

/*
 | The following enumeration describes the different types of token that can be read from the configuration file
 */
typedef enum _TB640_ISDN_PARSING_TOKEN
{
	TB640_ISDN_PARSING_TOKEN_COMMENT				= 0,
	TB640_ISDN_PARSING_TOKEN_PARAMS_GROUP_START		= 1,
	TB640_ISDN_PARSING_TOKEN_TRUNK_GROUP_START		= 2,
	TB640_ISDN_PARSING_TOKEN_GROUP_END				= 3,
	TB640_ISDN_PARSING_TOKEN_TRUNK_CONFIG			= 4,
	TB640_ISDN_PARSING_TOKEN_STACK_CONFIG			= 5,
	TB640_ISDN_PARSING_TOKEN_CALL_CONFIG			= 6,
	TB640_ISDN_PARSING_TOKEN_LOG_FILENAME			= 7,
	TB640_ISDN_PARSING_TOKEN_LOG_FILE_LEVEL			= 8,
	TB640_ISDN_PARSING_TOKEN_LOG_DISPLAY_LEVEL		= 9,
	TB640_ISDN_PARSING_TOKEN_ADAPTER_GROUP_START	= 10,
	TB640_ISDN_PARSING_TOKEN_APP_UNIQUE_ID			= 11,
	TB640_ISDN_PARSING_TOKEN_MIN_REFRESH			= 12,
	TB640_ISDN_PARSING_TOKEN_CTBUS_CONNECTION		= 13,
	TB640_ISDN_PARSING_TOKEN_DO_CONNECTION			= 14,
	TB640_ISDN_PARSING_TOKEN_GATEWAY_PORT			= 15,
	TB640_ISDN_PARSING_TOKEN_UNKNOWN				= 16

} TB640_ISDN_PARSING_TOKEN, *PTB640_ISDN_PARSING_TOKEN;


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Versioning
 *------------------------------------------------------------------------------------------------------------------------------*/
#ifdef WIN32
	/*@unused@*/ static char g_szFileVersion [] = "$Revision: 1.27.2.1 $";
#endif


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Global variables
 *------------------------------------------------------------------------------------------------------------------------------*/

static TB640_ISDN_PARSING_ENTRY			g_aParseMainConfigItems [] = {
	{	".PARAMS",				TB640_ISDN_PARSING_TOKEN_PARAMS_GROUP_START},
	{	".TRUNK",				TB640_ISDN_PARSING_TOKEN_TRUNK_GROUP_START},
	{	".END",					TB640_ISDN_PARSING_TOKEN_GROUP_END},
	{	"TRUNK_CFG=",			TB640_ISDN_PARSING_TOKEN_TRUNK_CONFIG},
	{	"STACK_CFG=",			TB640_ISDN_PARSING_TOKEN_STACK_CONFIG},
	{	"CALL_CFG=",			TB640_ISDN_PARSING_TOKEN_CALL_CONFIG},
	{	"LOG_FILENAME=",		TB640_ISDN_PARSING_TOKEN_LOG_FILENAME},
	{	"LOG_FILE_LEVEL=",		TB640_ISDN_PARSING_TOKEN_LOG_FILE_LEVEL},
	{	"LOG_DISPLAY_LEVEL=",	TB640_ISDN_PARSING_TOKEN_LOG_DISPLAY_LEVEL},
	{	"APP_UNIQUE_ID=",		TB640_ISDN_PARSING_TOKEN_APP_UNIQUE_ID},
	{	".ADAPTER=",			TB640_ISDN_PARSING_TOKEN_ADAPTER_GROUP_START},
	{	"MIN_REFRESH=",			TB640_ISDN_PARSING_TOKEN_MIN_REFRESH},
	{	"CTBUS_CONNECTION=",	TB640_ISDN_PARSING_TOKEN_CTBUS_CONNECTION},
	{	"DO_CONNECTION=",		TB640_ISDN_PARSING_TOKEN_DO_CONNECTION},
	{	"TBX_GW_PORT=",			TB640_ISDN_PARSING_TOKEN_GATEWAY_PORT},
	{	NULL,					0}
};

static TB640_ISDN_PARSING_ENTRY			g_aParseBoolean [] = {
	{	"TRUE",					TBX_TRUE},
	{	"1",					TBX_TRUE},
	{	"Y",					TBX_TRUE},
	{	"FALSE",				TBX_FALSE},
	{	"0",					TBX_FALSE},
	{	"N",					TBX_FALSE},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkTypes [] = {
	{	"E1",					TB640_TRUNK_TYPE_E1},
	{	"T1",					TB640_TRUNK_TYPE_T1},
	{	"J1",					TB640_TRUNK_TYPE_J1},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkE1Framing [] = {
	{	"DFRAME",				TB640_E1_FRAMING_DFRAME_NOCRC4},
	{	"MFRAME",				TB640_E1_FRAMING_MFRAME_CRC4},
	{	"AUTO",					TB640_E1_FRAMING_AUTO},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkE1Encoding [] = {
	{	"HDB3",					TB640_E1_LINE_ENCODING_HDB3},
	{	"AMI",					TB640_E1_LINE_ENCODING_AMI},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkE1Termination [] = {
	{	"SHORT",				TB640_E1_LINE_TERMINATION_SHORT},
	{	"LONG",					TB640_E1_LINE_TERMINATION_LONG},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkT1Framing [] = {
	{	"SF",					TB640_T1_FRAMING_SF},
	{	"ESF",					TB640_T1_FRAMING_ESF},
	{	"SLC96",				TB640_T1_FRAMING_SLC96},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkT1Encoding [] = {
	{	"B8ZS",					TB640_T1_LINE_ENCODING_B8ZS},
	{	"AMI",					TB640_T1_LINE_ENCODING_AMI},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkT1Termination [] = {
	{	"SHORT",				TB640_T1_LINE_TERMINATION_SHORT},
	{	"LONG",					TB640_T1_LINE_TERMINATION_LONG},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkJ1Framing [] = {
	{	"SF",					TB640_J1_FRAMING_SF},
	{	"ESF",					TB640_J1_FRAMING_ESF},
	{	"SLC96",				TB640_J1_FRAMING_SLC96},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkJ1Encoding [] = {
	{	"B8ZS",					TB640_J1_LINE_ENCODING_B8ZS},
	{	"AMI",					TB640_J1_LINE_ENCODING_AMI},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseTrunkJ1Termination [] = {
	{	"SHORT",				TB640_J1_LINE_TERMINATION_SHORT},
	{	"LONG",					TB640_J1_LINE_TERMINATION_LONG},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseStackVariant [] = {
	{	"4ESS",					TB640_ISDN_VARIANT_4ESS},
	{	"AUS",					TB640_ISDN_VARIANT_AUS_PRI},
	{	"5ESS",					TB640_ISDN_VARIANT_5ESS_PRI},
	{	"NET5",					TB640_ISDN_VARIANT_NET5},
	{	"DMS",					TB640_ISDN_VARIANT_DMS_PRI},
	{	"NI2",					TB640_ISDN_VARIANT_US_NI2_PRI},
	{	"HK",					TB640_ISDN_VARIANT_HONG_KONG_PRI},
	{	"INS",					TB640_ISDN_VARIANT_JAPAN_INS},
	{	NULL,					0}
};

TB640_ISDN_PARSING_ENTRY			g_aParseStackSide [] = {
	{	"USER",					TB640_PROTOCOL_SIDE_USER},
	{	"NETWORK",				TB640_PROTOCOL_SIDE_NETWORK},
	{	NULL,					0}
};

/*--------------------------------------------------------------------------------------------------------------------------------
 |  Macros
 *------------------------------------------------------------------------------------------------------------------------------*/

#define TB640_ISDN_PARSE_ERROR_DISPLAY(__Line__,__Index__,__pOriginalString__,__pErrorDescriptionString__)	\
{																											\
	TBX_UINT32			un32Count;																			\
	TBX_CHAR			szPrintLine [TB640_ISDN_MAX_CONFIGURATION_LINE_LENGTH];								\
																											\
	TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "Error in configuration file at line %d\n", (__Line__));			\
	TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "\t%s\n", (__pOriginalString__));								\
	szPrintLine [0] = '\t';																					\
	for (un32Count=0; un32Count<(TBX_UINT32)(__Index__);un32Count++)										\
	{																										\
		szPrintLine [un32Count+1] = ' ';																	\
	}																										\
	szPrintLine [un32Count+1] = 0;																			\
	sprintf (&(szPrintLine [un32Count+1]), "^ %s\n", (__pErrorDescriptionString__));						\
	TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, szPrintLine);													\
}

#define TB640_ISDN_PARSE_TRUNK_LINE_VALIDATE(__TokenTrunk__)												\
{																											\
	if (fTrunkGroup == TBX_FALSE) 																			\
	{																										\
		TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected configuration line (must be within a trunk group)");	\
		TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
	}																										\
	if (TB640_ISDN_PARSING_TOKEN_TRUNK_CONFIG == (__TokenTrunk__))											\
	{																										\
		if (fTrunkConfigured != TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Trunk already configured in the group");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
	}																											\
	else if (TB640_ISDN_PARSING_TOKEN_STACK_CONFIG == (__TokenTrunk__))											\
	{																											\
		if (fStackConfigured != TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Stack already configured in the group");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
		if (fTrunkConfigured == TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Trunk configuration needs to be specified before stack configuration");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
	}																											\
	else if (TB640_ISDN_PARSING_TOKEN_CALL_CONFIG == (__TokenTrunk__))											\
	{																											\
		if (fCallConfigured != TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Call already configured in the group");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
		if (fStackConfigured == TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Stack configuration needs to be specified before call configuration");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
		if (fTrunkConfigured == TBX_FALSE)																		\
		{																										\
			TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Trunk configuration needs to be specified before call configuration");	\
			TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
		}																										\
	}																											\
	else																										\
	{																											\
		TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected trunk token");		\
		TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																		\
	}																											\
}


#define TB640_ISDN_PARSE_PARAMS_LINE_VALIDATE()																\
{																											\
	if (fParamGroup == TBX_FALSE) 																			\
	{																										\
		TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected configuration line (must be within a param group)");	\
		TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
	}																										\
}


#define TB640_ISDN_PARSE_GET_PARAMETER(__aParseEntries__,__pun32Value__,__pErrorString__)					\
{																											\
	*(__pun32Value__) = (TBX_UINT32)-1;																		\
	TB640IsdnCompareEntries (pArg, (__aParseEntries__), (PTBX_UINT32)(__pun32Value__), &un32SizeOfEntry);	\
	if ((TBX_UINT32)-1 == *(__pun32Value__))																				\
	{																										\
		TB640_ISDN_PARSE_ERROR_DISPLAY (in_un32Line, (pArg-szLine+in_un32Index), in_pszOriginalLine, (__pErrorString__));	\
		TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);																	\
	}																										\
}

#define TB640_ISDN_PARSE_GET_TRUNK_PARAMETER(__variable__,__aParseE1Entries__,__pE1ErrorString,__aParseT1Entries__,__pT1ErrorString,__aParseJ1Entries__,__pJ1ErrorString)	\
{																													\
	if (pTrunkCfg->Type == TB640_TRUNK_TYPE_E1)																		\
	{																												\
		/* Get the E1 framing type */																				\
		TB640_ISDN_PARSE_GET_PARAMETER ((__aParseE1Entries__), &(pTrunkCfg->Cfg.E1.__variable__), (__pE1ErrorString));	\
	}																												\
	else if (pTrunkCfg->Type == TB640_TRUNK_TYPE_T1)																\
	{																												\
		/* Get the T1 framing type */																				\
		TB640_ISDN_PARSE_GET_PARAMETER ((__aParseT1Entries__), &(pTrunkCfg->Cfg.T1.__variable__), (__pT1ErrorString));	\
	}																												\
	else																											\
	{																												\
		/* Get the J1 framing type */																				\
		TB640_ISDN_PARSE_GET_PARAMETER ((__aParseJ1Entries__), &(pTrunkCfg->Cfg.J1.__variable__), (__pJ1ErrorString));	\
	}																												\
}


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Function Prototypes
 *------------------------------------------------------------------------------------------------------------------------------*/

TBX_RESULT TB640IsdnParseTrunkConfigurationLine(
  IN		const PTBX_CHAR				in_pszLine,
  IN		const PTBX_CHAR				in_pszOriginalLine,
  IN		TBX_UINT32					in_un32Line,
  IN		TBX_UINT32					in_un32Index,
  IN		TBX_UINT32					in_un32Adapter,

⌨️ 快捷键说明

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