From bd9a88088a962ecc6cf59bda5667c544b80b47a5 Mon Sep 17 00:00:00 2001 From: Gabriel Landais <glandais@kereval.com> Date: Wed, 15 Feb 2012 10:31:30 +0000 Subject: [PATCH] Multiple frames on a connection git-svn-id: https://scm.gforge.inria.fr/authscm/ycadoret/svn/gazelle/Maven/gazelle-proxy/trunk@26338 356b4b1a-1d2b-0410-8bf1-ffa24008f01e --- .../protocols/syslog/SyslogFrameDecoder.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogFrameDecoder.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogFrameDecoder.java index 213f5225..9921110c 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogFrameDecoder.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogFrameDecoder.java @@ -12,12 +12,12 @@ import org.openhealthtools.openatna.syslog.SyslogMessageFactory; class SyslogFrameDecoder extends FrameDecoder { - private static final int STATUS_SIZE = 0; - private static final int STATUS_READ = 1; - private static final int STATUS_END = 2; + private static final int STATUS_INIT = 0; + private static final int STATUS_SIZE = 1; + private static final int STATUS_READ = 2; - private int status = STATUS_SIZE; - private StringBuffer messageSizeBuffer = new StringBuffer(); + private int status = STATUS_INIT; + private StringBuffer messageSizeBuffer = null; private int messageSize; private ByteArrayOutputStream currentFrame = null; @@ -25,12 +25,17 @@ class SyslogFrameDecoder extends FrameDecoder { protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception { while (buffer.readableBytes() > 0) { byte readByte = buffer.readByte(); + + if (status == STATUS_INIT) { + messageSizeBuffer = new StringBuffer(); + currentFrame = new ByteArrayOutputStream(); + } + switch (status) { case STATUS_SIZE: if (readByte == 32) { status = STATUS_READ; messageSize = Integer.parseInt(messageSizeBuffer.toString()); - currentFrame = new ByteArrayOutputStream(); } else { char c = (char) readByte; messageSizeBuffer.append(c); @@ -38,7 +43,7 @@ class SyslogFrameDecoder extends FrameDecoder { break; case STATUS_READ: if (currentFrame.size() == messageSize) { - status = STATUS_END; + status = STATUS_INIT; byte[] bytes = currentFrame.toByteArray(); String rawMessage = new String(bytes, "UTF-8"); SyslogMessage<?> syslogMessage = SyslogMessageFactory.getFactory().read( @@ -47,8 +52,6 @@ class SyslogFrameDecoder extends FrameDecoder { } currentFrame.write(readByte); break; - case STATUS_END: - return null; default: break; } -- GitLab