in source/1nce_zero_touch_provisioning.c [664:750]
static uint8_t onboarding_request( uint8_t status,
NetworkContext_t * pxNetworkContext,
char ** completeResponse )
{
char packetToSent[ 130 ];
int rangeStart = 0;
int rangeEnd = democonfigRANGE_SIZE;
int rangeOriginalSize;
memset( packetToSent, '\0', 130 * sizeof( char ) );
do
{
sprintf( packetToSent, "GET /device-api/onboarding HTTP/1.1\r\n"
"Host: %s\r\n"
"Range: bytes=%d-%d\r\n"
"Accept: text/csv\r\n\r\n", ONBOARDING_ENDPOINT, rangeStart, rangeEnd );
LogInfo( ( "Send onboarding request:\r\n%.*s",
strlen( packetToSent ),
packetToSent ) );
/* Send onboarding request. */
int32_t sentBytes = TLS_FreeRTOS_send( &xNetworkContext,
&packetToSent,
strlen( packetToSent ) );
configASSERT( sentBytes > 0 );
if( sentBytes <= 0 )
{
LogError( ( "Failed to send onboarding request." ) );
return status;
}
/* Receive onboarding response. */
int32_t recvBytes = TLS_FreeRTOS_recv( &xNetworkContext,
&PART[ 0 ],
RECV_BUFFER_LEN );
if( rangeEnd == democonfigRANGE_SIZE )
{
rangeOriginalSize = response_length( PART );
if( rangeOriginalSize == EXIT_FAILURE )
{
LogError( ( "Failed to get complete onboarding response size." ) );
return status;
}
}
if( recvBytes < 0 )
{
LogError( ( "Failed to receive onboarding response." ) );
return status;
}
LogDebug( ( "Received raw response: %d bytes.", recvBytes ) );
LogDebug( ( "\r\n%.*s", recvBytes, PART ) );
strcat( completeResponse,
strstr( PART, "Express\r\n\r\n" ) + strlen( "Express\r\n\r\n" ) );
memset( PART, ( int8_t ) '\0', sizeof( PART ) );
while( recvBytes == RECV_BUFFER_LEN )
{
recvBytes = TLS_FreeRTOS_recv( &xNetworkContext,
&PART[ 0 ],
RECV_BUFFER_LEN );
if( recvBytes < 0 )
{
LogError( ( "Failed to receive onboarding response." ) );
return status;
}
LogDebug( ( "Received raw response: %d bytes.", strlen( PART ) ) );
LogDebug( ( "\r\n%.*s", strlen( PART ), PART ) );
strcat( completeResponse, PART );
memset( PART, ( int8_t ) '\0', sizeof( PART ) );
}
rangeStart = rangeEnd + 1;
rangeEnd += democonfigRANGE_SIZE;
} while( rangeStart < rangeOriginalSize );
status = EXIT_SUCCESS;
return status;
}