summaryrefslogtreecommitdiff
path: root/qpid/java/common
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-06-04 17:44:57 +0000
committerRafael H. Schloming <rhs@apache.org>2008-06-04 17:44:57 +0000
commitd9e6b243ba15f3cdf329e35fedd5a018f37bd2c1 (patch)
tree476dc5e8133870b4738a30bbd9e2041ab6e65a19 /qpid/java/common
parent370dda87171c83f31f540d5c627e20839fb2e448 (diff)
downloadqpid-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')
-rw-r--r--qpid/java/common/Composite.tpl2
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBDecoder.java29
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/BBEncoder.java30
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/codec/Decoder.java2
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Assembler.java12
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/network/Frame.java3
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/network/OutputHandler.java31
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);
}
}