📄 voip_adapter_clear.c
字号:
{
TBX_UINT32 un32PortNb;
TBX_UINT32 un32StreamNb;
TBX_UINT32 un32TimeSlotNb;
PVOIP_MBL_PORT_CONFIG pCurrentMblPortConfig;
PVOIP_MBL_RES pCurrentMblPortRes;
for( un32PortNb = 0; un32PortNb < VOIP_MAX_MBL_PORT_PER_ADAPTER; un32PortNb++ )
{
pCurrentMblPortConfig = &in_pAdapterContext->CurrentConfig.aMblPort[ un32PortNb ];
for( un32StreamNb = 0; un32StreamNb < VOIP_MAX_STREAM_PER_MBL_PORT; un32StreamNb++ )
{
for( un32TimeSlotNb = 0; un32TimeSlotNb < VOIP_MAX_TIMESLOT_PER_MBL_STREAM; un32TimeSlotNb++ )
{
pCurrentMblPortRes = &pCurrentMblPortConfig->aRes[ un32StreamNb ] [ un32TimeSlotNb ];
if( pCurrentMblPortRes->Common.fMustClear == TBX_TRUE )
{
/* Clear timeslot resource for this MBL port */
Result = VoipSendAdapterMblPortResClear(
in_pAdapterContext,
un32PortNb,
un32StreamNb,
un32TimeSlotNb);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear MBL port resource");
}
}
}
}
}
}
/*
* Free trunk resources
*/
{
TBX_UINT32 un32TrunkNb;
TBX_UINT32 un32TimeSlotNb;
PVOIP_TRUNK_CONFIG pCurrentTrunkConfig;
PVOIP_TRUNK_RES pCurrentTrunkRes;
for( un32TrunkNb = 0; un32TrunkNb < VOIP_MAX_TRUNK_PER_ADAPTER; un32TrunkNb++ )
{
pCurrentTrunkConfig = &in_pAdapterContext->CurrentConfig.aTrunk[ un32TrunkNb ];
for( un32TimeSlotNb = 0; un32TimeSlotNb < VOIP_MAX_RES_PER_TRUNK; un32TimeSlotNb++ )
{
pCurrentTrunkRes = &pCurrentTrunkConfig->aRes[ un32TimeSlotNb ];
if( pCurrentTrunkRes->Common.fMustClear == TBX_TRUE )
{
/* Clear timeslot resource for this trunk */
Result = VoipSendAdapterTrunkResClear(
in_pAdapterContext,
un32TrunkNb,
un32TimeSlotNb);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear trunk resource");
}
}
}
}
}
/*
* Free stream resources
*/
{
PVOIP_STREAM_RES pCurrentStreamRes;
pCurrentStreamRes = TBXPoolOfBuffersFirst( in_pAdapterContext->CurrentConfig.hPoolOfStreamRes );
while( pCurrentStreamRes )
{
if( (pCurrentStreamRes->Common.fMustClear == TBX_TRUE) ||
(VOIP_IS_VALID_CONNECTION_ID(pCurrentStreamRes->Common.un32ConnectionId) == TBX_FALSE) )
{
/*
* Clear stream resource
*/
Result = VoipSendAdapterStreamResClear(
in_pAdapterContext,
pCurrentStreamRes);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear stream resource");
}
}
pCurrentStreamRes = TBXPoolOfBuffersNext( in_pAdapterContext->CurrentConfig.hPoolOfStreamRes, pCurrentStreamRes );
}
}
/*
* Free voice processing group
*/
{
PVOIP_VP_GROUP pCurrentVpGroup;
pCurrentVpGroup = TBXPoolOfBuffersFirst( in_pAdapterContext->CurrentConfig.hPoolOfVpGroups );
while( pCurrentVpGroup )
{
if( (pCurrentVpGroup->Common.fMustClear == TBX_TRUE) ||
(VOIP_IS_VALID_CONNECTION_ID(pCurrentVpGroup->Common.un32ConnectionId) == TBX_FALSE) )
{
/*
* Clear voice processing group
*/
Result = VoipSendAdapterVpGroupClear(
in_pAdapterContext,
pCurrentVpGroup);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear voice processing group");
}
}
pCurrentVpGroup = TBXPoolOfBuffersNext( in_pAdapterContext->CurrentConfig.hPoolOfVpGroups, pCurrentVpGroup );
}
}
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
VoipCliAdapterStatePrint(
in_pAdapterContext,
TRACE_LEVEL_ERROR,
"VoipAdapterClearSubState2: %s (Result 0x%08X, %s, line %d)\n",
TBX_ERROR_DESCRIPTION,
(int)TBX_ERROR_RESULT,
__FILE__,
TBX_ERROR_LINE);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
}
RETURN;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| VoipAdapterClearSubState3 : Compares the current configuration of the adapter with
| its target configuration, and clears all resources that
| don't match the target configuration (third step).
|
| in_pAdapterContext : Adapter we are configuring
| in_fForceClear : Force clear all resources on the adapter
|
| Note : ~
|
| Return : TBX_RESULT_OK if the function succeeded
| Other error code if the function could not complete properly.
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipAdapterClearSubState3(
IN PVOIP_ADAPTER_CONTEXT in_pAdapterContext,
IN TBX_BOOL in_fForceClear)
{
TBX_RESULT Result;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/* Initialize local variables */
Result = TBX_RESULT_OK;
(TBX_VOID)in_fForceClear;
/*
* Free MBL ports
*/
{
TBX_UINT32 un32PortNb;
PVOIP_MBL_PORT_CONFIG pCurrentMblPortConfig;
for( un32PortNb = 0; un32PortNb < VOIP_MAX_MBL_PORT_PER_ADAPTER; un32PortNb++ )
{
pCurrentMblPortConfig = &in_pAdapterContext->CurrentConfig.aMblPort[ un32PortNb ];
if( (pCurrentMblPortConfig->fAllocated == TBX_TRUE) && (pCurrentMblPortConfig->fMustClear == TBX_TRUE) )
{
Result = VoipSendAdapterMblPortClear(
in_pAdapterContext,
pCurrentMblPortConfig);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear trunk");
}
}
}
}
/*
* Free trunks
*/
{
TBX_UINT32 un32TrunkNb;
PVOIP_TRUNK_CONFIG pCurrentTrunkConfig;
for( un32TrunkNb = 0; un32TrunkNb < VOIP_MAX_TRUNK_PER_ADAPTER; un32TrunkNb++ )
{
pCurrentTrunkConfig = &in_pAdapterContext->CurrentConfig.aTrunk[ un32TrunkNb ];
if( (pCurrentTrunkConfig->fAllocated == TBX_TRUE) && (pCurrentTrunkConfig->fMustClear == TBX_TRUE) )
{
Result = VoipSendAdapterTrunkMaintenance(
in_pAdapterContext,
pCurrentTrunkConfig);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR (Result, 0, "Failed to clear trunk");
}
}
}
}
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
VoipCliAdapterStatePrint(
in_pAdapterContext,
TRACE_LEVEL_ERROR,
"VoipAdapterClearSubState3: %s (Result 0x%08X, %s, line %d)\n",
TBX_ERROR_DESCRIPTION,
(int)TBX_ERROR_RESULT,
__FILE__,
TBX_ERROR_LINE);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
}
RETURN;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| VoipAdapterPromptClear : Clear a prompt for this adapter.
|
| in_pAdapterContext : Adapter configuration we are configuring
| in_pCurrentPromptContext : Current prompt to clear
|
| Note : ~
|
| Return : TBX_RESULT_OK if the function succeeded
| Other error code if the function could not complete properly.
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipAdapterPromptClear(
IN PVOIP_ADAPTER_CONTEXT in_pAdapterContext,
IN PVOIP_PROMPT_CONTEXT in_pCurrentPromptContext)
{
TBX_RESULT Result;
PVOIP_PROMPT_CONTEXT pCurrentPromptContext;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
if( in_pAdapterContext->fNewConfigPending && !in_pAdapterContext->fStopUsingPending )
{
/* Config has been changed. Don't loose too much time trying to clearing things that may
remain valid in new config ... */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
VoipCliAdapterStatePrint
(
in_pAdapterContext,
TRACE_LEVEL_1,
"Clearing prompt %s\n",
in_pCurrentPromptContext->Params.szPromptName
);
/* Stop playing this prompt */
VoipStreamServerStopPlay( in_pCurrentPromptContext->un32StreamServerPromptId );
/* Free stream server prompt context */
VoipStreamServerPromptClear( in_pCurrentPromptContext->un32StreamServerPromptId );
/* Find the corresponding current prompt context */
/* Remove the prompt from our hash table of prompt name */
TBXHashRemove
(
in_pAdapterContext->CurrentConfig.hPromptNameHash,
(TBX_HASH_KEY)in_pCurrentPromptContext->Params.szPromptName,
(PTBX_VOID*)&pCurrentPromptContext
);
if( pCurrentPromptContext == NULL )
{
TBX_EXIT_ERROR (TBX_RESULT_NOT_FOUND, 0, "Failed to remove current prompt from prompt name hash table!");
}
/* Free prompt context */
Result = TBXPoolOfBuffersFree
(
in_pAdapterContext->CurrentConfig.hPoolOfPrompts,
pCurrentPromptContext
);
if( TBX_RESULT_FAILURE(Result) == TBX_TRUE )
{
TBX_EXIT_ERROR (TBX_RESULT_NOT_FOUND, 0, "Failed to remove prompt from pool of prompt buffers!");
}
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
VoipCliAdapterStatePrint(
in_pAdapterContext,
TRACE_LEVEL_ERROR,
"VoipAdapterPromptClear: %s (Result 0x%08X, %s, line %d)\n",
TBX_ERROR_DESCRIPTION,
(int)TBX_ERROR_RESULT,
__FILE__,
TBX_ERROR_LINE);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
}
RETURN;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| VoipAdapterRawDataFileClear : Clear a raw data file for this adapter.
|
| in_pAdapterContext : Adapter configuration we are configuring
| in_pCurrentRawDataFileContext : Current raw data file to clear
|
| Note : ~
|
| Return : TBX_RESULT_OK if the function succeeded
| Other error code if the function could not complete properly.
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipAdapterRawDataFileClear(
IN PVOIP_ADAPTER_CONTEXT in_pAdapterContext,
IN PVOIP_RAW_DATA_FILE_CONTEXT in_pCurrentRawDataFileContext)
{
TBX_RESULT Result;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
if( in_pAdapterContext->fNewConfigPending && !in_pAdapterContext->fStopUsingPending )
{
/* Config has been changed. Don't loose too much time trying to clearing things that may
remain valid in new config ... */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -