From 33c3eb73081825605f3ca8e15c170c9e4c76dcae Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 4 Nov 2014 17:03:06 +0000
Subject: [PATCH] PacketWriters aren't responsible for flushing their output
 streams.

---
 .../api/messaging/PacketWriter.java           |  4 ----
 .../api/messaging/PacketWriterFactory.java    |  2 +-
 .../messaging/PacketWriterFactoryImpl.java    |  4 ++--
 .../messaging/PacketWriterImpl.java           | 22 +------------------
 .../messaging/ReactiveOutgoingSession.java    |  4 ++--
 .../messaging/SinglePassOutgoingSession.java  |  2 +-
 .../briarproject/ProtocolIntegrationTest.java |  6 ++---
 .../briarproject/messaging/ConstantsTest.java | 10 ++++-----
 8 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/briar-api/src/org/briarproject/api/messaging/PacketWriter.java b/briar-api/src/org/briarproject/api/messaging/PacketWriter.java
index f76c454148..bc7b4e1de6 100644
--- a/briar-api/src/org/briarproject/api/messaging/PacketWriter.java
+++ b/briar-api/src/org/briarproject/api/messaging/PacketWriter.java
@@ -29,8 +29,4 @@ public interface PacketWriter {
 	void writeTransportAck(TransportAck a) throws IOException;
 
 	void writeTransportUpdate(TransportUpdate u) throws IOException;
-
-	void flush() throws IOException;
-
-	void close() throws IOException;
 }
diff --git a/briar-api/src/org/briarproject/api/messaging/PacketWriterFactory.java b/briar-api/src/org/briarproject/api/messaging/PacketWriterFactory.java
index 8d75afcb79..5c1c5b4ec6 100644
--- a/briar-api/src/org/briarproject/api/messaging/PacketWriterFactory.java
+++ b/briar-api/src/org/briarproject/api/messaging/PacketWriterFactory.java
@@ -4,5 +4,5 @@ import java.io.OutputStream;
 
 public interface PacketWriterFactory {
 
-	PacketWriter createPacketWriter(OutputStream out, boolean flush);
+	PacketWriter createPacketWriter(OutputStream out);
 }
diff --git a/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java b/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java
index 4c14ef1afb..46880fc0c5 100644
--- a/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java
+++ b/briar-core/src/org/briarproject/messaging/PacketWriterFactoryImpl.java
@@ -21,7 +21,7 @@ class PacketWriterFactoryImpl implements PacketWriterFactory {
 		this.writerFactory = writerFactory;
 	}
 
-	public PacketWriter createPacketWriter(OutputStream out, boolean flush) {
-		return new PacketWriterImpl(serial, writerFactory, out, flush);
+	public PacketWriter createPacketWriter(OutputStream out) {
+		return new PacketWriterImpl(serial, writerFactory, out);
 	}
 }
