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