in source/defender-tools/report_builder.c [278:362]
static eReportBuilderStatus prvWriteConnectionsArray( char * pcBuffer,
uint32_t ulBufferLength,
const Connection_t * pxConnectionsArray,
uint32_t ulConnectionsArrayLength,
uint32_t * pulOutCharsWritten )
{
char * pcCurrentWritePos = pcBuffer;
uint32_t i, ulRemainingBufferLength = ulBufferLength;
int32_t lCharactersWritten;
eReportBuilderStatus eStatus = eReportBuilderSuccess;
const Connection_t * pxConn;
configASSERT( pcBuffer != NULL );
configASSERT( pxConnectionsArray != NULL );
configASSERT( pulOutCharsWritten != NULL );
/* Write the JSON array open marker. */
if( ulRemainingBufferLength > 1 )
{
*pcCurrentWritePos = reportbuilderJSON_ARRAY_OPEN_MARKER;
ulRemainingBufferLength -= 1;
pcCurrentWritePos += 1;
}
else
{
eStatus = eReportBuilderBufferTooSmall;
}
/* Write the array elements. */
for( i = 0; ( ( i < ulConnectionsArrayLength ) && ( eStatus == eReportBuilderSuccess ) ); i++ )
{
pxConn = &( pxConnectionsArray[ i ] );
lCharactersWritten = snprintf( pcCurrentWritePos,
ulRemainingBufferLength,
reportbuilderJSON_CONNECTION_OBJECT_FORMAT,
DEFENDER_REPORT_LOCAL_PORT_KEY,
pxConn->usLocalPort,
DEFENDER_REPORT_REMOTE_ADDR_KEY,
( pxConn->ulRemoteIp >> 24 ) & 0xFFUL,
( pxConn->ulRemoteIp >> 16 ) & 0xFFUL,
( pxConn->ulRemoteIp >> 8 ) & 0xFFUL,
( pxConn->ulRemoteIp ) & 0xFFUL,
pxConn->usRemotePort );
if( !reportbuilderSNPRINTF_SUCCESS( lCharactersWritten, ulRemainingBufferLength ) )
{
eStatus = eReportBuilderBufferTooSmall;
break;
}
else
{
ulRemainingBufferLength -= lCharactersWritten;
pcCurrentWritePos += lCharactersWritten;
}
}
if( eStatus == eReportBuilderSuccess )
{
/* Discard the last comma. */
if( ulConnectionsArrayLength > 0 )
{
pcCurrentWritePos -= 1;
ulRemainingBufferLength += 1;
}
/* Write the JSON array close marker. */
if( ulRemainingBufferLength > 1 )
{
*pcCurrentWritePos = reportbuilderJSON_ARRAY_CLOSE_MARKER;
ulRemainingBufferLength -= 1;
pcCurrentWritePos += 1;
}
else
{
eStatus = eReportBuilderBufferTooSmall;
}
}
if( eStatus == eReportBuilderSuccess )
{
*pulOutCharsWritten = ulBufferLength - ulRemainingBufferLength;
}
return eStatus;
}