📄 voip_raw_data_file.c
字号:
*------------------------------------------------------------------------------------------------------------------------------*/
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 + -