feat: persist location state transactionally

This commit is contained in:
torlando-agent[bot]
2026-08-07 01:23:08 +00:00
parent 3422392aeb
commit 49bf2bc675
10 changed files with 651 additions and 4 deletions
+14 -4
View File
@@ -283,10 +283,9 @@ LocationStateRecordResult encodeLocationStateRecord(
return LocationStateRecordResult::OK;
}
LocationStateRecordResult decodeLocationStateRecord(
LocationStateRecordResult validateLocationStateRecord(
const uint8_t* data,
std::size_t size,
LocationStateSnapshot& output) {
std::size_t size) {
if (data == nullptr) return LocationStateRecordResult::INVALID_ARGUMENT;
if (size < LOCATION_STATE_HEADER_BYTES + LOCATION_STATE_CRC_BYTES) {
return LocationStateRecordResult::MALFORMED;
@@ -321,10 +320,21 @@ LocationStateRecordResult decodeLocationStateRecord(
}
const uint8_t* payload = data + LOCATION_STATE_HEADER_BYTES;
return validateEncodedRecords(payload, session_count, location_count);
}
LocationStateRecordResult decodeLocationStateRecord(
const uint8_t* data,
std::size_t size,
LocationStateSnapshot& output) {
const LocationStateRecordResult validation =
validateEncodedRecords(payload, session_count, location_count);
validateLocationStateRecord(data, size);
if (validation != LocationStateRecordResult::OK) return validation;
const std::size_t session_count = readU16(data + 12);
const std::size_t location_count = readU16(data + 14);
const uint8_t* payload = data + LOCATION_STATE_HEADER_BYTES;
output.session_count = 0;
output.location_count = 0;
for (std::size_t index = 0; index < MAX_SHARE_SESSIONS; ++index) {