summaryrefslogtreecommitdiff
path: root/java/common/src
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
commit478627a91dafac09391c302acb0be26f064471c7 (patch)
tree0686634f3606e7b2be8e40d788731ec154668e50 /java/common/src
parent3a923f1e6a96e856911d3bbf49dc7af42e16c98b (diff)
downloadqpid-python-478627a91dafac09391c302acb0be26f064471c7.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/qpid@655585 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common/src')
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java45
1 files changed, 32 insertions, 13 deletions
diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java b/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java
index 6d8a98cdfe..d1c03348b4 100644
--- a/java/common/src/main/java/org/apache/qpidity/transport/network/InputHandler.java
+++ b/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);