Writer error reporting improvement
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user