in source/fleet_provisioning.c [638:726]
FleetProvisioningStatus_t FleetProvisioning_GetRegisterThingTopic( char * pTopicBuffer,
uint16_t bufferLength,
FleetProvisioningFormat_t format,
FleetProvisioningApiTopics_t topic,
const char * pTemplateName,
uint16_t templateNameLength,
uint16_t * pOutLength )
{
FleetProvisioningStatus_t status = FleetProvisioningError;
uint16_t topicLength = 0U;
char * pBufferCursor = pTopicBuffer;
status = GetRegisterThingTopicCheckParams( pTopicBuffer,
format,
topic,
pTemplateName,
templateNameLength,
pOutLength );
if( status == FleetProvisioningSuccess )
{
topicLength = getRegisterThingTopicLength( templateNameLength, format, topic );
if( bufferLength < topicLength )
{
status = FleetProvisioningBufferTooSmall;
LogError( ( "The buffer is too small to hold the topic string. "
"Provided buffer size: %u, Required buffer size: %u.",
( unsigned int ) bufferLength,
( unsigned int ) topicLength ) );
}
}
if( status == FleetProvisioningSuccess )
{
/* At this point, it is certain that we have a large enough buffer to
* write the topic string into. */
/* Write prefix first. */
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_REGISTER_API_PREFIX,
FP_REGISTER_API_LENGTH_PREFIX );
/* Write template name next. */
writeTopicFragmentAndAdvance( &pBufferCursor,
pTemplateName,
templateNameLength );
/* Write bridge next. */
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_REGISTER_API_BRIDGE,
FP_REGISTER_API_LENGTH_BRIDGE );
/* Write report format. */
if( format == FleetProvisioningJson )
{
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_API_JSON_FORMAT,
FP_API_LENGTH_JSON_FORMAT );
}
if( format == FleetProvisioningCbor )
{
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_API_CBOR_FORMAT,
FP_API_LENGTH_CBOR_FORMAT );
}
/* Write report suffix. */
if( topic == FleetProvisioningAccepted )
{
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_API_ACCEPTED_SUFFIX,
FP_API_LENGTH_ACCEPTED_SUFFIX );
}
if( topic == FleetProvisioningRejected )
{
writeTopicFragmentAndAdvance( &pBufferCursor,
FP_API_REJECTED_SUFFIX,
FP_API_LENGTH_REJECTED_SUFFIX );
}
*pOutLength = topicLength;
}
return status;
}