JFJochFrameSerializer: Add magic number to ensure that CBOR user data fields are consistent between receiver and writer

This commit is contained in:
2023-07-06 11:09:24 +02:00
parent 9e92e230ba
commit 36cfba6093
4 changed files with 74 additions and 21 deletions

View File

@@ -255,7 +255,8 @@ inline void CBOR_ENC_USER_DATA(CborEncoder &encoder, const StartMessage& message
CborEncoder mapEncoder;
cborErr(cbor_encode_text_stringz(&encoder, "user_data"));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 22));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 23));
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
CBOR_ENC(mapEncoder, "file_prefix", message.file_prefix);
CBOR_ENC(mapEncoder, "sample_name", message.sample_name);
@@ -378,20 +379,26 @@ void JFJochFrameSerializer::SerializeSequenceStart(const StartMessage& message)
}
void JFJochFrameSerializer::SerializeSequenceEnd(const EndMessage& message) {
CborEncoder encoder, mapEncoder;
CborEncoder encoder, mapEncoder, userDataMapEncoder;
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
cborErr(cbor_encode_tag(&encoder,CborSignatureTag ));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 9));
cborErr(cbor_encode_tag(&encoder, CborSignatureTag));
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 5));
CBOR_ENC(mapEncoder, "type", "end");
CBOR_ENC(mapEncoder, "series_unique_id", message.series_unique_id);
CBOR_ENC(mapEncoder, "series_id", message.series_id);
CBOR_ENC(mapEncoder, "number_of_images", message.number_of_images);
CBOR_ENC(mapEncoder, "max_receiver_delay", message.max_receiver_delay);
CBOR_ENC(mapEncoder, "receiver_efficiency", message.efficiency);
CBOR_ENC(mapEncoder, "write_master_file", message.write_master_file);
CBOR_ENC(mapEncoder, "end_date", message.end_date);
CBOR_ENC_RAD_INT_RESULT(mapEncoder, "rad_int_result", message.rad_int_result);
cborErr(cbor_encode_text_stringz(&mapEncoder, "user_data"));
cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 6));
CBOR_ENC(userDataMapEncoder, "magic_number", user_data_magic_number);
CBOR_ENC(userDataMapEncoder, "number_of_images", message.number_of_images);
CBOR_ENC(userDataMapEncoder, "max_receiver_delay", message.max_receiver_delay);
CBOR_ENC(userDataMapEncoder, "receiver_efficiency", message.efficiency);
CBOR_ENC(userDataMapEncoder, "write_master_file", message.write_master_file);
CBOR_ENC_RAD_INT_RESULT(userDataMapEncoder, "rad_int_result", message.rad_int_result);
cborErr(cbor_encoder_close_container(&mapEncoder, &userDataMapEncoder));
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
@@ -416,8 +423,9 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) {
message.timestamp_base);
cborErr(cbor_encode_text_stringz(&mapEncoder, "user_data"));
cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 9));
cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 10));
CBOR_ENC(userDataMapEncoder, "magic_number", user_data_magic_number);
CBOR_ENC(userDataMapEncoder, "spots", message.spots);
CBOR_ENC(userDataMapEncoder, "rad_int_profile", message.rad_int_profile);
CBOR_ENC(userDataMapEncoder, "indexing_result", message.indexing_result);