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

📄 config.c

📁 telcobridges pri develop,30b+d
💻 C
📖 第 1 页 / 共 5 页
字号:
 |  ~		        :	No arguments used
 |
 |  Note			:	~
 |
 |  Return          :
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
#define SET_FEATURE_MISMATCH_AND_RESULT(featureId, aMismatch, result ) \
    do { \
    aMismatch[featureId] = TBX_TRUE; \
    result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
    } while(0)
#define SET_TRUNK_MISMATCH_AND_RESULT(featureId, aMismatch, result, fTrunkMismatch ) \
    do { \
    aMismatch[featureId] = TBX_TRUE; \
    result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
    fTrunkMismatch = TBX_TRUE; \
    } while(0)
#define STR_TOKEN_SIZE          20
#define STR_TOKEN_LINE_SIZE     80
/* This size should be sufficient for to log adapter info and Licence features unmatching configuration (max 40 lignes de 80 char. */
#define STR_LOG_BUFFER_LICENSE_FEATURE_SIZE     (40*80)
/* This size should be sufficient for to log Trunk configuration unmatching license features (max 70 ligne de 80 char.) */
#define STR_LOG_BUFFER_TRUNK_CONFIG_SIZE        (70*80)
TBX_UINT32      g_au32TrunkTypeToFeatureId[TB640_TRUNK_TYPE_LAST] = {
                        (TBX_UINT32)NULL,
                        TBX_FEATURE_TYPE_TRUNK_E1,
                        TBX_FEATURE_TYPE_TRUNK_T1,
                        TBX_FEATURE_TYPE_TRUNK_J1 };

TBX_UINT32      g_au32IsdnVariantToFeatureId[TB640_ISDN_VARIANT_LAST] = {
                        (TBX_UINT32)NULL,
                        TBX_FEATURE_TYPE_ISDN_4ESS,
                        TBX_FEATURE_TYPE_ISDN_AUS,
                        TBX_FEATURE_TYPE_ISDN_5ESS,
                        TBX_FEATURE_TYPE_ISDN_NET5,
                        TBX_FEATURE_TYPE_ISDN_DMS,
                        TBX_FEATURE_TYPE_ISDN_NI2,
                        TBX_FEATURE_TYPE_ISDN_HONG_KONG,
                        TBX_FEATURE_TYPE_ISDN_JAPAN_INS};
PTBX_CHAR        g_apszTrunkTypeString[TB640_TRUNK_TYPE_LAST] = { NULL, "E1", "T1", "J1" };

