in source/ota.c [1659:1720]
static DocParseErr_t extractParameter( JsonDocParam_t docParam,
void * pContextBase,
const char * pValueInJson,
size_t valueLength )
{
DocParseErr_t err = DocParseErrNone;
void * pParamAdd;
uint32_t * pParamSizeAdd;
/* Get destination offset to parameter storage location.*/
pParamAdd = ( uint8_t * ) pContextBase + docParam.pDestOffset;
if( ( ModelParamTypeStringCopy == docParam.modelParamType ) || ( ModelParamTypeArrayCopy == docParam.modelParamType ) )
{
/* Get destination buffer size to parameter storage location. */
pParamSizeAdd = ( void * ) ( ( uint8_t * ) pContextBase + docParam.pDestSizeOffset );
err = extractAndStoreArray( docParam.pSrcKey, pValueInJson, valueLength, pParamAdd, pParamSizeAdd );
}
else if( ModelParamTypeUInt32 == docParam.modelParamType )
{
uint32_t * pUint32 = pParamAdd;
char * pEnd;
const char * pStart = pValueInJson;
errno = 0;
*pUint32 = ( uint32_t ) strtoul( pStart, &pEnd, 0 );
if( ( errno == 0 ) && ( pEnd == &pValueInJson[ valueLength ] ) )
{
LogInfo( ( "Extracted parameter: [key: value]=[%s: %u]",
docParam.pSrcKey, *pUint32 ) );
}
else
{
err = DocParseErrInvalidNumChar;
}
}
else if( ModelParamTypeSigBase64 == docParam.modelParamType )
{
err = decodeAndStoreKey( pValueInJson, valueLength, pParamAdd );
}
else if( ModelParamTypeIdent == docParam.modelParamType )
{
LogDebug( ( "Identified parameter: [ %s ]",
docParam.pSrcKey ) );
*( bool * ) pParamAdd = true;
}
else
{
LogWarn( ( "Invalid parameter type: %d", docParam.modelParamType ) );
}
if( err != DocParseErrNone )
{
LogDebug( ( "Failed to extract document parameter: error=%d, paramter key=%s",
err, docParam.pSrcKey ) );
}
return err;
}