diff --git a/lib/chat/cubits/reconciliation/message_integrity.dart b/lib/chat/cubits/reconciliation/message_integrity.dart index 2c4bb85..40b3b18 100644 --- a/lib/chat/cubits/reconciliation/message_integrity.dart +++ b/lib/chat/cubits/reconciliation/message_integrity.dart @@ -47,6 +47,11 @@ class MessageIntegrity { message.signature = signature.toProto(); } + // XXX: change bool to an enum to allow for reconciling deleted + // XXX: messages. if a message is deleted it will not verify, but its + // XXX: signature will still be in place for the message chain. + // XXX: it should be added to a list to check for a ControlDelete that + // XXX: appears later in the message log. Future verifyMessage(proto.Message message) { // Ensure the message is signed assert(message.hasSignature(), 'should not verify unsigned message'); diff --git a/packages/veilid_support/lib/dht_support/src/dht_log/dht_log_write.dart b/packages/veilid_support/lib/dht_support/src/dht_log/dht_log_write.dart index 00eaa94..e3697c8 100644 --- a/packages/veilid_support/lib/dht_support/src/dht_log/dht_log_write.dart +++ b/packages/veilid_support/lib/dht_support/src/dht_log/dht_log_write.dart @@ -36,60 +36,6 @@ class _DHTLogWrite extends _DHTLogRead implements DHTLogWriteOperations { return true; } - @override - Future swap(int aPos, int bPos) async { - if (aPos < 0 || aPos >= _spine.length) { - throw IndexError.withLength(aPos, _spine.length); - } - if (bPos < 0 || bPos >= _spine.length) { - throw IndexError.withLength(bPos, _spine.length); - } - final aLookup = await _spine.lookupPosition(aPos); - if (aLookup == null) { - throw DHTExceptionInvalidData('_DHTLogWrite::swap aPos=$aPos bPos=$bPos ' - '_spine.length=${_spine.length}'); - } - final bLookup = await _spine.lookupPosition(bPos); - if (bLookup == null) { - await aLookup.close(); - throw DHTExceptionInvalidData('_DHTLogWrite::swap aPos=$aPos bPos=$bPos ' - '_spine.length=${_spine.length}'); - } - - // Swap items in the segments - if (aLookup.shortArray == bLookup.shortArray) { - await bLookup.close(); - return aLookup.scope((sa) => sa.operateWriteEventual( - (aWrite) => aWrite.swap(aLookup.pos, bLookup.pos))); - } else { - final bItem = Output(); - return aLookup.scope( - (sa) => bLookup.scope((sb) => sa.operateWriteEventual((aWrite) async { - if (bItem.value == null) { - final aItem = await aWrite.get(aLookup.pos); - if (aItem == null) { - throw DHTExceptionInvalidData( - '_DHTLogWrite::swap aPos=$aPos bPos=$bPos ' - 'aLookup.pos=${aLookup.pos} bLookup.pos=${bLookup.pos} ' - '_spine.length=${_spine.length}'); - } - await sb.operateWriteEventual((bWrite) async { - final success = await bWrite - .tryWriteItem(bLookup.pos, aItem, output: bItem); - if (!success) { - throw const DHTExceptionOutdated(); - } - }); - } - final success = - await aWrite.tryWriteItem(aLookup.pos, bItem.value!); - if (!success) { - throw const DHTExceptionOutdated(); - } - }))); - } - } - @override Future add(Uint8List value) async { // Allocate empty index at the end of the list diff --git a/packages/veilid_support/lib/dht_support/src/dht_short_array/dht_short_array_write.dart b/packages/veilid_support/lib/dht_support/src/dht_short_array/dht_short_array_write.dart index fa3b1c6..bd3431d 100644 --- a/packages/veilid_support/lib/dht_support/src/dht_short_array/dht_short_array_write.dart +++ b/packages/veilid_support/lib/dht_support/src/dht_short_array/dht_short_array_write.dart @@ -6,6 +6,7 @@ part of 'dht_short_array.dart'; abstract class DHTShortArrayWriteOperations implements DHTRandomRead, + DHTRandomSwap, DHTRandomWrite, DHTInsertRemove, DHTAdd, diff --git a/packages/veilid_support/lib/dht_support/src/interfaces/dht_random_write.dart b/packages/veilid_support/lib/dht_support/src/interfaces/dht_random_write.dart index 5b3f032..0d8f3ac 100644 --- a/packages/veilid_support/lib/dht_support/src/interfaces/dht_random_write.dart +++ b/packages/veilid_support/lib/dht_support/src/interfaces/dht_random_write.dart @@ -23,11 +23,6 @@ abstract class DHTRandomWrite { /// of the container. Future tryWriteItem(int pos, Uint8List newValue, {Output? output}); - - /// Swap items at position 'aPos' and 'bPos' in the DHTArray. - /// Throws an IndexError if either of the positions swapped exceeds the length - /// of the container - Future swap(int aPos, int bPos); } extension DHTRandomWriteExt on DHTRandomWrite { diff --git a/packages/veilid_support/lib/dht_support/src/interfaces/interfaces.dart b/packages/veilid_support/lib/dht_support/src/interfaces/interfaces.dart index a162dc8..8a019dd 100644 --- a/packages/veilid_support/lib/dht_support/src/interfaces/interfaces.dart +++ b/packages/veilid_support/lib/dht_support/src/interfaces/interfaces.dart @@ -3,6 +3,7 @@ export 'dht_clear.dart'; export 'dht_closeable.dart'; export 'dht_insert_remove.dart'; export 'dht_random_read.dart'; +export 'dht_random_swap.dart'; export 'dht_random_write.dart'; export 'dht_truncate.dart'; export 'exceptions.dart';