From 9e4118cd4aa61fd8df55918c32af8a7dea4c94a0 Mon Sep 17 00:00:00 2001 From: Cruz Julian Bishop Date: Thu, 9 Aug 2012 08:11:17 +1000 Subject: [PATCH 1/4] Adds the IntelliJ project directory to .gitignore. I'm trying to move away from Netbeans, so I thought I should ignore this instead of accidentally adding it later on Signed-off-by: Cruz Julian Bishop --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index bb41309de3..ea02be907d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /*.ipr /*.iws /.metadata +/.idea/ \ No newline at end of file From 618ddb42e31293158156c219b8b7f74ae49532e0 Mon Sep 17 00:00:00 2001 From: Cruz Julian Bishop Date: Thu, 9 Aug 2012 09:51:43 +1000 Subject: [PATCH 2/4] Replaces two manual array copies This is a potential performance boost, but there shouldn't be too much of a difference. Signed-off-by: Cruz Julian Bishop --- .../codec/http/websocketx/WebSocketServerHandshaker.java | 5 ++--- src/main/java/org/jboss/netty/handler/ipfilter/CIDR6.java | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jboss/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java b/src/main/java/org/jboss/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java index 086d82995b..5a4d8f447a 100644 --- a/src/main/java/org/jboss/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java +++ b/src/main/java/org/jboss/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java @@ -15,6 +15,7 @@ */ package org.jboss.netty.handler.codec.http.websocketx; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; @@ -112,9 +113,7 @@ public abstract class WebSocketServerHandshaker { */ public Set getSubprotocols() { Set ret = new LinkedHashSet(); - for (String p : subprotocols) { - ret.add(p); - } + Collections.addAll(ret, subprotocols); return ret; } diff --git a/src/main/java/org/jboss/netty/handler/ipfilter/CIDR6.java b/src/main/java/org/jboss/netty/handler/ipfilter/CIDR6.java index a4d02b3d55..115b9ce352 100644 --- a/src/main/java/org/jboss/netty/handler/ipfilter/CIDR6.java +++ b/src/main/java/org/jboss/netty/handler/ipfilter/CIDR6.java @@ -155,9 +155,7 @@ public class CIDR6 extends CIDR { } else { // copy the address into a 16 byte array, zero-filled. int p = 16 - b.length; - for (int i = 0; i < b.length; i++) { - a[p + i] = b[i]; - } + System.arraycopy(b, 0, a, p + 0, b.length); } return InetAddress.getByAddress(a); } From eb8757f1cbcc9a615d2036dd4eb49af380f90b81 Mon Sep 17 00:00:00 2001 From: norman Date: Thu, 9 Aug 2012 08:02:27 +0200 Subject: [PATCH 3/4] Fix bug which leads to return HttpMessageEncoder implementations null if encoding a HttpChunk which is the last one. This vilates the OneToOneEncoder contract and so leads to a missing notification of the write future. See #493 --- .../codec/http/HttpMessageEncoder.java | 6 +-- .../codec/http/HttpMessageEncoderTest.java | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 src/test/java/org/jboss/netty/handler/codec/http/HttpMessageEncoderTest.java diff --git a/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageEncoder.java b/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageEncoder.java index 439c32a9fe..0a29aaae4f 100644 --- a/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageEncoder.java +++ b/src/main/java/org/jboss/netty/handler/codec/http/HttpMessageEncoder.java @@ -124,11 +124,7 @@ public abstract class HttpMessageEncoder extends OneToOneEncoder { wrappedBuffer(CRLF)); } } else { - if (chunk.isLast()) { - return null; - } else { - return chunk.getContent(); - } + return chunk.getContent(); } } diff --git a/src/test/java/org/jboss/netty/handler/codec/http/HttpMessageEncoderTest.java b/src/test/java/org/jboss/netty/handler/codec/http/HttpMessageEncoderTest.java new file mode 100644 index 0000000000..7c4860ee84 --- /dev/null +++ b/src/test/java/org/jboss/netty/handler/codec/http/HttpMessageEncoderTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package org.jboss.netty.handler.codec.http; + +import static org.junit.Assert.*; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.handler.codec.embedder.EncoderEmbedder; +import org.junit.Test; + +public class HttpMessageEncoderTest { + + // Test for #493 + @Test + public void testHttpChunkIsLast() { + EncoderEmbedder encoder = new EncoderEmbedder(new HttpMessageEncoder() { + + @Override + protected void encodeInitialLine(ChannelBuffer buf, HttpMessage message) throws Exception { + // do nothing + } + + }); + assertTrue(encoder.offer(HttpChunk.LAST_CHUNK)); + assertTrue(encoder.finish()); + assertNotNull(encoder.poll()); + assertNull(encoder.poll()); + } +} From 6d5a3326671774a377cb933fd6d441f5fda04169 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 9 Aug 2012 17:50:27 +0900 Subject: [PATCH 4/4] Fix a buf in CompositeChannelBuffer.setBytes() where -1 is not returned --- .../jboss/netty/buffer/CompositeChannelBuffer.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jboss/netty/buffer/CompositeChannelBuffer.java b/src/main/java/org/jboss/netty/buffer/CompositeChannelBuffer.java index a56c1cb2c8..d8010185cd 100644 --- a/src/main/java/org/jboss/netty/buffer/CompositeChannelBuffer.java +++ b/src/main/java/org/jboss/netty/buffer/CompositeChannelBuffer.java @@ -508,13 +508,18 @@ public class CompositeChannelBuffer extends AbstractChannelBuffer { int localLength = Math.min(length, s.capacity() - (index - adjustment)); int localReadBytes = s.setBytes(index - adjustment, in, localLength); - if (localReadBytes <= 0) { - if (readBytes == 0) { - readBytes = localReadBytes; - } + if (localReadBytes == 0) { break; } + if (localReadBytes < 0) { + if (readBytes == 0) { + return -1; + } else { + break; + } + } + if (localReadBytes == localLength) { index += localLength; length -= localLength;