📄 config.c
字号:
| ~ : 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 + -