summaryrefslogtreecommitdiff
path: root/qpid/java/common
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-05-12 18:14:49 +0000
committerRafael H. Schloming <rhs@apache.org>2008-05-12 18:14:49 +0000
commitff38c3d3aadb91ec1d3edbaf5a9661c1330a4bab (patch)
tree60e08e62a6c5d54a2800718215c55891c84bb5d5 /qpid/java/common
parent48454ce071be26b4662a137e41e7421f7b3f8d69 (diff)
downloadqpid-python-ff38c3d3aadb91ec1d3edbaf5a9661c1330a4bab.tar.gz
QPID-1025: updated fix for empty payload issue, this change removes state transitions that don't consume input bytes
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@655585 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/common')
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java45
1 files changed, 32 insertions, 13 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java
index 6d8a98cdfe..d1c03348b4 100644
--- a/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java
+++ b/qpid/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java
@@ -63,9 +63,7 @@ public class InputHandler implements Receiver<ByteBuffer>
FRAME_HDR_RSVD3,
FRAME_HDR_RSVD4,
FRAME_HDR_RSVD5,
- FRAME_PAYLOAD,
FRAME_FRAGMENT,
- FRAME_END,
ERROR;
}
@@ -113,7 +111,7 @@ public class InputHandler implements Receiver<ByteBuffer>
public void received(ByteBuffer buf)
{
- while (buf.hasRemaining() || state == FRAME_PAYLOAD)
+ while (buf.hasRemaining())
{
state = next(buf);
}
@@ -188,8 +186,11 @@ public class InputHandler implements Receiver<ByteBuffer>
case FRAME_HDR_RSVD4:
return expect(buf, 0, FRAME_HDR_RSVD5);
case FRAME_HDR_RSVD5:
- return expect(buf, 0, FRAME_PAYLOAD);
- case FRAME_PAYLOAD:
+ if (!expect(buf, 0))
+ {
+ return ERROR;
+ }
+
frame = new Frame(flags, type, track, channel);
if (size > buf.remaining()) {
frame.addFragment(buf.slice());
@@ -201,7 +202,7 @@ public class InputHandler implements Receiver<ByteBuffer>
buf.position(buf.position() + size);
frame.addFragment(payload);
frame();
- return FRAME_END;
+ return FRAME_HDR;
}
case FRAME_FRAGMENT:
int delta = size - frame.getSize();
@@ -215,10 +216,8 @@ public class InputHandler implements Receiver<ByteBuffer>
buf.position(buf.position() + delta);
frame.addFragment(fragment);
frame();
- return FRAME_END;
+ return FRAME_HDR;
}
- case FRAME_END:
- return FRAME_HDR;
default:
throw new IllegalStateException();
}
@@ -236,15 +235,35 @@ public class InputHandler implements Receiver<ByteBuffer>
private State expect(ByteBuffer buf, byte expected, State next)
{
- byte b = buf.get();
- if (b == expected) {
+ if (expect(buf, expected))
+ {
return next;
- } else {
- error("expecting '%x', got '%x'", expected, b);
+ }
+ else
+ {
return ERROR;
}
}
+ private boolean expect(ByteBuffer buf, int expected)
+ {
+ return expect(buf, (byte) expected);
+ }
+
+ private boolean expect(ByteBuffer buf, byte expected)
+ {
+ byte b = buf.get();
+ if (b == expected)
+ {
+ return true;
+ }
+ else
+ {
+ error("expecting '%x', got '%x'", expected, b);
+ return false;
+ }
+ }
+
public void exception(Throwable t)
{
receiver.exception(t);