From 05735e7a48e9850ae7a2d214543e6612c533d174 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Sat, 21 Apr 2018 17:11:09 -0300 Subject: [PATCH] Add methods for dealing with TransportProperties to ClientHelper --- .../bramble/api/client/ClientHelper.java | 9 ++++++ .../bramble/api/data/BdfDictionary.java | 2 +- .../briarproject/bramble/test/TestUtils.java | 23 ++++++++++++++ .../bramble/client/ClientHelperImpl.java | 30 +++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java index 0ddd7f9d94..dd60bb6100 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/client/ClientHelper.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.Message; @@ -89,6 +90,10 @@ public interface ClientHelper { BdfDictionary toDictionary(byte[] b, int off, int len) throws FormatException; + BdfDictionary toDictionary(TransportProperties transportProperties); + + BdfDictionary toDictionary(Map<TransportId, TransportProperties> map); + BdfList toList(byte[] b, int off, int len) throws FormatException; BdfList toList(byte[] b) throws FormatException; @@ -107,4 +112,8 @@ public interface ClientHelper { TransportProperties parseAndValidateTransportProperties( BdfDictionary properties) throws FormatException; + + Map<TransportId, TransportProperties> parseAndValidateTransportPropertiesMap( + BdfDictionary properties) throws FormatException; + } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java index 50b861d895..927dafb64b 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java @@ -34,7 +34,7 @@ public class BdfDictionary extends TreeMap<String, Object> { super(); } - public BdfDictionary(Map<String, Object> m) { + public BdfDictionary(Map<String, ?> m) { super(m); } diff --git a/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java b/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java index 9da2a829ce..3ce8d15499 100644 --- a/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java +++ b/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.AuthorId; import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.sync.ClientId; import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.GroupId; @@ -17,7 +18,9 @@ import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; @@ -25,6 +28,7 @@ import static org.briarproject.bramble.api.identity.Author.FORMAT_VERSION; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH; import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH; import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_LENGTH; +import static org.briarproject.bramble.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH; import static org.briarproject.bramble.api.sync.ClientId.MAX_CLIENT_ID_LENGTH; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_GROUP_DESCRIPTOR_LENGTH; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH; @@ -65,6 +69,25 @@ public class TestUtils { return new TransportId(getRandomString(MAX_TRANSPORT_ID_LENGTH)); } + public static TransportProperties getTransportProperties(int number) { + TransportProperties tp = new TransportProperties(); + for (int i = 0; i < number; i++) { + tp.put(getRandomString(1 + random.nextInt(MAX_PROPERTY_LENGTH)), + getRandomString(1 + random.nextInt(MAX_PROPERTY_LENGTH)) + ); + } + return tp; + } + + public static Map<TransportId, TransportProperties> getTransportPropertiesMap( + int number) { + Map<TransportId, TransportProperties> map = new HashMap<>(); + for (int i = 0; i < number; i++) { + map.put(getTransportId(), getTransportProperties(number)); + } + return map; + } + public static SecretKey getSecretKey() { return new SecretKey(getRandomBytes(SecretKey.LENGTH)); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java index 81da440bcd..7c833a66d4 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java @@ -18,6 +18,7 @@ import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.AuthorFactory; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.properties.TransportProperties; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.Message; @@ -327,6 +328,20 @@ class ClientHelperImpl implements ClientHelper { } } + @Override + public BdfDictionary toDictionary(TransportProperties transportProperties) { + return new BdfDictionary(transportProperties); + } + + @Override + public BdfDictionary toDictionary( + Map<TransportId, TransportProperties> map) { + BdfDictionary d = new BdfDictionary(); + for (Entry<TransportId, TransportProperties> e : map.entrySet()) + d.put(e.getKey().getString(), new BdfDictionary(e.getValue())); + return d; + } + @Override public BdfList toList(byte[] b, int off, int len) throws FormatException { ByteArrayInputStream in = new ByteArrayInputStream(b, off, len); @@ -399,4 +414,19 @@ class ClientHelperImpl implements ClientHelper { } return p; } + + @Override + public Map<TransportId, TransportProperties> parseAndValidateTransportPropertiesMap( + BdfDictionary properties) throws FormatException { + Map<TransportId, TransportProperties> tpMap = new HashMap<>(); + for (String key : properties.keySet()) { + TransportId transportId = new TransportId(key); + TransportProperties transportProperties = + parseAndValidateTransportProperties( + properties.getDictionary(key)); + tpMap.put(transportId, transportProperties); + } + return tpMap; + } + } -- GitLab