diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2008-06-04 17:44:57 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2008-06-04 17:44:57 +0000 |
| commit | d9e6b243ba15f3cdf329e35fedd5a018f37bd2c1 (patch) | |
| tree | 476dc5e8133870b4738a30bbd9e2041ab6e65a19 /qpid/java/common | |
| parent | 370dda87171c83f31f540d5c627e20839fb2e448 (diff) | |
| download | qpid-python-d9e6b243ba15f3cdf329e35fedd5a018f37bd2c1.tar.gz | |
QPID-1062: use BBDecoder for non fragmented segments, modified BBDecoder/Encoder to use byte buffer primitives, made various classes final (including generated classes)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@663325 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/common')
7 files changed, 86 insertions, 23 deletions
diff --git a/qpid/java/common/Composite.tpl b/qpid/java/common/Composite.tpl index 2b9ed873de..46a45b0b91 100644 --- a/qpid/java/common/Composite.tpl +++ b/qpid/java/common/Composite.tpl @@ -50,7 +50,7 @@ PACK_TYPES = { typecode = code(type) } -public class $name extends $base { +public final class $name extends $base { public static final int TYPE = $typecode; diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBDecoder.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBDecoder.java index 270ae668af..cf40cef8bf 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBDecoder.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBDecoder.java @@ -21,6 +21,7 @@ package org.apache.qpidity.transport.codec; import java.nio.ByteBuffer; +import java.nio.ByteOrder; /** @@ -29,7 +30,7 @@ import java.nio.ByteBuffer; * @author Rafael H. Schloming */ -public class BBDecoder extends AbstractDecoder +public final class BBDecoder extends AbstractDecoder { private final ByteBuffer in; @@ -37,6 +38,7 @@ public class BBDecoder extends AbstractDecoder public BBDecoder(ByteBuffer in) { this.in = in; + this.in.order(ByteOrder.BIG_ENDIAN); } protected byte doGet() @@ -49,4 +51,29 @@ public class BBDecoder extends AbstractDecoder in.get(bytes); } + public boolean hasRemaining() + { + return in.hasRemaining(); + } + + public short readUint8() + { + return (short) (0xFF & in.get()); + } + + public int readUint16() + { + return 0xFFFF & in.getShort(); + } + + public long readUint32() + { + return 0xFFFFFFFFL & in.getInt(); + } + + public long readUint64() + { + return in.getLong(); + } + } diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBEncoder.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBEncoder.java index f97baeafbd..2e7b41bf42 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBEncoder.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBEncoder.java @@ -21,6 +21,7 @@ package org.apache.qpidity.transport.codec; import java.nio.ByteBuffer; +import java.nio.ByteOrder; /** @@ -29,13 +30,14 @@ import java.nio.ByteBuffer; * @author Rafael H. Schloming */ -public class BBEncoder extends AbstractEncoder +public final class BBEncoder extends AbstractEncoder { private final ByteBuffer out; public BBEncoder(ByteBuffer out) { this.out = out; + this.out.order(ByteOrder.BIG_ENDIAN); } protected void doPut(byte b) @@ -48,4 +50,30 @@ public class BBEncoder extends AbstractEncoder out.put(src); } + public void writeUint8(short b) + { + assert b < 0x100; + + out.put((byte) b); + } + + public void writeUint16(int s) + { + assert s < 0x10000; + + out.putShort((short) s); + } + + public void writeUint32(long i) + { + assert i < 0x100000000L; + + out.putInt((int) i); + } + + public void writeUint64(long l) + { + out.putLong(l); + } + } diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/Decoder.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/Decoder.java index 62abc74668..dec901748d 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/Decoder.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/Decoder.java @@ -37,6 +37,8 @@ import org.apache.qpidity.transport.Struct; public interface Decoder { + boolean hasRemaining(); + short readUint8(); int readUint16(); long readUint32(); diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Assembler.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Assembler.java index d493245f0c..3a7a550573 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Assembler.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Assembler.java @@ -27,6 +27,8 @@ import java.util.Map; import java.nio.ByteBuffer; +import org.apache.qpidity.transport.codec.BBDecoder; +import org.apache.qpidity.transport.codec.Decoder; import org.apache.qpidity.transport.codec.FragmentDecoder; import org.apache.qpidity.transport.ConnectionEvent; @@ -161,7 +163,15 @@ public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate private ProtocolEvent decode(Frame frame, SegmentType type, List<ByteBuffer> segment) { - FragmentDecoder dec = new FragmentDecoder(segment.iterator()); + Decoder dec; + if (segment.size() == 1) + { + dec = new BBDecoder(segment.get(0)); + } + else + { + dec = new FragmentDecoder(segment.iterator()); + } switch (type) { diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java index 8bbbf08b22..2abac382e6 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java @@ -38,8 +38,7 @@ import static org.apache.qpidity.transport.util.Functions.*; * @author Rafael H. Schloming */ -// RA: changed it to public until we sort the package issues -public class Frame implements NetworkEvent, Iterable<ByteBuffer> +public final class Frame implements NetworkEvent, Iterable<ByteBuffer> { public static final int HEADER_SIZE = 12; diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/OutputHandler.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/OutputHandler.java index 64dcdb131f..fa739cf637 100644 --- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/OutputHandler.java +++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/OutputHandler.java @@ -67,29 +67,26 @@ public class OutputHandler implements Sender<NetworkEvent>, NetworkDelegate } } - public static final int FRAME_END = 0xCE; - public void frame(Frame frame) { - ByteBuffer hdr = ByteBuffer.allocate(HEADER_SIZE + frame.getSize() + 1); - hdr.put(frame.getFlags()); - hdr.put((byte) frame.getType().getValue()); - hdr.putShort((short) (frame.getSize() + HEADER_SIZE)); - hdr.put(RESERVED); - hdr.put(frame.getTrack()); - hdr.putShort((short) frame.getChannel()); - hdr.put(RESERVED); - hdr.put(RESERVED); - hdr.put(RESERVED); - hdr.put(RESERVED); - for(ByteBuffer buf : frame) + ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE + frame.getSize()); + buf.put(frame.getFlags()); + buf.put((byte) frame.getType().getValue()); + buf.putShort((short) (frame.getSize() + HEADER_SIZE)); + // RESERVED + buf.put(RESERVED); + buf.put(frame.getTrack()); + buf.putShort((short) frame.getChannel()); + // RESERVED + buf.putInt(0); + for(ByteBuffer frg : frame) { - hdr.put(buf); + buf.put(frg); } - hdr.flip(); + buf.flip(); synchronized (lock) { - sender.send(hdr); + sender.send(buf); } } |