TBX_RESULT
TB640IsdnCheckAdapterFeatures (
    IN          PTB640_ISDN_ADAPTER_INFO			pAdapterInfo)
{
    TBX_RESULT_API          apiResult = TBX_RESULT_API_OK;
    TBX_RESULT		        result = TBX_RESULT_OK;
    TBX_UINT32		        un32Count = 0;
    TBX_UINT32		        un32FeatureId = 0;
	TBX_UINT32				u32NbTrunkPrint = 0;
    TBX_BOOL                fTrunkMismatch = TBX_FALSE;
    PTB640_ISDN_TRUNK_INFO  pTrunkInfo;
    PTBX_CHAR               pszToken;
    TBX_CHAR                szTrunkLine[STR_TOKEN_LINE_SIZE];
    TBX_CHAR	            szAdapterIPAddresses[256];
    PTBX_CHAR               pszLogBufferLicenseFeature = NULL;
    PTBX_CHAR               pszLogBufferTrunkConfig = NULL;
    TBX_BOOL                af32FeatureMismatch[TBX_FEATURE_TYPE_LAST];
    TBX_UINT32              aun32TrunkCount[TB640_TRUNK_TYPE_LAST];


    /*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
        /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Initialize af32FeatureMismatch and aun32TrunkCount
    	 *--------------------------------------------------------------------------------------------------------------------------*/
        memset(af32FeatureMismatch, TBX_FALSE, sizeof(af32FeatureMismatch));
        memset(aun32TrunkCount, 0, sizeof(aun32TrunkCount));

        /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Allocate pszLogBuffer
    	 *--------------------------------------------------------------------------------------------------------------------------*/
    	 pszLogBufferLicenseFeature = (PTBX_CHAR)calloc( STR_LOG_BUFFER_LICENSE_FEATURE_SIZE, sizeof(TBX_CHAR) );
    	 if( !pszLogBufferLicenseFeature )
    	 {
    	    TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the licence feature log buffer");
    	 }

    	 pszLogBufferTrunkConfig = (PTBX_CHAR)calloc( STR_LOG_BUFFER_TRUNK_CONFIG_SIZE, sizeof(TBX_CHAR) );
    	 if( !pszLogBufferTrunkConfig )
    	 {
    	    TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the trunk config log buffer");
    	 }

	    /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Retreive Active Features and adapter info
    	 *--------------------------------------------------------------------------------------------------------------------------*/
        if( pAdapterInfo->hAdapter != (TBX_ADAPTER_HANDLE)NULL )
        {
            /* Retreive the list of active feature from adapter */
            apiResult = RetrieveActiveFeatures(     NULL,
                                                    pAdapterInfo->hAdapter,
                                                    g_AppContext->hTbxLib,
                                                    TBX_FEATURE_TYPE_LAST,
                                                    pAdapterInfo->aun32FeatureEnabled, NULL, NULL);
            if( TBX_RESULT_FAILURE(apiResult) )
        	{
        		TBX_EXIT_ERROR(apiResult, 0, "Unable to retrieve features");
        	}

        	/* Retreive adapter info */
			apiResult = TBXGetAdapterInfo(  g_AppContext->hTbxLib,
				                            pAdapterInfo->hAdapter,
				                            &pAdapterInfo->AdapterInfo );
		    if( TBX_RESULT_FAILURE(apiResult) )
        	{
        		TBX_EXIT_ERROR(apiResult, 0, "Unable to retrieve adapter info");
        	}

    	}
    	else
    	{
    	    TBX_EXIT_ERROR(TBX_RESULT_INVALID_HANDLE, 0, "Adapter handle NULL");
    	}

    	/*---------------------------------------------------------------------------------------------------------------------------
    	 |  Print adapter info into the license feature log buffer
    	 *--------------------------------------------------------------------------------------------------------------------------*/
        TB640IsdnGetAdapterIpAddresses( &pAdapterInfo->AdapterInfo, szAdapterIPAddresses );
    	sprintf(   pszLogBufferLicenseFeature, "\nName=%s, Serial=%s, Ip=%s %s\n",
    	           pAdapterInfo->AdapterInfo.szAdapterName,
    	           pAdapterInfo->AdapterInfo.szSerialNumber,
    	           szAdapterIPAddresses,
    	           (pAdapterInfo->AdapterInfo.AdapterType == TBX_ADAPTER_TYPE_TB_MB ) ? "(Switch)" : "" );

        /*---------------------------------------------------------------------------------------------------------------------------
         |  Check global license and configuration mismatch
         *--------------------------------------------------------------------------------------------------------------------------*/
        /* Check if CTBUS feature is enabled */
        if( pAdapterInfo->aun32FeatureEnabled[TBX_FEATURE_TYPE_CTBUS] == 0 )
            SET_FEATURE_MISMATCH_AND_RESULT( TBX_FEATURE_TYPE_CTBUS, af32FeatureMismatch, result );

        /* Check if ISDN feature is enabled */
        if( pAdapterInfo->aun32FeatureEnabled[TBX_FEATURE_TYPE_ISDN] == 0 )
            SET_FEATURE_MISMATCH_AND_RESULT( TBX_FEATURE_TYPE_ISDN, af32FeatureMismatch, result );

        /*---------------------------------------------------------------------------------------------------------------------------
    	 |  Check per Trunk configuration/license mismatch
    	 *--------------------------------------------------------------------------------------------------------------------------*/
    	sprintf( pszLogBufferTrunkConfig, "\tTrunk configuration unmatching license features:\n\t\t" );
        /* Cycle through all trunk configurations */
    	for (un32Count=0; un32Count<TB640_ISDN_MAX_SUPPORTED_TRUNKS_PER_ADAPTER; un32Count++)
    	{
    	    TBX_BOOL    fMismatch = TBX_FALSE;
			memset(szTrunkLine, '\0', sizeof(szTrunkLine));
    	    pTrunkInfo = &pAdapterInfo->aTrunkInfo[un32Count];

            /* Check if trunk is configured */
    	    if( pTrunkInfo->TrunkConfiguration.Type > TB640_TRUNK_TYPE_FIRST )
    	    {
                /* Count this trunk type */
                aun32TrunkCount[pTrunkInfo->TrunkConfiguration.Type]++;
                /* Retreive feature Id associated to that trunk type */
    	        un32FeatureId = g_au32TrunkTypeToFeatureId[pTrunkInfo->TrunkConfiguration.Type];

                /* Check Trunk Type */
    	        if( pAdapterInfo->aun32FeatureEnabled[un32FeatureId] == 0 )
    	        {
    	            /* Trunk type doesn't match the licence feature */
    	            SET_TRUNK_MISMATCH_AND_RESULT( un32FeatureId, af32FeatureMismatch, result, fMismatch );
    	            if( (pszToken = TB640IsdnGetTokenString( g_aParseTrunkTypes, pTrunkInfo->TrunkConfiguration.Type )) )
    	                sprintf( szTrunkLine, "%s ", pszToken );
    	        }

                /* Check Stack Variant */
	            if( pTrunkInfo->StackConfiguration.IsdnVariant > TB640_ISDN_VARIANT_FIRST )
        	    {
        	        un32FeatureId = g_au32IsdnVariantToFeatureId[pTrunkInfo->StackConfiguration.IsdnVariant];
        	        if( pAdapterInfo->aun32FeatureEnabled[un32FeatureId] == 0 )
        	        {
        	            SET_TRUNK_MISMATCH_AND_RESULT( un32FeatureId, af32FeatureMismatch, result, fMismatch );
        	            if( (pszToken = TB640IsdnGetTokenString( g_aParseStackVariant, pTrunkInfo->StackConfiguration.IsdnVariant )) )
        	                sprintf( szTrunkLine, "%s%s", szTrunkLine, pszToken );
        	        }
        	    }
    	    }

    	    if( fMismatch )
    	    {
    	        /* Print szTrunkLine in trunk config buffer */
    	        sprintf( pszLogBufferTrunkConfig, "%sTRUNK.%-3d : %-12s", pszLogBufferTrunkConfig, un32Count, szTrunkLine );
    	        if( !(++u32NbTrunkPrint % 2) )
    	            sprintf( pszLogBufferTrunkConfig, "%s\n\t\t", pszLogBufferTrunkConfig);
    	        fTrunkMismatch = TBX_TRUE;
    	    }
    	}
    	sprintf( pszLogBufferTrunkConfig, "%s\n", pszLogBufferTrunkConfig);

        /* Check if nb trunk configured > supported ISDN trunk */
        if( pAdapterInfo->un32NbTrunk > pAdapterInfo->aun32FeatureEnabled[TBX_FEATURE_TYPE_ISDN] )
        {
            SET_FEATURE_MISMATCH_AND_RESULT( TBX_FEATURE_TYPE_ISDN, af32FeatureMismatch, result );
            sprintf(    pszLogBufferTrunkConfig, "%s\t\t%d total trunk > TBX_FEATURE_TYPE_ISDN\n",
                        pszLogBufferTrunkConfig,
                        pAdapterInfo->un32NbTrunk );
        }

    	/* Validate the total number of configured trunk according to the TBX_FEATURE_TYPE_MAX_TRUNK license feature */
        if( pAdapterInfo->un32NbTrunk > pAdapterInfo->aun32FeatureEnabled[TBX_FEATURE_TYPE_MAX_TRUNK] )
        {
            SET_FEATURE_MISMATCH_AND_RESULT( TBX_FEATURE_TYPE_MAX_TRUNK, af32FeatureMismatch, result );
            sprintf(    pszLogBufferTrunkConfig, "%s\t\t%d total trunk > TBX_FEATURE_TYPE_MAX_TRUNK\n",
                        pszLogBufferTrunkConfig,
                        pAdapterInfo->un32NbTrunk );
        }

    	/* Validate the number of configured trunk per type according to license feature */
    	for (un32Count=TB640_TRUNK_TYPE_E1; un32Count<TB640_TRUNK_TYPE_LAST; un32Count++)
    	{
    	    /* Retreive feature Id associated to that trunk type */
    	    un32FeatureId = g_au32TrunkTypeToFeatureId[un32Count];
            if( aun32TrunkCount[un32Count] > pAdapterInfo->aun32FeatureEnabled[un32FeatureId] )
            {
                SET_FEATURE_MISMATCH_AND_RESULT( un32FeatureId, af32FeatureMismatch, result );
                if( (pszToken = FeatureTypeToString(un32FeatureId)) )
                {
                    sprintf(    pszLogBufferTrunkConfig, "%s\t\t%d %s > %s\n",
                                pszLogBufferTrunkConfig,
                                aun32TrunkCount[un32Count],
                                g_apszTrunkTypeString[un32Count],
                                pszToken );
                }
            }
        }

    	/*---------------------------------------------------------------------------------------------------------------------------
         |  Print the unmatching feature into the license feature log buffer
         *--------------------------------------------------------------------------------------------------------------------------*/
        if( result == TBX_RESULT_NOT_SUPPORTED_BY_LICENSE )
        {
            sprintf( pszLogBufferLicenseFeature, "%s\tLicence features unmatching configuration:\n", pszLogBufferLicenseFeature);
        	for( un32Count=0; un32Count<TBX_FEATURE_TYPE_LAST; un32Count++ )
        	{
        	    if( af32FeatureMismatch[un32Count] )
        	    {
        	        if( (pszToken = FeatureTypeToString(un32Count)) )
        	        {
        	            sprintf( pszLogBufferLicenseFeature, "%s\t\t%s=%d\n",
						         pszLogBufferLicenseFeature,
								 pszToken,
								 pAdapterInfo->aun32FeatureEnabled[un32Count] );
					}
        	    }
        	}
        }

        /*---------------------------------------------------------------------------------------------------------------------------
         |  Logging
         *--------------------------------------------------------------------------------------------------------------------------*/
        if( (result == TBX_RESULT_NOT_SUPPORTED_BY_LICENSE) || fTrunkMismatch )
        {
            TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "%s%s", pszLogBufferLicenseFeature, pszLogBufferTrunkConfig );
        }

        /* End of the code (skip to cleanup) */
		TBX_EXIT_SUCCESS(result);
    }


    ERROR_HANDLING
	{
		/* Print error message */
		TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "%s (Result = 0x%08X, %s, line %d)\n", TBX_ERROR_DESCRIPTION, TBX_ERROR_RESULT, __FILE__, TBX_ERROR_LINE);
	}

    /*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{
		if( pszLogBufferLicenseFeature ) free( pszLogBufferLicenseFeature );
		if( pszLogBufferTrunkConfig ) free( pszLogBufferTrunkConfig );
	}

	RETURN;
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640IsdnOpenAdapters:	This function searches and open specified adapters in our global configuration structure
 |
 |  ~		        :	No arguments used
 |
 |  Note			:	~
 |
 |  Return          :	TBX_RESULT_OK
 |						TBX_RESULT_FAIL
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640IsdnOpenAdapters (void)
{
	TBX_RESULT							result;
	TBX_FILTER_PARAMS					FilterParams;
	TBX_FILTER_HANDLE					hFilter;
	TBX_MSG_HANDLE						hMsg;
	TBX_BOOL							afAdapterUsed [TB640_ISDN_MAX_ADAPTER_DISCOVERED];
	TBX_ADAPTER_HANDLE					aAdapters [TB640_ISDN_MAX_ADAPTER_DISCOVERED];
	TBX_CHAR							aszAdapterName [TB640_ISDN_MAX_ADAPTER_DISCOVERED][TBX_API_NAME_MAX_LEN];
	TBX_UINT							nAdapters;
	TBX_UINT32							un32TimeMsec;
	TBX_UINT32							un32AdapterLeftToDiscover;
	TBX_UINT32							un32Count;
	TBX_UINT32							un32Count2;
	TBX_ADAPTER_INFO					Info;
	PTB640_ISDN_ADAPTER_INFO			pAdapterInfo;
	PTBX_EVT_API_NOTIF_ADAPTER_ADDED	pEvent;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		hFilter = NULL;
		hMsg = NULL;
		memset (afAdapterUsed, 0, sizeof(afAdapterUsed));
		memset (aAdapters, 0, sizeof(aAdapters));
		memset (aszAdapterName, 0, sizeof(aszAdapterName));

		TB640_ISDN_LOG (TRACE_LEVEL_4, "Attaching to adapter(s)\n");

⌨️ 快捷键说明

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