diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2007-10-03 01:52:56 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2007-10-03 01:52:56 +0000 |
| commit | 0438becec75387a866bdb67ace12d5d589596fac (patch) | |
| tree | d63d8741f9a65bca0a7c7473834f6dafd0053ff1 /java/common/src | |
| parent | 2bfadc114f971ad565851c2862bc10c43824fe54 (diff) | |
| download | qpid-python-0438becec75387a866bdb67ace12d5d589596fac.tar.gz | |
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
Diffstat (limited to 'java/common/src')
5 files changed, 23 insertions, 15 deletions
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<ConnectionEvent>, { private final Sender<NetworkEvent> sender; - private final int maxFrame; + private final int maxPayload; private final byte major; private final byte minor; public Disassembler(Sender<NetworkEvent> 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<ConnectionEvent>, 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<ConnectionEvent>, public void data(ConnectionEvent event, Data data) { - for (ByteBuffer buf : data.getFragments()) + boolean first = data.isFirst(); + for (Iterator<ByteBuffer> 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<ByteBuffer> 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<java.nio.ByteBuffer> 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) { |
