From 77d61e0aea06634aa013a2e2bc7a5a75bc19b249 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Wed, 21 Sep 2011 13:30:04 +0100 Subject: [PATCH] Don't create empty packets. --- .../briar/protocol/writers/AckWriterImpl.java | 17 +++++++++-------- .../briar/protocol/writers/BatchWriterImpl.java | 13 +++++++------ .../briar/protocol/writers/OfferWriterImpl.java | 15 +++++++++------ 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/components/net/sf/briar/protocol/writers/AckWriterImpl.java b/components/net/sf/briar/protocol/writers/AckWriterImpl.java index a3babc533e..2da1a1cece 100644 --- a/components/net/sf/briar/protocol/writers/AckWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/AckWriterImpl.java @@ -14,7 +14,7 @@ import net.sf.briar.api.serial.WriterFactory; class AckWriterImpl implements AckWriter { private final OutputStream out; - private final SerialComponent serial; + private final int headerLength, idLength, footerLength; private final Writer w; private boolean started = false; @@ -23,17 +23,19 @@ class AckWriterImpl implements AckWriter { AckWriterImpl(OutputStream out, SerialComponent serial, WriterFactory writerFactory) { this.out = out; - this.serial = serial; + headerLength = serial.getSerialisedUserDefinedIdLength(Types.ACK) + + serial.getSerialisedListStartLength(); + idLength = serial.getSerialisedUniqueIdLength(Types.BATCH_ID); + footerLength = serial.getSerialisedListEndLength(); w = writerFactory.createWriter(out); } public boolean writeBatchId(BatchId b) throws IOException { + int overhead = started ? footerLength : headerLength + footerLength; + if(capacity < idLength + overhead) return false; if(!started) start(); - int length = serial.getSerialisedUniqueIdLength(Types.BATCH_ID); - if(capacity < length + serial.getSerialisedListEndLength()) - return false; b.writeTo(w); - capacity -= length; + capacity -= idLength; return true; } @@ -47,9 +49,8 @@ class AckWriterImpl implements AckWriter { private void start() throws IOException { w.writeUserDefinedTag(Types.ACK); - capacity -= serial.getSerialisedUserDefinedIdLength(Types.ACK); w.writeListStart(); - capacity -= serial.getSerialisedListStartLength(); + capacity -= headerLength; started = true; } } diff --git a/components/net/sf/briar/protocol/writers/BatchWriterImpl.java b/components/net/sf/briar/protocol/writers/BatchWriterImpl.java index 99e668bc51..96c982e6a8 100644 --- a/components/net/sf/briar/protocol/writers/BatchWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/BatchWriterImpl.java @@ -16,7 +16,7 @@ import net.sf.briar.api.serial.WriterFactory; class BatchWriterImpl implements BatchWriter { private final DigestOutputStream out; - private final SerialComponent serial; + private final int headerLength, footerLength; private final Writer w; private final MessageDigest messageDigest; @@ -26,15 +26,17 @@ class BatchWriterImpl implements BatchWriter { BatchWriterImpl(OutputStream out, SerialComponent serial, WriterFactory writerFactory, MessageDigest messageDigest) { this.out = new DigestOutputStream(out, messageDigest); - this.serial = serial; + headerLength = serial.getSerialisedUserDefinedIdLength(Types.BATCH) + + serial.getSerialisedListStartLength(); + footerLength = serial.getSerialisedListEndLength(); w = writerFactory.createWriter(this.out); this.messageDigest = messageDigest; } public boolean writeMessage(byte[] message) throws IOException { + int overhead = started ? footerLength : headerLength + footerLength; + if(capacity < message.length + overhead) return false; if(!started) start(); - if(capacity < message.length + serial.getSerialisedListEndLength()) - return false; // Bypass the writer and write the raw message directly out.write(message); capacity -= message.length; @@ -53,9 +55,8 @@ class BatchWriterImpl implements BatchWriter { private void start() throws IOException { messageDigest.reset(); w.writeUserDefinedTag(Types.BATCH); - capacity -= serial.getSerialisedUserDefinedIdLength(Types.BATCH); w.writeListStart(); - capacity -= serial.getSerialisedListStartLength(); + capacity -= headerLength; started = true; } } diff --git a/components/net/sf/briar/protocol/writers/OfferWriterImpl.java b/components/net/sf/briar/protocol/writers/OfferWriterImpl.java index 13baf02585..40a9221afa 100644 --- a/components/net/sf/briar/protocol/writers/OfferWriterImpl.java +++ b/components/net/sf/briar/protocol/writers/OfferWriterImpl.java @@ -14,7 +14,7 @@ import net.sf.briar.api.serial.WriterFactory; class OfferWriterImpl implements OfferWriter { private final OutputStream out; - private final SerialComponent serial; + private final int headerLength, idLength, footerLength; private final Writer w; private boolean started = false; @@ -23,17 +23,19 @@ class OfferWriterImpl implements OfferWriter { OfferWriterImpl(OutputStream out, SerialComponent serial, WriterFactory writerFactory) { this.out = out; - this.serial = serial; + headerLength = serial.getSerialisedUserDefinedIdLength(Types.OFFER) + + serial.getSerialisedListStartLength(); + idLength = serial.getSerialisedUniqueIdLength(Types.MESSAGE_ID); + footerLength = serial.getSerialisedListEndLength(); w = writerFactory.createWriter(out); } public boolean writeMessageId(MessageId m) throws IOException { + int overhead = started ? footerLength : headerLength + footerLength; + if(capacity < idLength + overhead) return false; if(!started) start(); - int length = serial.getSerialisedUniqueIdLength(Types.MESSAGE_ID); - if(capacity < length + serial.getSerialisedListEndLength()) - return false; m.writeTo(w); - capacity -= length; + capacity -= idLength; return true; } @@ -48,6 +50,7 @@ class OfferWriterImpl implements OfferWriter { private void start() throws IOException { w.writeUserDefinedTag(Types.OFFER); w.writeListStart(); + capacity -= headerLength; started = true; } } -- GitLab