diff --git a/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java b/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java
index f17d45cf1d..4b0efd4a7e 100644
--- a/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java
+++ b/briar-core/src/org/briarproject/messaging/PacketWriterImpl.java
@@ -36,14 +36,12 @@ class PacketWriterImpl implements PacketWriter {
 
 	private final SerialComponent serial;
 	private final OutputStream out;
-	private final boolean flush;
 	private final Writer w;
 
 	PacketWriterImpl(SerialComponent serial, WriterFactory writerFactory,
-			OutputStream out, boolean flush) {
+			OutputStream out) {
 		this.serial = serial;
 		this.out = out;
-		this.flush = flush;
 		w = writerFactory.createWriter(out);
 	}
 
@@ -75,12 +73,10 @@ class PacketWriterImpl implements PacketWriter {
 		for(MessageId m : a.getMessageIds()) w.writeBytes(m.getBytes());
 		w.writeListEnd();
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeMessage(byte[] raw) throws IOException {
 		out.write(raw);
-		if(flush) out.flush();
 	}
 
 	public void writeOffer(Offer o) throws IOException {
@@ -89,7 +85,6 @@ class PacketWriterImpl implements PacketWriter {
 		for(MessageId m : o.getMessageIds()) w.writeBytes(m.getBytes());
 		w.writeListEnd();
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeRequest(Request r) throws IOException {
@@ -98,14 +93,12 @@ class PacketWriterImpl implements PacketWriter {
 		for(MessageId m : r.getMessageIds()) w.writeBytes(m.getBytes());
 		w.writeListEnd();
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeRetentionAck(RetentionAck a) throws IOException {
 		w.writeStructStart(RETENTION_ACK);
 		w.writeInteger(a.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeRetentionUpdate(RetentionUpdate u) throws IOException {
@@ -113,14 +106,12 @@ class PacketWriterImpl implements PacketWriter {
 		w.writeInteger(u.getRetentionTime());
 		w.writeInteger(u.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeSubscriptionAck(SubscriptionAck a) throws IOException {
 		w.writeStructStart(SUBSCRIPTION_ACK);
 		w.writeInteger(a.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeSubscriptionUpdate(SubscriptionUpdate u)
@@ -136,7 +127,6 @@ class PacketWriterImpl implements PacketWriter {
 		w.writeListEnd();
 		w.writeInteger(u.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeTransportAck(TransportAck a) throws IOException {
@@ -144,7 +134,6 @@ class PacketWriterImpl implements PacketWriter {
 		w.writeString(a.getId().getString());
 		w.writeInteger(a.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
 	}
 
 	public void writeTransportUpdate(TransportUpdate u) throws IOException {
@@ -153,14 +142,5 @@ class PacketWriterImpl implements PacketWriter {
 		w.writeMap(u.getProperties());
 		w.writeInteger(u.getVersion());
 		w.writeStructEnd();
-		if(flush) out.flush();
-	}
-
-	public void flush() throws IOException {
-		out.flush();
-	}
-
-	public void close() throws IOException {
-		out.close();
 	}
 }
diff --git a/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java b/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
index c3eae51056..3dc7d38c89 100644
--- a/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
+++ b/briar-core/src/org/briarproject/messaging/ReactiveOutgoingSession.java
@@ -100,7 +100,7 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 			StreamWriter streamWriter = streamWriterFactory.createStreamWriter(
 					out, maxFrameLength, ctx);
 			out = streamWriter.getOutputStream();
-			packetWriter = packetWriterFactory.createPacketWriter(out, true);
+			packetWriter = packetWriterFactory.createPacketWriter(out);
 			// Start a query for each type of packet, in order of urgency
 			dbExecutor.execute(new GenerateTransportAcks());
 			dbExecutor.execute(new GenerateTransportUpdates());
@@ -118,8 +118,8 @@ class ReactiveOutgoingSession implements MessagingSession, EventListener {
 					ThrowingRunnable<IOException> task = writerTasks.take();
 					if(task == CLOSE) break;
 					task.run();
+					if(writerTasks.isEmpty()) out.flush();
 				}
-				out.flush();
 				out.close();
 			} catch(InterruptedException e) {
 				LOG.info("Interrupted while waiting for a packet to write");
diff --git a/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java b/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
index c09829a920..75f991317c 100644
--- a/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
+++ b/briar-core/src/org/briarproject/messaging/SinglePassOutgoingSession.java
@@ -83,7 +83,7 @@ class SinglePassOutgoingSession implements MessagingSession {
 		streamWriter = streamWriterFactory.createStreamWriter(out,
 				maxFrameLength, ctx);
 		out = streamWriter.getOutputStream();
-		packetWriter = packetWriterFactory.createPacketWriter(out, false);
+		packetWriter = packetWriterFactory.createPacketWriter(out);
 		// Start a query for each type of packet, in order of urgency
 		dbExecutor.execute(new GenerateTransportAcks());
 		dbExecutor.execute(new GenerateTransportUpdates());
diff --git a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
index 8cbc75befd..6165c9c164 100644
--- a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
@@ -125,8 +125,8 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 		StreamWriter streamWriter = streamWriterFactory.createStreamWriter(out,
 				MAX_FRAME_LENGTH, ctx);
 		OutputStream out1 = streamWriter.getOutputStream();
-		PacketWriter packetWriter = packetWriterFactory.createPacketWriter(out1,
-				false);
+		PacketWriter packetWriter =
+				packetWriterFactory.createPacketWriter(out1);
 
 		packetWriter.writeAck(new Ack(messageIds));
 
@@ -144,7 +144,7 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 				transportProperties, 1);
 		packetWriter.writeTransportUpdate(tu);
 
-		packetWriter.flush();
+		out1.flush();
 		return out.toByteArray();
 	}
 
diff --git a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
index 1aee065e1f..785ee0e3c3 100644
--- a/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
+++ b/briar-tests/src/org/briarproject/messaging/ConstantsTest.java
@@ -179,7 +179,7 @@ public class ConstantsTest extends BriarTestCase {
 		TransportUpdate u = new TransportUpdate(id, p, Long.MAX_VALUE);
 		// Serialise the update
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		PacketWriter writer = packetWriterFactory.createPacketWriter(out, true);
+		PacketWriter writer = packetWriterFactory.createPacketWriter(out);
 		writer.writeTransportUpdate(u);
 		// Check the size of the serialised transport update
 		assertTrue(out.size() <= MAX_PACKET_LENGTH);
@@ -197,7 +197,7 @@ public class ConstantsTest extends BriarTestCase {
 		SubscriptionUpdate u = new SubscriptionUpdate(groups, Long.MAX_VALUE);
 		// Serialise the update
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		PacketWriter writer = packetWriterFactory.createPacketWriter(out, true);
+		PacketWriter writer = packetWriterFactory.createPacketWriter(out);
 		writer.writeSubscriptionUpdate(u);
 		// Check the size of the serialised subscription update
 		assertTrue(out.size() <= MAX_PACKET_LENGTH);
@@ -206,7 +206,7 @@ public class ConstantsTest extends BriarTestCase {
 	private void testMessageIdsFitIntoAck(int length) throws Exception {
 		// Create an ack with as many message IDs as possible
 		ByteArrayOutputStream out = new ByteArrayOutputStream(length);
-		PacketWriter writer = packetWriterFactory.createPacketWriter(out, true);
+		PacketWriter writer = packetWriterFactory.createPacketWriter(out);
 		int maxMessages = writer.getMaxMessagesForAck(length);
 		Collection<MessageId> ids = new ArrayList<MessageId>();
 		for(int i = 0; i < maxMessages; i++)
@@ -219,7 +219,7 @@ public class ConstantsTest extends BriarTestCase {
 	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);
+		PacketWriter writer = packetWriterFactory.createPacketWriter(out);
 		int maxMessages = writer.getMaxMessagesForRequest(length);
 		Collection<MessageId> ids = new ArrayList<MessageId>();
 		for(int i = 0; i < maxMessages; i++)
@@ -232,7 +232,7 @@ public class ConstantsTest extends BriarTestCase {
 	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);
+		PacketWriter writer = packetWriterFactory.createPacketWriter(out);
 		int maxMessages = writer.getMaxMessagesForOffer(length);
 		Collection<MessageId> ids = new ArrayList<MessageId>();
 		for(int i = 0; i < maxMessages; i++)
-- 
GitLab