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

📄 parse.c

📁 telcobridges pri develop,30b+d
💻 C
📖 第 1 页 / 共 5 页
字号:
  OUT		PTBX_UINT32					out_pun32TrunkNb);

TBX_RESULT TB640IsdnParseStackConfigurationLine(
  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,
  IN		TBX_UINT32					in_un32TrunkNb);

TBX_RESULT TB640IsdnParseCTBusConfigurationLine(
  IN		const PTBX_CHAR				in_pszLine,
  IN		const PTBX_CHAR				in_pszOriginalLine,
  IN		TBX_UINT32					in_un32Line,
  IN		TBX_UINT32					in_un32Index,
  IN		PTBX_BOOL					out_fCTBusConn);

TBX_RESULT
TB640IsdnParseDoConfigurationLine(
  IN		const PTBX_CHAR				in_pszLine,
  IN		const PTBX_CHAR				in_pszOriginalLine,
  IN		TBX_UINT32					in_un32Line,
  IN		TBX_UINT32					in_un32Index,
  IN		PTBX_BOOL					out_pfDoConn);

TBX_RESULT TB640IsdnParseCallConfigurationLine(
  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,
  IN		TBX_UINT32					in_un32TrunkNb);

/* Utility functions */

TBX_RESULT TB640IsdnParseToken(
  IN		const PTBX_CHAR				in_pszLine,
  OUT		PTB640_ISDN_PARSING_TOKEN	out_pTokenType,
  OUT		PTBX_CHAR *					out_ppszToken,
  OUT		PTBX_CHAR *					out_ppszArgument);

TBX_RESULT TB640IsdnCompareEntries(
  IN		const PTBX_CHAR				in_pszLine,
  IN		PTB640_ISDN_PARSING_ENTRY	in_paParsingEntries,
  OUT		PTBX_UINT32					out_pun32Value,
  OUT		PTBX_UINT32					out_pun32SizeOfEntry);

/*--------------------------------------------------------------------------------------------------------------------------------
 |  Implementation
 *------------------------------------------------------------------------------------------------------------------------------*/



