From 6af3c54c283530c4477bc87722cbc64cc6cfb800 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Wed, 15 Jan 2014 17:10:25 +0000 Subject: [PATCH] Removed shouldFlush() from plugins, added missing PacketWriter method. --- .../DroidtoothTransportConnection.java | 4 -- .../plugins/tor/TorTransportConnection.java | 4 -- .../api/messaging/PacketWriter.java | 2 + .../duplex/DuplexTransportConnection.java | 5 --- .../simplex/SimplexTransportWriter.java | 5 --- .../messaging/PacketWriterFactoryImpl.java | 3 +- .../messaging/PacketWriterImpl.java | 18 +++++---- .../messaging/duplex/DuplexConnection.java | 5 +-- .../simplex/OutgoingSimplexConnection.java | 6 +-- .../plugins/file/FileTransportWriter.java | 4 -- .../plugins/tcp/TcpTransportConnection.java | 4 -- .../BluetoothTransportConnection.java | 4 -- .../plugins/modem/ModemPlugin.java | 4 -- .../briarproject/messaging/ConstantsTest.java | 38 +++++++++++++++---- .../OutgoingSimplexConnectionTest.java | 6 +-- .../SimplexMessagingIntegrationTest.java | 2 +- .../simplex/TestSimplexTransportWriter.java | 8 +--- 17 files changed, 54 insertions(+), 68 deletions(-) diff --git a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothTransportConnection.java b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothTransportConnection.java index 1fa460cf61..bc365fcf78 100644 --- a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothTransportConnection.java +++ b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothTransportConnection.java @@ -34,10 +34,6 @@ class DroidtoothTransportConnection implements DuplexTransportConnection { return socket.getOutputStream(); } - public boolean shouldFlush() { - return true; - } - public void dispose(boolean exception, boolean recognised) throws IOException { socket.close(); diff --git a/briar-android/src/org/briarproject/plugins/tor/TorTransportConnection.java b/briar-android/src/org/briarproject/plugins/tor/TorTransportConnection.java index b211316a99..14c490d187 100644 --- a/briar-android/src/org/briarproject/plugins/tor/TorTransportConnection.java +++ b/briar-android/src/org/briarproject/plugins/tor/TorTransportConnection.java @@ -34,10 +34,6 @@ class TorTransportConnection implements DuplexTransportConnection { return socket.getOutputStream(); } - public boolean shouldFlush() { - return true; - } - public void dispose(boolean exception, boolean recognised) throws IOException { socket.close(); diff --git a/briar-api/src/org/briarproject/api/messaging/PacketWriter.java b/briar-api/src/org/briarproject/api/messaging/PacketWriter.java index d5d787a195..f76c454148 100644 --- a/briar-api/src/org/briarproject/api/messaging/PacketWriter.java +++ b/briar-api/src/org/briarproject/api/messaging/PacketWriter.java @@ -4,6 +4,8 @@ import java.io.IOException; public interface PacketWriter { + int getMaxMessagesForAck(long capacity); + int getMaxMessagesForRequest(long capacity); int getMaxMessagesForOffer(long capacity); diff --git a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexTransportConnection.java b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexTransportConnection.java index 2acab4cf1a..7193c0849a 100644 --- a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexTransportConnection.java +++ b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexTransportConnection.java @@ -23,11 +23,6 @@ public interface DuplexTransportConnection { /** Returns an output stream for writing to the connection. */ OutputStream getOutputStream() throws IOException; - /** - * Returns true if the output stream should be flushed after each packet. - */ - boolean shouldFlush(); - /** * Closes the connection and disposes of any associated resources. The * first argument indicates whether the connection is being closed because diff --git a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexTransportWriter.java b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexTransportWriter.java index 76fb20d3f2..0b50a78981 100644 --- a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexTransportWriter.java +++ b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexTransportWriter.java @@ -21,11 +21,6 @@ public interface SimplexTransportWriter { /** Returns an output stream for writing to the transport. */ OutputStream getOutputStream() throws IOException; - /** - * Returns true if the output stream should be flushed after each packet. - */ - boolean shouldFlush(); - /** * Closes the writer and disposes of any associated resources. The * argument indicates whether the writer is being closed because of an diff --git a/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java b/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java index dbe4f4613c..4c14ef1afb 100644 --- a/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java +++ b/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java @@ -21,8 +21,7 @@ class PacketWriterFactoryImpl implements PacketWriterFactory { this.writerFactory = writerFactory; } - public PacketWriter createPacketWriter(OutputStream out, - boolean flush) { + public PacketWriter createPacketWriter(OutputStream out, boolean flush) { return new PacketWriterImpl(serial, writerFactory, out, flush); } } diff --git a/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java b/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java index 671cc3d7e9..bb11ddd459 100644 --- a/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java +++ b/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java @@ -47,19 +47,21 @@ class PacketWriterImpl implements PacketWriter { w = writerFactory.createWriter(out); } + public int getMaxMessagesForAck(long capacity) { + return getMaxMessagesForPacket(capacity, ACK); + } + public int getMaxMessagesForRequest(long capacity) { - int packet = (int) Math.min(capacity, MAX_PACKET_LENGTH); - int overhead = serial.getSerialisedStructStartLength(ACK) - + serial.getSerialisedListStartLength() - + serial.getSerialisedListEndLength() - + serial.getSerialisedStructEndLength(); - int idLength = serial.getSerialisedUniqueIdLength(); - return (packet - overhead) / idLength; + return getMaxMessagesForPacket(capacity, REQUEST); } public int getMaxMessagesForOffer(long capacity) { + return getMaxMessagesForPacket(capacity, OFFER); + } + + private int getMaxMessagesForPacket(long capacity, int structId) { int packet = (int) Math.min(capacity, MAX_PACKET_LENGTH); - int overhead = serial.getSerialisedStructStartLength(OFFER) + int overhead = serial.getSerialisedStructStartLength(structId) + serial.getSerialisedListStartLength() + serial.getSerialisedListEndLength() + serial.getSerialisedStructEndLength(); diff --git a/briar-core/src/org/briarproject/messaging/duplex/DuplexConnection.java b/briar-core/src/org/briarproject/messaging/duplex/DuplexConnection.java index acb076e73a..b3279c3f19 100644 --- a/briar-core/src/org/briarproject/messaging/duplex/DuplexConnection.java +++ b/briar-core/src/org/briarproject/messaging/duplex/DuplexConnection.java @@ -226,8 +226,7 @@ abstract class DuplexConnection implements EventListener { db.addListener(this); try { OutputStream out = createConnectionWriter().getOutputStream(); - writer = packetWriterFactory.createPacketWriter(out, - transport.shouldFlush()); + writer = packetWriterFactory.createPacketWriter(out, true); if(LOG.isLoggable(INFO)) LOG.info("Starting to write"); // Send the initial packets dbExecutor.execute(new GenerateTransportAcks()); @@ -500,7 +499,7 @@ abstract class DuplexConnection implements EventListener { public void run() { assert writer != null; - int maxMessages = writer.getMaxMessagesForRequest(Long.MAX_VALUE); + int maxMessages = writer.getMaxMessagesForAck(Long.MAX_VALUE); try { Ack a = db.generateAck(contactId, maxMessages); if(LOG.isLoggable(INFO)) diff --git a/briar-core/src/org/briarproject/messaging/simplex/OutgoingSimplexConnection.java b/briar-core/src/org/briarproject/messaging/simplex/OutgoingSimplexConnection.java index a2c2e14e9b..1f1b205fd8 100644 --- a/briar-core/src/org/briarproject/messaging/simplex/OutgoingSimplexConnection.java +++ b/briar-core/src/org/briarproject/messaging/simplex/OutgoingSimplexConnection.java @@ -72,7 +72,7 @@ class OutgoingSimplexConnection { if(conn.getRemainingCapacity() < MAX_PACKET_LENGTH) throw new EOFException(); PacketWriter writer = packetWriterFactory.createPacketWriter(out, - transport.shouldFlush()); + false); // Send the initial packets: updates and acks boolean hasSpace = writeTransportAcks(conn, writer); if(hasSpace) hasSpace = writeTransportUpdates(conn, writer); @@ -82,12 +82,12 @@ class OutgoingSimplexConnection { if(hasSpace) hasSpace = writeRetentionUpdate(conn, writer); // Write acks until you can't write acks no more capacity = conn.getRemainingCapacity(); - int maxMessages = writer.getMaxMessagesForRequest(capacity); + int maxMessages = writer.getMaxMessagesForAck(capacity); Ack a = db.generateAck(contactId, maxMessages); while(a != null) { writer.writeAck(a); capacity = conn.getRemainingCapacity(); - maxMessages = writer.getMaxMessagesForRequest(capacity); + maxMessages = writer.getMaxMessagesForAck(capacity); a = db.generateAck(contactId, maxMessages); } // Write messages until you can't write messages no more diff --git a/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java b/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java index ca6771e20e..d56dfb7269 100644 --- a/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java +++ b/briar-core/src/org/briarproject/plugins/file/FileTransportWriter.java @@ -43,10 +43,6 @@ class FileTransportWriter implements SimplexTransportWriter { return out; } - public boolean shouldFlush() { - return false; - } - public void dispose(boolean exception) { try { out.close(); diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java b/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java index cb97a55706..6612f95fe5 100644 --- a/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java +++ b/briar-core/src/org/briarproject/plugins/tcp/TcpTransportConnection.java @@ -34,10 +34,6 @@ class TcpTransportConnection implements DuplexTransportConnection { return socket.getOutputStream(); } - public boolean shouldFlush() { - return true; - } - public void dispose(boolean exception, boolean recognised) throws IOException { socket.close(); diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java index c936a9e4ed..4e99e439c5 100644 --- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java +++ b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothTransportConnection.java @@ -35,10 +35,6 @@ class BluetoothTransportConnection implements DuplexTransportConnection { return stream.openOutputStream(); } - public boolean shouldFlush() { - return true; - } - public void dispose(boolean exception, boolean recognised) throws IOException { stream.close(); diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java index 7d812ce4c5..b3f6312dd5 100644 --- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java +++ b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java @@ -250,10 +250,6 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback { return modem.getOutputStream(); } - public boolean shouldFlush() { - return true; - } - public void dispose(boolean exception, boolean recognised) { if(LOG.isLoggable(INFO)) LOG.info("Call disconnected"); try { diff --git a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java index 52c40b056a..f72bb57abb 100644 --- a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java +++ b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java @@ -39,6 +39,7 @@ import org.briarproject.api.messaging.MessageId; import org.briarproject.api.messaging.Offer; import org.briarproject.api.messaging.PacketWriter; import org.briarproject.api.messaging.PacketWriterFactory; +import org.briarproject.api.messaging.Request; import org.briarproject.api.messaging.SubscriptionUpdate; import org.briarproject.api.messaging.TransportUpdate; import org.briarproject.crypto.CryptoModule; @@ -153,6 +154,16 @@ public class ConstantsTest extends BriarTestCase { testMessageIdsFitIntoOffer(1000); } + @Test + public void testMessageIdsFitIntoLargeRequest() throws Exception { + testMessageIdsFitIntoRequest(MAX_PACKET_LENGTH); + } + + @Test + public void testMessageIdsFitIntoSmallRequest() throws Exception { + testMessageIdsFitIntoRequest(1000); + } + @Test public void testPropertiesFitIntoTransportUpdate() throws Exception { // Create the maximum number of properties with the maximum length @@ -195,24 +206,37 @@ public class ConstantsTest extends BriarTestCase { // Create an ack with as many message IDs as possible ByteArrayOutputStream out = new ByteArrayOutputStream(length); PacketWriter writer = packetWriterFactory.createPacketWriter(out, true); - int maxMessages = writer.getMaxMessagesForRequest(length); - Collection<MessageId> acked = new ArrayList<MessageId>(); + int maxMessages = writer.getMaxMessagesForAck(length); + Collection<MessageId> ids = new ArrayList<MessageId>(); for(int i = 0; i < maxMessages; i++) - acked.add(new MessageId(TestUtils.getRandomId())); - writer.writeAck(new Ack(acked)); + ids.add(new MessageId(TestUtils.getRandomId())); + writer.writeAck(new Ack(ids)); // Check the size of the serialised ack assertTrue(out.size() <= length); } + private void testMessageIdsFitIntoRequest(int length) throws Exception { + // Create a request with as many message IDs as possible + ByteArrayOutputStream out = new ByteArrayOutputStream(length); + PacketWriter writer = packetWriterFactory.createPacketWriter(out, true); + int maxMessages = writer.getMaxMessagesForRequest(length); + Collection<MessageId> ids = new ArrayList<MessageId>(); + for(int i = 0; i < maxMessages; i++) + ids.add(new MessageId(TestUtils.getRandomId())); + writer.writeRequest(new Request(ids)); + // Check the size of the serialised request + assertTrue(out.size() <= length); + } + private void testMessageIdsFitIntoOffer(int length) throws Exception { // Create an offer with as many message IDs as possible ByteArrayOutputStream out = new ByteArrayOutputStream(length); PacketWriter writer = packetWriterFactory.createPacketWriter(out, true); int maxMessages = writer.getMaxMessagesForOffer(length); - Collection<MessageId> offered = new ArrayList<MessageId>(); + Collection<MessageId> ids = new ArrayList<MessageId>(); for(int i = 0; i < maxMessages; i++) - offered.add(new MessageId(TestUtils.getRandomId())); - writer.writeOffer(new Offer(offered)); + ids.add(new MessageId(TestUtils.getRandomId())); + writer.writeOffer(new Offer(ids)); // Check the size of the serialised offer assertTrue(out.size() <= length); } diff --git a/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java b/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java index c01501c927..55aa1bcc76 100644 --- a/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java +++ b/briar-tests/src/org/briarproject/messaging/simplex/OutgoingSimplexConnectionTest.java @@ -85,7 +85,7 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { public void testConnectionTooShort() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( - out, MAX_PACKET_LENGTH, Long.MAX_VALUE, true); + out, MAX_PACKET_LENGTH, Long.MAX_VALUE); ConnectionContext ctx = new ConnectionContext(contactId, transportId, secret, 0, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, @@ -103,7 +103,7 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { public void testNothingToSend() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( - out, MIN_CONNECTION_LENGTH, Long.MAX_VALUE, true); + out, MIN_CONNECTION_LENGTH, Long.MAX_VALUE); ConnectionContext ctx = new ConnectionContext(contactId, transportId, secret, 0, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, @@ -152,7 +152,7 @@ public class OutgoingSimplexConnectionTest extends BriarTestCase { public void testSomethingToSend() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( - out, MIN_CONNECTION_LENGTH, Long.MAX_VALUE, true); + out, MIN_CONNECTION_LENGTH, Long.MAX_VALUE); ConnectionContext ctx = new ConnectionContext(contactId, transportId, secret, 0, true); OutgoingSimplexConnection connection = new OutgoingSimplexConnection(db, diff --git a/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java b/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java index 9fa7f371b3..bc44c3a5ff 100644 --- a/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java +++ b/briar-tests/src/org/briarproject/messaging/simplex/SimplexMessagingIntegrationTest.java @@ -146,7 +146,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { PacketWriterFactory packetWriterFactory = alice.getInstance(PacketWriterFactory.class); TestSimplexTransportWriter transport = new TestSimplexTransportWriter( - out, Long.MAX_VALUE, Long.MAX_VALUE, false); + out, Long.MAX_VALUE, Long.MAX_VALUE); ConnectionContext ctx = km.getConnectionContext(contactId, transportId); assertNotNull(ctx); OutgoingSimplexConnection simplex = new OutgoingSimplexConnection(db, diff --git a/briar-tests/src/org/briarproject/messaging/simplex/TestSimplexTransportWriter.java b/briar-tests/src/org/briarproject/messaging/simplex/TestSimplexTransportWriter.java index 5ddf2daeef..39e4a76810 100644 --- a/briar-tests/src/org/briarproject/messaging/simplex/TestSimplexTransportWriter.java +++ b/briar-tests/src/org/briarproject/messaging/simplex/TestSimplexTransportWriter.java @@ -11,16 +11,14 @@ class TestSimplexTransportWriter implements SimplexTransportWriter { private final ByteArrayOutputStream out; private final long capacity, maxLatency; - private final boolean flush; private boolean disposed = false, exception = false; TestSimplexTransportWriter(ByteArrayOutputStream out, long capacity, - long maxLatency, boolean flush) { + long maxLatency) { this.out = out; this.capacity = capacity; this.maxLatency = maxLatency; - this.flush = flush; } public long getCapacity() { @@ -39,10 +37,6 @@ class TestSimplexTransportWriter implements SimplexTransportWriter { return out; } - public boolean shouldFlush() { - return flush; - } - public void dispose(boolean exception) { assert !disposed; disposed = true; -- GitLab