From 0438becec75387a866bdb67ace12d5d589596fac Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Wed, 3 Oct 2007 01:52:56 +0000 Subject: fixed encoding of b/e bits and handling of max frame size git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@581469 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpidity/transport/Channel.java | 5 ----- .../qpidity/transport/network/Disassembler.java | 23 ++++++++++++++++------ .../apache/qpidity/transport/network/Frame.java | 2 +- .../transport/network/mina/MinaHandler.java | 2 +- .../apache/qpidity/transport/util/Functions.java | 6 ++++-- 5 files changed, 23 insertions(+), 15 deletions(-) (limited to 'java/common/src') diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java index f05ec82d65..b6b2ddbe7f 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java @@ -145,11 +145,6 @@ public class Channel extends Invoker public void method(Method m) { emit(m); - - if (m.getEncodedTrack() != L4) - { - System.out.println("sent control " + m.getClass().getName()); - } } public void header(Header header) diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java index 770595922b..e7541490a5 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java @@ -35,6 +35,7 @@ import org.apache.qpidity.transport.Sender; import org.apache.qpidity.transport.Struct; import java.nio.ByteBuffer; +import java.util.Iterator; import static org.apache.qpidity.transport.network.Frame.*; @@ -51,17 +52,23 @@ public class Disassembler implements Sender, { private final Sender sender; - private final int maxFrame; + private final int maxPayload; private final byte major; private final byte minor; public Disassembler(Sender sender, byte major, byte minor, int maxFrame) { + if (maxFrame <= HEADER_SIZE || maxFrame >= 64*1024) + { + throw new IllegalArgumentException + ("maxFrame must be > HEADER_SIZE and < 64K: " + maxFrame); + } this.sender = sender; this.major = major; this.minor = minor; - this.maxFrame = maxFrame; + this.maxPayload = maxFrame - HEADER_SIZE; + } public void send(ConnectionEvent event) @@ -80,7 +87,7 @@ public class Disassembler implements Sender, while (buf.hasRemaining()) { ByteBuffer slice = buf.slice(); - slice.limit(min(maxFrame, slice.remaining())); + slice.limit(min(maxPayload, slice.remaining())); buf.position(buf.position() + slice.remaining()); byte newflags = flags; @@ -154,10 +161,14 @@ public class Disassembler implements Sender, public void data(ConnectionEvent event, Data data) { - for (ByteBuffer buf : data.getFragments()) + boolean first = data.isFirst(); + for (Iterator it = data.getFragments().iterator(); + it.hasNext(); ) { - fragment(LAST_SEG, BODY, event, buf, data.isFirst(), - data.isLast()); + ByteBuffer buf = it.next(); + boolean last = data.isLast() && !it.hasNext(); + fragment(LAST_SEG, BODY, event, buf, first, last); + first = false; } } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java b/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java index c36b03b104..a5c5db4dba 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java @@ -170,7 +170,7 @@ public class Frame implements NetworkEvent, Iterable str.append(" | "); } - str.append(str(buf)); + str.append(str(buf, 20)); } return str.toString(); diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaHandler.java b/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaHandler.java index ac9dab615d..162e829c6f 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaHandler.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/network/mina/MinaHandler.java @@ -92,7 +92,7 @@ public class MinaHandler implements IoHandler // XXX: hardcoded version + max-frame Connection conn = new Connection (new Disassembler(new OutputHandler(new MinaSender(ssn)), - (byte)0, (byte)10, 64*1024), + (byte)0, (byte)10, 64*1024 - 1), delegate); // XXX: hardcoded version Receiver receiver = diff --git a/java/common/src/main/java/org/apache/qpidity/transport/util/Functions.java b/java/common/src/main/java/org/apache/qpidity/transport/util/Functions.java index 69025940b5..7dbb3d30e8 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/util/Functions.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/util/Functions.java @@ -22,6 +22,8 @@ package org.apache.qpidity.transport.util; import java.nio.ByteBuffer; +import static java.lang.Math.*; + /** * Functions @@ -44,13 +46,13 @@ public class Functions public static final String str(ByteBuffer buf) { - return str(buf, buf.limit()); + return str(buf, buf.remaining()); } public static final String str(ByteBuffer buf, int limit) { StringBuilder str = new StringBuilder(); - for (int i = 0; i < buf.remaining(); i++) + for (int i = 0; i < min(buf.remaining(), limit); i++) { if (i > 0 && i % 2 == 0) { -- cgit v1.2.1