Skip to content

Commit 7e4b912

Browse files
committed
More commands
1 parent 1ba40cc commit 7e4b912

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

src/cbor/MessageDecoder.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ bool copyCBORStringToArray(CborValue * param, char * dest, size_t dest_size) {
9393
char * val = 0;
9494
size_t val_size = 0;
9595
if (cbor_value_dup_text_string(param, &val, &val_size, NULL) == CborNoError) {
96+
if (val_size > dest_size) {
97+
val_size = dest_size;
98+
}
9699
strncpy(dest, val, dest_size);
97100
free(val);
98101
return true;
@@ -101,6 +104,22 @@ bool copyCBORStringToArray(CborValue * param, char * dest, size_t dest_size) {
101104
return false;
102105
}
103106

107+
bool copyCBORByteToArray(CborValue * param, uint8_t * dest, size_t dest_size) {
108+
if (cbor_value_is_byte_string(param)) {
109+
uint8_t * val = 0;
110+
size_t val_size = 0;
111+
if (cbor_value_dup_byte_string(param, &val, &val_size, NULL) == CborNoError) {
112+
if (val_size > dest_size) {
113+
val_size = dest_size;
114+
}
115+
std::copy(val, val + dest_size, dest);
116+
free(val);
117+
return true;
118+
}
119+
}
120+
return false;
121+
}
122+
104123
MessageDecoder::ArrayParserState MessageDecoder::decodeGetThingIdCommand(CborValue * param, Message * message) {
105124
GetThingIdCommand * thingCommand = (GetThingIdCommand *) message;
106125

@@ -169,6 +188,26 @@ MessageDecoder::ArrayParserState MessageDecoder::decodeOTAAvailableCommand(CborV
169188
return ArrayParserState::Error;
170189
}
171190

191+
if (cbor_value_advance(param) != CborNoError) {
192+
return ArrayParserState::Error;
193+
}
194+
195+
if (copyCBORByteToArray(param, ota->fields.params.initialSha256, sizeof(ota->fields.params.initialSha256))) {
196+
return ArrayParserState::LeaveArray;
197+
} else {
198+
return ArrayParserState::Error;
199+
}
200+
201+
if (cbor_value_advance(param) != CborNoError) {
202+
return ArrayParserState::Error;
203+
}
204+
205+
if (copyCBORByteToArray(param, ota->fields.params.finalSha256, sizeof(ota->fields.params.finalSha256))) {
206+
return ArrayParserState::LeaveArray;
207+
} else {
208+
return ArrayParserState::Error;
209+
}
210+
172211
return ArrayParserState::LeaveArray;
173212
}
174213

0 commit comments

Comments
 (0)