FrameSerializer: hide image data in user_data in CBOR

This commit is contained in:
2023-04-18 13:35:58 +02:00
parent 001a7d86fc
commit 962edaa4ad
3 changed files with 46 additions and 26 deletions

View File

@@ -321,8 +321,31 @@ void JFJochFrameDeserializer::ProcessDetTranslation(CborValue &value) {
cborErr(cbor_value_leave_container(&value, &array_value));
}
void JFJochFrameDeserializer::ProcessImageMessageUserDataElement(CborValue &value) {
CborValue map_value;
cborErr(cbor_value_enter_container(&value, &map_value));
while (!cbor_value_at_end(&map_value)) {
auto key = GetCBORString(map_value);
bool JFJochFrameDeserializer::ProcessImageMapElement(CborValue &value) {
if (key == "spots")
GetCBORSpots(map_value);
else if (key == "rad_int_profile")
GetCBORFloatArray(map_value, data_message.rad_int_profile);
else if (key == "indexing_result")
data_message.indexing_result = GetCBORUInt(map_value);
else if (key == "jf_info")
data_message.jf_info = GetCBORUInt(map_value) & UINT32_MAX;
else if (key == "bunch_id")
data_message.bunch_id = GetCBORUInt(map_value);
else if (key == "timestamp")
data_message.timestamp = GetCBORUInt(map_value);
else
cbor_value_advance(&map_value);
}
cborErr(cbor_value_leave_container(&value, &map_value));
}
bool JFJochFrameDeserializer::ProcessImageMessageElement(CborValue &value) {
if (cbor_value_at_end(&value))
return false;
else {
@@ -332,18 +355,8 @@ bool JFJochFrameDeserializer::ProcessImageMapElement(CborValue &value) {
data_message.number = GetCBORInt(value);
else if (key == "data")
ProcessImageData(value);
else if (key == "spots")
GetCBORSpots(value);
else if (key == "rad_int_profile")
GetCBORFloatArray(value, data_message.rad_int_profile);
else if (key == "indexing_result")
data_message.indexing_result = GetCBORUInt(value);
else if (key == "jf_info")
data_message.jf_info = GetCBORUInt(value) & UINT32_MAX;
else if (key == "bunch_id")
data_message.bunch_id = GetCBORUInt(value);
else if (key == "timestamp")
data_message.timestamp = GetCBORUInt(value);
else if (key == "user_data")
ProcessImageMessageUserDataElement(value);
else
cbor_value_advance(&value);
return true;
@@ -408,7 +421,7 @@ void JFJochFrameDeserializer::ProcessUnitCellElement(CborValue &value) {
cborErr(cbor_value_leave_container(&value, &map_value));
}
void JFJochFrameDeserializer::ProcessUserDataElement(CborValue &value) {
void JFJochFrameDeserializer::ProcessStartMessageUserDataElement(CborValue &value) {
CborValue map_value;
cborErr(cbor_value_enter_container(&value, &map_value));
while (!cbor_value_at_end(&map_value)) {
@@ -519,7 +532,7 @@ bool JFJochFrameDeserializer::ProcessStartMessageElement(CborValue &value) {
else if (key == "arm_date")
start_message.arm_date = GetCBORString(value);
else if (key == "user_data")
ProcessUserDataElement(value);
ProcessStartMessageUserDataElement(value);
else
cbor_value_advance(&value);
return true;
@@ -579,7 +592,7 @@ std::unique_lock<std::mutex> ul(m);
DecodeType(map_value);
switch (msg_type) {
case Type::IMAGE:
while (ProcessImageMapElement(map_value));
while (ProcessImageMessageElement(map_value));
break;
case Type::START:
start_message = StartMessage{

View File

@@ -40,8 +40,9 @@ private:
void ProcessImageData(CborValue &value);
void ProcessPixelMaskElement(CborValue &value);
void ProcessUnitCellElement(CborValue &value);
void ProcessUserDataElement(CborValue &value);
bool ProcessImageMapElement(CborValue &value);
void ProcessStartMessageUserDataElement(CborValue &value);
void ProcessImageMessageUserDataElement(CborValue &value);
bool ProcessImageMessageElement(CborValue &value);
bool ProcessStartMessageElement(CborValue &value);
bool ProcessEndMessageElement(CborValue &value);
public:

View File

@@ -361,19 +361,25 @@ void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) {
void JFJochFrameSerializer::SerializeImage(const DataMessage& message) {
buffer.resize(max_buffer_size);
CborEncoder encoder, mapEncoder;
CborEncoder encoder, mapEncoder, userDataMapEncoder;
cbor_encoder_init(&encoder, buffer.data(), buffer.size(), 0);
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 9));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 4));
CBOR_ENC(mapEncoder, "type", "image");
CBOR_ENC(mapEncoder, "image_id", message.number);
CBOR_ENC(mapEncoder, "data", message.image);
CBOR_ENC(mapEncoder, "spots", message.spots);
CBOR_ENC(mapEncoder, "rad_int_profile", message.rad_int_profile);
CBOR_ENC(mapEncoder, "indexing_result", message.indexing_result);
CBOR_ENC(mapEncoder, "bunch_id", message.bunch_id);
CBOR_ENC(mapEncoder, "jf_info", (uint64_t) message.jf_info);
CBOR_ENC(mapEncoder, "timestamp", message.timestamp);
cborErr(cbor_encode_text_stringz(&mapEncoder, "user_data"));
cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 6));
CBOR_ENC(userDataMapEncoder, "spots", message.spots);
CBOR_ENC(userDataMapEncoder, "rad_int_profile", message.rad_int_profile);
CBOR_ENC(userDataMapEncoder, "indexing_result", message.indexing_result);
CBOR_ENC(userDataMapEncoder, "bunch_id", message.bunch_id);
CBOR_ENC(userDataMapEncoder, "jf_info", (uint64_t) message.jf_info);
CBOR_ENC(userDataMapEncoder, "timestamp", message.timestamp);
cborErr(cbor_encoder_close_container(&mapEncoder, &userDataMapEncoder));
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
buffer.resize(cbor_encoder_get_buffer_size(&encoder, buffer.data()));