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

📄 voip_adapter_clear.c

📁 telcobridges voip develop
💻 C
📖 第 1 页 / 共 5 页
字号:
		{
			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 + -