Writer error reporting improvement

This commit is contained in:
2024-03-06 19:57:31 +01:00
parent b36811968b
commit 5b91d0059e
3 changed files with 52 additions and 34 deletions
+35 -29
View File
@@ -822,44 +822,50 @@ void CBORStream2Deserializer::Process(const std::vector<uint8_t> &buffer) {
}
void CBORStream2Deserializer::Process(const uint8_t *msg, size_t msg_size) {
std::unique_lock<std::mutex> ul(m);
std::unique_lock<std::mutex> ul(m);
data_message = DataMessage();
CborParser parser;
CborValue value;
cborErr(cbor_parser_init(msg, msg_size, 0, &parser, &value));
if (GetCBORTag(value) != CborSignatureTag)
throw JFJochException(JFJochExceptionCategory::CBORError, "CBOR must start with dedicated tag");
try {
cborErr(cbor_parser_init(msg, msg_size, 0, &parser, &value));
if (GetCBORTag(value) != CborSignatureTag)
throw JFJochException(JFJochExceptionCategory::CBORError, "CBOR must start with dedicated tag");
if (cbor_value_is_map(&value)) {
CborValue map_value;
cborErr(cbor_value_enter_container(&value, &map_value));
if (cbor_value_is_map(&value)) {
CborValue map_value;
cborErr(cbor_value_enter_container(&value, &map_value));
DecodeType(map_value);
switch (msg_type) {
case Type::IMAGE:
while (ProcessImageMessageElement(map_value));
break;
case Type::START:
start_message = StartMessage{
.data_file_count = 1
};
while (ProcessStartMessageElement(map_value));
break;
case Type::END:
end_message = EndMessage{};
while (ProcessEndMessageElement(map_value));
break;
case Type::NONE:
break;
}
DecodeType(map_value);
switch (msg_type) {
case Type::IMAGE:
while (ProcessImageMessageElement(map_value));
break;
case Type::START:
start_message = StartMessage{
.data_file_count = 1
};
while (ProcessStartMessageElement(map_value));
break;
case Type::END:
end_message = EndMessage{};
while (ProcessEndMessageElement(map_value));
break;
case Type::NONE:
break;
}
cborErr(cbor_value_leave_container(&value, &map_value));
} else
throw JFJochException(JFJochExceptionCategory::CBORError,
"Serialized frame must be map in top level");
cborErr(cbor_value_leave_container(&value, &map_value));
} else
throw JFJochException(JFJochExceptionCategory::CBORError,
"Serialized frame must be map in top level");
} catch (...) {
msg_type = Type::NONE;
throw;
}
}
DataMessage CBORStream2Deserializer::GetDataMessage() const {