1010
1111#include " Decoder.h"
1212#include < connectionHandlerModels/settings_default.h>
13+ #include < cbor/utils/decoder.h>
1314#if defined(BOARD_HAS_ETHERNET)
1415#include < IPAddress.h>
1516#endif
1617
17- // FIXME move this utility functions
18- static bool copyCBORStringToArray (CborValue * param, char * dest, size_t dest_size) {
19- if (cbor_value_is_text_string (param)) {
20- // NOTE: keep in mind that _cbor_value_copy_string tries to put a \0 at the end of the string
21- if (_cbor_value_copy_string (param, dest, &dest_size, NULL ) == CborNoError) {
22- return true ;
23- }
24- }
25-
26- return false ;
27- }
28-
29- // FIXME dest_size should be also returned, the copied byte array can have a different size from the starting one
30- // for the time being we need this on SHA256 only
31- static bool copyCBORByteToArray (CborValue * param, uint8_t * dest, size_t dest_size) {
32- if (cbor_value_is_byte_string (param)) {
33- // NOTE: keep in mind that _cbor_value_copy_string tries to put a \0 at the end of the string
34- if (_cbor_value_copy_string (param, dest, &dest_size, NULL ) == CborNoError) {
35- return true ;
36- }
37- }
38-
39- return false ;
40- }
41-
4218MessageDecoder::Status TimestampProvisioningMessageDecoder::decode (CborValue* param, Message* message) {
4319 TimestampProvisioningMessage* ts = (TimestampProvisioningMessage*) message;
4420
@@ -56,8 +32,9 @@ MessageDecoder::Status TimestampProvisioningMessageDecoder::decode(CborValue* pa
5632MessageDecoder::Status WifiConfigProvisioningMessageDecoder::decode (CborValue* param, Message* message) {
5733 NetworkConfigProvisioningMessage* provisioningNetworkConfig = (NetworkConfigProvisioningMessage*) message;
5834 memset (&provisioningNetworkConfig->networkSetting , 0x00 , sizeof (models::NetworkSetting));
35+ size_t ssidSize = sizeof (provisioningNetworkConfig->networkSetting .wifi .ssid );
5936 // Message is composed of 2 parameters: ssid and password
60- if (! copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .wifi .ssid , sizeof (provisioningNetworkConfig-> networkSetting . wifi . ssid )) ) {
37+ if (cbor::utils:: copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .wifi .ssid , ssidSize) == MessageDecoder::Status::Error ) {
6138 return MessageDecoder::Status::Error;
6239 }
6340
@@ -66,7 +43,8 @@ MessageDecoder::Status WifiConfigProvisioningMessageDecoder::decode(CborValue* p
6643 return MessageDecoder::Status::Error;
6744 }
6845
69- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .wifi .pwd , sizeof (provisioningNetworkConfig->networkSetting .wifi .pwd ))) {
46+ size_t pwdSize = sizeof (provisioningNetworkConfig->networkSetting .wifi .pwd );
47+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .wifi .pwd , pwdSize) == MessageDecoder::Status::Error) {
7048 return MessageDecoder::Status::Error;
7149 }
7250 provisioningNetworkConfig->networkSetting .type = NetworkAdapter::WIFI;
@@ -92,8 +70,9 @@ MessageDecoder::Status CommandsProvisioningMessageDecoder::decode(CborValue* par
9270MessageDecoder::Status LoRaConfigProvisioningMessageDecoder::decode (CborValue* param, Message* message) {
9371 NetworkConfigProvisioningMessage* provisioningNetworkConfig = (NetworkConfigProvisioningMessage*) message;
9472 memset (&provisioningNetworkConfig->networkSetting , 0x00 , sizeof (models::NetworkSetting));
73+ size_t appeuiSize = sizeof (provisioningNetworkConfig->networkSetting .lora .appeui );
9574 // Message is composed of 5 parameters: app_eui, app_key, band, channel_mask, device_class
96- if (! copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .appeui , sizeof (provisioningNetworkConfig-> networkSetting . lora . appeui )) ) {
75+ if (cbor::utils:: copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .appeui , appeuiSize) == MessageDecoder::Status::Error ) {
9776 return MessageDecoder::Status::Error;
9877 }
9978
@@ -102,7 +81,8 @@ MessageDecoder::Status LoRaConfigProvisioningMessageDecoder::decode(CborValue* p
10281 return MessageDecoder::Status::Error;
10382 }
10483
105- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .appkey , sizeof (provisioningNetworkConfig->networkSetting .lora .appkey ))) {
84+ size_t appkeySize = sizeof (provisioningNetworkConfig->networkSetting .lora .appkey );
85+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .appkey , appkeySize) == MessageDecoder::Status::Error) {
10686 return MessageDecoder::Status::Error;
10787 }
10888
@@ -127,7 +107,8 @@ MessageDecoder::Status LoRaConfigProvisioningMessageDecoder::decode(CborValue* p
127107 return MessageDecoder::Status::Error;
128108 }
129109
130- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .channelMask , sizeof (provisioningNetworkConfig->networkSetting .lora .channelMask ))) {
110+ size_t channelMaskSize = sizeof (provisioningNetworkConfig->networkSetting .lora .channelMask );
111+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .lora .channelMask , channelMaskSize) == MessageDecoder::Status::Error) {
131112 return MessageDecoder::Status::Error;
132113 }
133114
@@ -138,7 +119,9 @@ MessageDecoder::Status LoRaConfigProvisioningMessageDecoder::decode(CborValue* p
138119
139120 char deviceClass[LORA_DEVICE_CLASS_SIZE];
140121 memset (deviceClass, 0x00 , sizeof (deviceClass));
141- if (!copyCBORStringToArray (param, deviceClass, sizeof (deviceClass))) {
122+
123+ size_t deviceClassSize = sizeof (deviceClass);
124+ if (cbor::utils::copyCBORStringToArray (param, deviceClass, deviceClassSize) == MessageDecoder::Status::Error) {
142125 return MessageDecoder::Status::Error;
143126 }
144127
@@ -159,8 +142,9 @@ MessageDecoder::Status CATM1ConfigProvisioningMessageDecoder::decode(CborValue*
159142 CborValue array_iter;
160143 size_t arrayLength = 0 ;
161144
145+ size_t pinSize = sizeof (provisioningNetworkConfig->networkSetting .catm1 .pin );
162146 // Message is composed of 5 parameters: pin, band, apn, login and password
163- if (! copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .pin , sizeof (provisioningNetworkConfig-> networkSetting . catm1 . pin )) ) {
147+ if (cbor::utils:: copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .pin , pinSize) == MessageDecoder::Status::Error ) {
164148 return MessageDecoder::Status::Error;
165149 }
166150
@@ -208,7 +192,8 @@ MessageDecoder::Status CATM1ConfigProvisioningMessageDecoder::decode(CborValue*
208192 return MessageDecoder::Status::Error;
209193 }
210194
211- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .apn , sizeof (provisioningNetworkConfig->networkSetting .catm1 .apn ))) {
195+ size_t apnSize = sizeof (provisioningNetworkConfig->networkSetting .catm1 .apn );
196+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .apn , apnSize) == MessageDecoder::Status::Error) {
212197 return MessageDecoder::Status::Error;
213198 }
214199
@@ -217,7 +202,8 @@ MessageDecoder::Status CATM1ConfigProvisioningMessageDecoder::decode(CborValue*
217202 return MessageDecoder::Status::Error;
218203 }
219204
220- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .login , sizeof (provisioningNetworkConfig->networkSetting .catm1 .login ))) {
205+ size_t loginSize = sizeof (provisioningNetworkConfig->networkSetting .catm1 .login );
206+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .login , loginSize) == MessageDecoder::Status::Error) {
221207 return MessageDecoder::Status::Error;
222208 }
223209
@@ -226,7 +212,8 @@ MessageDecoder::Status CATM1ConfigProvisioningMessageDecoder::decode(CborValue*
226212 return MessageDecoder::Status::Error;
227213 }
228214
229- if (!copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .pass , sizeof (provisioningNetworkConfig->networkSetting .catm1 .pass ))) {
215+ size_t passSize = sizeof (provisioningNetworkConfig->networkSetting .catm1 .pass );
216+ if (cbor::utils::copyCBORStringToArray (param, provisioningNetworkConfig->networkSetting .catm1 .pass , passSize) == MessageDecoder::Status::Error) {
230217 return MessageDecoder::Status::Error;
231218 }
232219
@@ -343,8 +330,9 @@ MessageDecoder::Status EthernetConfigProvisioningMessageDecoder::decode(CborValu
343330#if defined(BOARD_HAS_NB) || defined(BOARD_HAS_GSM) ||defined(BOARD_HAS_CELLULAR)
344331static inline MessageDecoder::Status extractCellularFields (CborValue* param, models::CellularSetting* cellSetting) {
345332
333+ size_t pinSize = sizeof (cellSetting->pin );
346334 // Message is composed of 4 parameters: pin, apn, login and password
347- if (! copyCBORStringToArray (param, cellSetting->pin , sizeof (cellSetting-> pin )) ) {
335+ if (cbor::utils:: copyCBORStringToArray (param, cellSetting->pin , pinSize) == MessageDecoder::Status::Error ) {
348336 return MessageDecoder::Status::Error;
349337 }
350338
@@ -353,7 +341,8 @@ static inline MessageDecoder::Status extractCellularFields(CborValue* param, mod
353341 return MessageDecoder::Status::Error;
354342 }
355343
356- if (!copyCBORStringToArray (param, cellSetting->apn , sizeof (cellSetting->apn ))) {
344+ size_t apnSize = sizeof (cellSetting->apn );
345+ if (cbor::utils::copyCBORStringToArray (param, cellSetting->apn , apnSize) == MessageDecoder::Status::Error) {
357346 return MessageDecoder::Status::Error;
358347 }
359348
@@ -362,7 +351,8 @@ static inline MessageDecoder::Status extractCellularFields(CborValue* param, mod
362351 return MessageDecoder::Status::Error;
363352 }
364353
365- if (!copyCBORStringToArray (param, cellSetting->login , sizeof (cellSetting->login ))) {
354+ size_t loginSize = sizeof (cellSetting->login );
355+ if (cbor::utils::copyCBORStringToArray (param, cellSetting->login , loginSize) == MessageDecoder::Status::Error) {
366356 return MessageDecoder::Status::Error;
367357 }
368358
@@ -371,7 +361,8 @@ static inline MessageDecoder::Status extractCellularFields(CborValue* param, mod
371361 return MessageDecoder::Status::Error;
372362 }
373363
374- if (!copyCBORStringToArray (param, cellSetting->pass , sizeof (cellSetting->pass ))) {
364+ size_t passSize = sizeof (cellSetting->pass );
365+ if (cbor::utils::copyCBORStringToArray (param, cellSetting->pass , passSize) == MessageDecoder::Status::Error) {
375366 return MessageDecoder::Status::Error;
376367 }
377368
0 commit comments