From 132e20a6ce63deb730332f382d91409e79791287 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 13 Jun 2019 16:14:51 +0100 Subject: [PATCH] Send versions record at start of each session. --- .../org/briarproject/bramble/api/sync/SyncConstants.java | 8 ++++++++ .../briarproject/bramble/sync/DuplexOutgoingSession.java | 7 ++++++- .../org/briarproject/bramble/sync/IncomingSession.java | 9 +++++++++ .../bramble/sync/SimplexOutgoingSession.java | 7 ++++++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java index 422a15117..c430ac05f 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java @@ -2,6 +2,9 @@ package org.briarproject.bramble.api.sync; import org.briarproject.bramble.api.UniqueId; +import java.util.List; + +import static java.util.Collections.singletonList; import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES; public interface SyncConstants { @@ -11,6 +14,11 @@ public interface SyncConstants { */ byte PROTOCOL_VERSION = 0; + /** + * The versions of the sync protocol this peer supports. + */ + List SUPPORTED_VERSIONS = singletonList(PROTOCOL_VERSION); + /** * The maximum length of a group descriptor in bytes. */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java index 00c50f16c..0aa1a8985 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java @@ -17,6 +17,7 @@ import org.briarproject.bramble.api.sync.Offer; import org.briarproject.bramble.api.sync.Request; import org.briarproject.bramble.api.sync.SyncRecordWriter; import org.briarproject.bramble.api.sync.SyncSession; +import org.briarproject.bramble.api.sync.Versions; import org.briarproject.bramble.api.sync.event.GroupVisibilityUpdatedEvent; import org.briarproject.bramble.api.sync.event.MessageRequestedEvent; import org.briarproject.bramble.api.sync.event.MessageSharedEvent; @@ -39,9 +40,11 @@ import javax.annotation.concurrent.ThreadSafe; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STOPPING; import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS; +import static org.briarproject.bramble.api.sync.SyncConstants.SUPPORTED_VERSIONS; import static org.briarproject.bramble.util.LogUtils.logException; /** @@ -55,7 +58,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; class DuplexOutgoingSession implements SyncSession, EventListener { private static final Logger LOG = - Logger.getLogger(DuplexOutgoingSession.class.getName()); + getLogger(DuplexOutgoingSession.class.getName()); private static final ThrowingRunnable CLOSE = () -> { }; @@ -103,6 +106,8 @@ class DuplexOutgoingSession implements SyncSession, EventListener { public void run() throws IOException { eventBus.addListener(this); try { + // Send our supported protocol versions + recordWriter.writeVersions(new Versions(SUPPORTED_VERSIONS)); // Start a query for each type of record generateAck(); generateBatch(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java index 6e1e2987d..ae2c26978 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java @@ -18,6 +18,7 @@ import org.briarproject.bramble.api.sync.Offer; import org.briarproject.bramble.api.sync.Request; import org.briarproject.bramble.api.sync.SyncRecordReader; import org.briarproject.bramble.api.sync.SyncSession; +import org.briarproject.bramble.api.sync.Versions; import java.io.IOException; import java.util.concurrent.Executor; @@ -25,6 +26,7 @@ import java.util.logging.Logger; import javax.annotation.concurrent.ThreadSafe; +import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STOPPING; import static org.briarproject.bramble.util.LogUtils.logException; @@ -80,6 +82,13 @@ class IncomingSession implements SyncSession, EventListener { } else if (recordReader.hasRequest()) { Request r = recordReader.readRequest(); dbExecutor.execute(new ReceiveRequest(r)); + } else if (recordReader.hasVersions()) { + Versions v = recordReader.readVersions(); + // TODO: Store remote peer's supported versions + if (LOG.isLoggable(INFO)) { + LOG.info("Received supported versions: " + + v.getSupportedVersions()); + } } else { // unknown records are ignored in RecordReader#eof() throw new FormatException(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java index ecc7c26bb..9e1e62909 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java @@ -15,6 +15,7 @@ import org.briarproject.bramble.api.sync.Ack; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.SyncRecordWriter; import org.briarproject.bramble.api.sync.SyncSession; +import org.briarproject.bramble.api.sync.Versions; import org.briarproject.bramble.api.transport.StreamWriter; import java.io.IOException; @@ -29,9 +30,11 @@ import javax.annotation.concurrent.ThreadSafe; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STOPPING; import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS; +import static org.briarproject.bramble.api.sync.SyncConstants.SUPPORTED_VERSIONS; import static org.briarproject.bramble.util.LogUtils.logException; /** @@ -44,7 +47,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; class SimplexOutgoingSession implements SyncSession, EventListener { private static final Logger LOG = - Logger.getLogger(SimplexOutgoingSession.class.getName()); + getLogger(SimplexOutgoingSession.class.getName()); private static final ThrowingRunnable CLOSE = () -> { }; @@ -80,6 +83,8 @@ class SimplexOutgoingSession implements SyncSession, EventListener { public void run() throws IOException { eventBus.addListener(this); try { + // Send our supported protocol versions + recordWriter.writeVersions(new Versions(SUPPORTED_VERSIONS)); // Start a query for each type of record dbExecutor.execute(new GenerateAck()); dbExecutor.execute(new GenerateBatch());