/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640IsdnParseAndLoadConfiguration:	This function parses the configuration file, validates its content and load the
 |										configuration value into our local structure.  It does not allocate any resources nor
 |										stacks.  This is done dynamically afterwards.
 |
 |  in_pszFilename	:	Pointer to the filename to open
 |
 |  Note			:	~
 |
 |  Return          :	TBX_RESULT_OK
 |						TBX_RESULT_NOT_FOUND
 |						TBX_RESULT_FAIL
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640IsdnParseAndLoadConfiguration(
  IN		PTBX_CHAR					in_pszFilename)
{
	FILE *						pFileIn;
	TBX_CHAR					szLine [TB640_ISDN_MAX_CONFIGURATION_LINE_LENGTH];
	TBX_UINT32					un32Line;
	TBX_UINT32					un32Adapter;
	TBX_UINT32					un32TrunkNb;
	TBX_RESULT					result;
	TB640_ISDN_PARSING_TOKEN	Token;
	PTBX_CHAR					pszLine;
	PTBX_CHAR					pszToken;
	PTBX_CHAR					pszArgument;
	TBX_BOOL					fUniqueIdPresent;
	TBX_BOOL					fLogFilenamePresent;
	TBX_BOOL					fLogFileLevelPresent;
	TBX_BOOL					fLogDisplayLevelPresent;
	TBX_BOOL					fParamGroup;
	TBX_BOOL					fTrunkGroup;
	TBX_BOOL					fAdapterGroup;
	TBX_BOOL					fTrunkConfigured;
	TBX_BOOL					fStackConfigured;
	TBX_BOOL					fCallConfigured;
	TBX_BOOL					fRefreshRateConfigured;
	TBX_BOOL					fCTBusConnConfigured;
	TBX_BOOL					fGatewayPortConfigured;
	TBX_BOOL					fDoConnConfigured;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pFileIn = NULL;
		fParamGroup = TBX_FALSE;
		fTrunkGroup = TBX_FALSE;
		fAdapterGroup = TBX_FALSE;
		fLogFilenamePresent = TBX_FALSE;
		fLogFileLevelPresent = TBX_FALSE;
		fLogDisplayLevelPresent = TBX_FALSE;
		fUniqueIdPresent = TBX_FALSE;
		fRefreshRateConfigured = TBX_FALSE;
		fCTBusConnConfigured = TBX_FALSE;
		un32Adapter = (TBX_UINT32)-1;

		/* Try to open the configuration file in text mode */
		pFileIn = fopen (in_pszFilename, "r");
		if (pFileIn == NULL)
		{
			TBX_EXIT_ERROR(TBX_RESULT_NOT_FOUND, 0, "Unable to open configuration file");
		}

		/* Parse every line */
		un32Line = 0;
		while (!feof (pFileIn))
		{
			/* Read one line from the configuration file */
			un32Line++;
			szLine[0] = '\0';
			pszLine = fgets (szLine, sizeof(szLine),pFileIn);

			TbxStringRemoveBlanks( szLine );

			/* Have we reached the end-of-file ? */
			if (pszLine == NULL)
			{
				continue;
			}

			/* Convert to caps */
			TB640IsdnToUpper (pszLine);

			/* Parse the token */
			TB640IsdnParseToken (pszLine, &Token, &pszToken, &pszArgument);

			/* Decide what to do with this token */
			switch (Token)
			{

			/* Comment processing */
			case TB640_ISDN_PARSING_TOKEN_COMMENT:
				/* Go to next line */
				break;

			/* Adapter group start */
			case TB640_ISDN_PARSING_TOKEN_ADAPTER_GROUP_START:
				if ((fAdapterGroup == TBX_FALSE) && (fParamGroup == TBX_FALSE))
				{
					if (++un32Adapter <= TB640_ISDN_MAX_SUPPORTED_ADAPTERS)
					{
						fAdapterGroup = TBX_TRUE;
						g_AppContext->un32NbAdapter++;
						strcpy (g_AppContext->ahAdapterInfo [un32Adapter].szAdapterName, pszArgument);
					}
					else
					{
						TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Too many adapter group");
						TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
					}
				}
				else
				{
					TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected .ADAPTER group start");
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				}
				break;

			/* Param group start flag processing */
			case TB640_ISDN_PARSING_TOKEN_PARAMS_GROUP_START:
				if ((fParamGroup == TBX_FALSE) && (fTrunkGroup == TBX_FALSE) && (fAdapterGroup == TBX_FALSE))
					fParamGroup = TBX_TRUE;
				else
				{
					TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected .PARAMS group start");
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				}
				break;

			/* Trunk group start flag processing */
			case TB640_ISDN_PARSING_TOKEN_TRUNK_GROUP_START:
				if ((fParamGroup == TBX_FALSE) && (fTrunkGroup == TBX_FALSE) && (fAdapterGroup == TBX_TRUE))
				{
					g_AppContext->ahAdapterInfo [un32Adapter].un32NbTrunk++;
					fTrunkGroup = TBX_TRUE;
					fTrunkConfigured = TBX_FALSE;
					fStackConfigured = TBX_FALSE;
					fCallConfigured = TBX_FALSE;
				}
				else
				{
					TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected .TRUNK group start");
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				}
				break;

			/* Group end flag processing */
			case TB640_ISDN_PARSING_TOKEN_GROUP_END:
				if (fParamGroup != TBX_FALSE)
				{
					if(fCTBusConnConfigured == TBX_FALSE)
					{
						/* set default parameter */
						g_AppContext->fCTBusConnection = TBX_FALSE;
					}
					if( fDoConnConfigured == TBX_FALSE )
					{
						/* set default parameter */
						g_AppContext->fDoConnection = TBX_FALSE;
					}

					fParamGroup = TBX_FALSE;

				}
				else if (fTrunkGroup != TBX_FALSE)
				{
					if (fTrunkConfigured == TBX_FALSE)
					{
						TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Missing trunk configuration in trunk group");
						TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
					}
					if (fStackConfigured == TBX_FALSE)
					{
						TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Missing stack configuration in trunk group");
						TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
					}
					if (fCallConfigured == TBX_FALSE)
					{
						TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Missing call configuration in trunk group");
						TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
					}
					fTrunkGroup = TBX_FALSE;
				}
				else if (fAdapterGroup != TBX_FALSE)
					fAdapterGroup = TBX_FALSE;
				else
				{
					TB640_ISDN_PARSE_ERROR_DISPLAY (un32Line, (pszToken-pszLine), pszLine, "Unexpected .END");
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				}
				break;

			/* Trunk configuration line processing */
			case TB640_ISDN_PARSING_TOKEN_TRUNK_CONFIG:
				TB640_ISDN_PARSE_TRUNK_LINE_VALIDATE (TB640_ISDN_PARSING_TOKEN_TRUNK_CONFIG);

				/* Process the trunk configuration */
				fTrunkConfigured = TBX_TRUE;
				result = TB640IsdnParseTrunkConfigurationLine (pszArgument, pszLine, un32Line, (pszArgument-pszLine), un32Adapter, &un32TrunkNb);
				if (TBX_RESULT_FAILURE (result))
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				break;

			/* Stack configuration line processing */
			case TB640_ISDN_PARSING_TOKEN_STACK_CONFIG:
				TB640_ISDN_PARSE_TRUNK_LINE_VALIDATE (TB640_ISDN_PARSING_TOKEN_STACK_CONFIG);

				/* Process the stack configuration */
				fStackConfigured = TBX_TRUE;
				result = TB640IsdnParseStackConfigurationLine (pszArgument, pszLine, un32Line, (pszArgument-pszLine), un32Adapter, un32TrunkNb);
				if (TBX_RESULT_FAILURE (result))
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				break;

			/* Call configuration line processing */
			case TB640_ISDN_PARSING_TOKEN_CALL_CONFIG:
				TB640_ISDN_PARSE_TRUNK_LINE_VALIDATE (TB640_ISDN_PARSING_TOKEN_CALL_CONFIG);

				/* Process the call configuration */
				fCallConfigured = TBX_TRUE;
				result = TB640IsdnParseCallConfigurationLine (pszArgument, pszLine, un32Line, (pszArgument-pszLine), un32Adapter, un32TrunkNb);
				if (TBX_RESULT_FAILURE (result))
					TBX_EXIT_SUCCESS(TBX_RESULT_FAIL);
				break;

			/* "Log filename" line processing */
			case TB640_ISDN_PARSING_TOKEN_LOG_FILENAME:
			{
				TBX_CHAR		szNewFilename [128];
				time_t			tTime;
				struct tm *		pTime;


				TB640_ISDN_PARSE_PARAMS_LINE_VALIDATE();

				/* Open the log file */
				TB640IsdnToLower (pszArgument);

				strncpy (g_AppContext->szFilename, pszArgument, sizeof (g_AppContext->szFilename));
				g_AppContext->szFilename[ sizeof(g_AppContext->szFilename) - 1 ] = '\0';

				/* Keep space for _%d at the end of filename */
				g_AppContext->szFilename [sizeof (g_AppContext->szFilename)-8] = '\0';

				sprintf (szNewFilename, "%s_%d", g_AppContext->szFilename, g_AppContext->un32LogNumber++ );

				g_AppContext->pLogFile = fopen (szNewFilename, "w+");
				if (NULL == g_AppContext->pLogFile)
				{
					TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to open log file");
				}

				/* Get the time of day */
				time (&tTime);
				pTime = localtime( &tTime );

				/* Print a string to the log file... */
				TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "ISDN sample application\n");
				TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "Copyright (c)2003 by Telcobridges inc.\n");
				TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "Application instance run on %s", asctime(pTime));
				TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "----------------------------------------------------------------\n\n");

				fLogFilenamePresent = TBX_TRUE;
			}
			break;

			/* Log file level processing */
			case TB640_ISDN_PARSING_TOKEN_LOG_FILE_LEVEL:
				g_AppContext->un32FileLogLevel = atoi (pszArgument);
				fLogFileLevelPresent = TBX_TRUE;
				break;

			/* Log display level processing */
			case TB640_ISDN_PARSING_TOKEN_LOG_DISPLAY_LEVEL:
				g_AppContext->un32DisplayLogLevel = atoi (pszArgument);
				fLogDisplayLevelPresent = TBX_TRUE;
				break;

			/* Application unique ID */
			case TB640_ISDN_PARSING_TOKEN_APP_UNIQUE_ID:
				g_AppContext->un64AppUniqueId = atoi (pszArgument);
				fUniqueIdPresent = TBX_TRUE;
				break;

			/* Minimum refresh rate */
			case TB640_ISDN_PARSING_TOKEN_MIN_REFRESH:
				g_AppContext->un32MinRefreshDelayMsec = atoi (pszArgument);
				fRefreshRateConfigured = TBX_TRUE;

⌨️ 快捷键说明

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