in source/sigv4.c [3043:3117]
SigV4Status_t SigV4_AwsIotDateToIso8601( const char * pDate,
size_t dateLen,
char * pDateISO8601,
size_t dateISO8601Len )
{
SigV4Status_t returnStatus = SigV4InvalidParameter;
SigV4DateTime_t date = { 0 };
char * pWriteLoc = pDateISO8601;
const char * pFormatStr = NULL;
size_t formatLen = 0U;
/* Check for NULL parameters. */
if( pDate == NULL )
{
LogError( ( "Parameter check failed: pDate is NULL." ) );
}
else if( pDateISO8601 == NULL )
{
LogError( ( "Parameter check failed: pDateISO8601 is NULL." ) );
}
/* Check that the date provided is of the expected length. */
else if( ( dateLen != SIGV4_EXPECTED_LEN_RFC_3339 ) &&
( dateLen != SIGV4_EXPECTED_LEN_RFC_5322 ) )
{
LogError( ( "Parameter check failed: dateLen must be either %u or %u, "
"for RFC 3339 and RFC 5322 formats, respectively.",
SIGV4_EXPECTED_LEN_RFC_3339,
SIGV4_EXPECTED_LEN_RFC_5322 ) );
}
/* Check that the output buffer provided is large enough for the formatted
* string. */
else if( dateISO8601Len < SIGV4_ISO_STRING_LEN )
{
LogError( ( "Parameter check failed: dateISO8601Len must be at least %u.",
SIGV4_ISO_STRING_LEN ) );
}
else
{
/* Assign format string according to input type received. */
pFormatStr = ( dateLen == SIGV4_EXPECTED_LEN_RFC_3339 ) ?
( FORMAT_RFC_3339 ) : ( FORMAT_RFC_5322 );
formatLen = ( dateLen == SIGV4_EXPECTED_LEN_RFC_3339 ) ?
( FORMAT_RFC_3339_LEN ) : ( FORMAT_RFC_5322_LEN );
returnStatus = parseDate( pDate, dateLen, pFormatStr, formatLen, &date );
}
if( returnStatus == SigV4Success )
{
returnStatus = validateDateTime( &date );
}
if( returnStatus == SigV4Success )
{
/* Combine date elements into complete ASCII representation, and fill
* buffer with result. */
intToAscii( date.year, &pWriteLoc, ISO_YEAR_LEN );
intToAscii( date.mon, &pWriteLoc, ISO_NON_YEAR_LEN );
intToAscii( date.mday, &pWriteLoc, ISO_NON_YEAR_LEN );
*pWriteLoc = 'T';
pWriteLoc++;
intToAscii( date.hour, &pWriteLoc, ISO_NON_YEAR_LEN );
intToAscii( date.min, &pWriteLoc, ISO_NON_YEAR_LEN );
intToAscii( date.sec, &pWriteLoc, ISO_NON_YEAR_LEN );
*pWriteLoc = 'Z';
LogDebug( ( "Successfully formatted ISO 8601 date: \"%.*s\"",
( int ) dateISO8601Len,
pDateISO8601 ) );
}
return returnStatus;
}