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

📄 voip_raw_data_file.c

📁 telcobridges voip develop
💻 C
📖 第 1 页 / 共 5 页
字号:
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipRawDataFileRecordAlloc(
	IN		PVOIP_RAW_DATA_FILE_CONTEXT	in_pRawDataFileContext,
	IN		TBX_UINT16					in_un16Port,
	IN		PTBX_CHAR					in_pszIpAddress0,
	IN		PTBX_CHAR					in_pszPathName)
{
	PVOIP_CLI_CONTEXT					pCliContext;
	PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	pRecordContext;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pCliContext = &g_pContext->CliContext;
		pRecordContext = &in_pRawDataFileContext->RecordContext;

		TbxCliToolsLogPrint(
			pCliContext->hCliTools,
			TRACE_LEVEL_1, NULL,
			"Raw data file: Allocating record context for 0x%08X\n",
			in_pRawDataFileContext->Params.szRawDataFileResName );

		/* Initialize the raw data file context */
		memset( pRecordContext, 0, sizeof(*pRecordContext) );

		pRecordContext->fAllocated					= TBX_TRUE;
		pRecordContext->un64Id						= in_pRawDataFileContext->un64Id;
		pRecordContext->un16Port					= in_un16Port;
		strncpy( pRecordContext->szIpAddress0,		in_pszIpAddress0, sizeof(pRecordContext->szIpAddress0) );
		pRecordContext->szIpAddress0[sizeof(pRecordContext->szIpAddress0) - 1] = '\0';

		strncpy( pRecordContext->szPathName,			in_pszPathName, ( sizeof(pRecordContext->szPathName) - 1 ) );

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

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print the error to the user */
		TbxCliToolsLogPrint(
			pCliContext->hCliTools,
			TRACE_LEVEL_ERROR,
			NULL,
			"VoipRawDataFileAlloc: %s (Result 0x%08X, %s, line %d)\n",
			TBX_ERROR_DESCRIPTION,
			TBX_ERROR_RESULT,
			__FILE__,
			TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{
	}

	RETURN;
}

/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |  VoipRawDataFileStartRecord	:	Start recording an audio file for the specified raw data file
 |
 |	in_un32PromptId				:	Prompt context
 |
 |  Note						:	~
 |
 |  Return						:	TBX_RESULT_OK if the function succeeded
 |									Other error code if the function could not complete properly.
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipRawDataFileStartRecord(
	IN		PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	in_pRecordContext )
{
	TBX_RESULT							Result = TBX_RESULT_OK;
	PVOIP_CLI_CONTEXT					pCliContext;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pCliContext = &g_pContext->CliContext;

		/* Validate current state */
		if
		( 
			in_pRecordContext->fStarting	||
			in_pRecordContext->fStopping
		)
		{
			TBX_EXIT_ERROR( TBX_RESULT_INVALID_STATE, 0, "Invalid state to start raw data file record!" );
		}

		/* Open log file */
		in_pRecordContext->pFile = fopen( in_pRecordContext->szPathName, "wb+" );
		if( !in_pRecordContext->pFile )
		{
			TBX_EXIT_ERROR( TBX_RESULT_INVALID_PARAM, 0, "Could not open file for raw datarecord!" );
		}
		
		Result = VoipRawDataFileStartRecordInternal( in_pRecordContext );
		if( TBX_RESULT_FAILURE( Result ) == TBX_TRUE )
		{
			TBX_EXIT_ERROR( Result, 0, "Failed to start raw data file record!" );
		}

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

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print the error to the user */
		TbxCliToolsLogPrint(
			pCliContext->hCliTools,
			TRACE_LEVEL_ERROR,
			NULL,
			"VoipRawDataFileStartRecord: %s (Result 0x%08X, %s, line %d)\n",
			TBX_ERROR_DESCRIPTION,
			TBX_ERROR_RESULT,
			__FILE__,
			TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{
	}

	RETURN;
}

static TBX_RESULT VoipRawDataFileStartRecordInternal(
	IN		PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	in_pRecordContext)
{
	TBX_RESULT							Result = TBX_RESULT_OK;
	PVOIP_CLI_CONTEXT					pCliContext;
	TBX_STREAM_LIB_RECORD_PARAMETERS	RecordParameters;
	TBX_SOCKADDR						SourceSockAddr0;
	TBX_SOCKADDR						SourceSockAddr1;
	

	pCliContext		= &g_pContext->CliContext;

	/***************************************/
	/* Start recording data using stream lib */
	/***************************************/
	/* Initialize the record parameters */
	memset( &RecordParameters, 0, sizeof( RecordParameters ) );
	RecordParameters.un32StructVersion		= 1;
	RecordParameters.PacketType				= TBX_STREAM_LIB_PACKET_TYPE_PCMA;
	RecordParameters.PacketSize				= VOIP_RAW_DATA_FILE_PACKET_SIZE;
	RecordParameters.un16MaxIdleTimeMs		= 0xFFFF;
	RecordParameters.un16PendingTimeoutMs	= 0xFFFF;
	RecordParameters.fTruncateSilence		= TBX_FALSE;
	RecordParameters.un32StreamBitRate		= TBX_STREAM_LIB_BIT_RATE_64KBPS;

	SourceSockAddr0.sin_family		= PF_INET;
	SourceSockAddr0.sin_port		= htons( in_pRecordContext->un16Port );
	SourceSockAddr0.sin_addr.s_addr	= TBX_INET_ADDR( in_pRecordContext->szIpAddress0 );

	SourceSockAddr1.sin_family		= PF_INET;
	SourceSockAddr1.sin_port		= htons( in_pRecordContext->un16Port );
	SourceSockAddr1.sin_addr.s_addr	= TBX_INET_ADDR( in_pRecordContext->szIpAddress1 );

	Result = TBXStreamRecord
	(
		g_pContext->hStreamLib,
		in_pRecordContext->un64Id,
		&RecordParameters,
		SourceSockAddr0.sin_addr.s_addr ? &SourceSockAddr0 : NULL,
		SourceSockAddr1.sin_addr.s_addr ? &SourceSockAddr1 : NULL,
		&in_pRecordContext->hRecord
	);

	return Result;
}

/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |  VoipRawDataFileStopRecord	:	Stop recording an audio file for the specified raw data file
 |
 |	in_un32PromptId				:	Identifier of the raw data file to stop recording.
 |
 |  Note						:	~
 |
 |  Return						:	TBX_RESULT_OK if the function succeeded
 |									Other error code if the function could not complete properly.
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipRawDataFileStopRecord(
	IN		PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	in_pRecordContext)
{
	TBX_RESULT							Result = TBX_RESULT_OK;
	PVOIP_CLI_CONTEXT					pCliContext;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pCliContext		= &g_pContext->CliContext;

		/* Validate current state */
		if( in_pRecordContext->fStopping )
		{
			TbxCliToolsLogPrint(
				pCliContext->hCliTools,
				TRACE_LEVEL_1,
				NULL,
				"ERROR: Already stopping record of raw data file 0x%08X\n",
				in_pRecordContext->szPathName );
			Result = TBX_RESULT_INVALID_STATE;
		}

		Result = VoipRawDataFileStopRecordInternal( in_pRecordContext );
		if( TBX_RESULT_FAILURE( Result ) == TBX_TRUE )
		{
			TBX_EXIT_ERROR( Result, 0, "Failed to stop raw data file record!" );
		}

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

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print the error to the user */
		TbxCliToolsLogPrint(
			pCliContext->hCliTools,
			TRACE_LEVEL_ERROR,
			NULL,
			"VoipRawDataFileStopRecord: %s (Result 0x%08X, %s, line %d\n",
			TBX_ERROR_DESCRIPTION,
			TBX_ERROR_RESULT,
			__FILE__,
			TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{
	}

	RETURN;
}

TBX_RESULT VoipRawDataFileStopRecordInternal(
	IN		PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	in_pRecordContext )
{
	TBX_RESULT							Result = TBX_RESULT_OK;
	PVOIP_CLI_CONTEXT					pCliContext;

	/* Initialize local variables */
	pCliContext = &g_pContext->CliContext;

	/* Stop streamlib  */
	if( in_pRecordContext->hRecord != (TBX_STREAM_LIB_PLAY_HANDLE)TBX_HANDLE_INVALID )
	{
		Result = TBXStreamStop
		(
			g_pContext->hStreamLib,
			in_pRecordContext->hRecord
		);
	}

	in_pRecordContext->fStopping	= TBX_TRUE;
	in_pRecordContext->fStarting	= TBX_FALSE;

	return Result;
}

/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |  VoipRawDataFileRecordClear	:	Clear the runtime record context for the specified raw data file
 |
 |	in_un32PromptId				:	Identifier of the raw data file to clear recording context.
 |
 |  Note						:	~
 |
 |  Return						:	TBX_RESULT_OK if the function succeeded
 |									Other error code if the function could not complete properly.
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT VoipRawDataFileRecordClear(
	IN		PVOIP_RAW_DATA_FILE_RECORD_CONTEXT	in_pRecordContext)
{
	TBX_RESULT							Result = TBX_RESULT_OK;
	PVOIP_CLI_CONTEXT					pCliContext;

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Code section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CODE
	{
		/* Initialize local variables */
		pCliContext		= &g_pContext->CliContext;


		memset( in_pRecordContext, 0, sizeof( *in_pRecordContext ) );
		
		/* End of the code (skip to cleanup) */
		TBX_EXIT_SUCCESS (TBX_RESULT_OK);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Error handling section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	ERROR_HANDLING
	{
		/* Print the error to the user */
		TbxCliToolsLogPrint(
			pCliContext->hCliTools,
			TRACE_LEVEL_ERROR,
			NULL,
			"VoipRawDataFileRecordClear: %s (Result 0x%08X, %s, line %d\n",
			TBX_ERROR_DESCRIPTION,
			TBX_ERROR_RESULT,
			__FILE__,
			TBX_ERROR_LINE);
	}

	/*---------------------------------------------------------------------------------------------------------------------------
	 |  Cleanup section
	 *--------------------------------------------------------------------------------------------------------------------------*/
	CLEANUP
	{
	}

	RETURN;
}

/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  VoipRawDataFileClearContext:	Clears the pattern test context.
 |
 |  in_pAdapterContext		:	Context of the adapter
 |	in_pRawDataFileContext	:	Pattern test context
 |
 |  Note					:	~
 |
 |  Return					:	~
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT	VoipRawDataFileClearContext
(
	IN		PVOIP_ADAPTER_CONTEXT		in_pAdapterContext,

⌨️ 快捷键说明

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