You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/05/16 03:06:24 UTC
[camel] branch camel-2.22.x updated: CAMEL-13527: Implement missing
optimisation for DelimiterBasedFrameDecoder
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-2.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.22.x by this push:
new e8448e3 CAMEL-13527: Implement missing optimisation for DelimiterBasedFrameDecoder
e8448e3 is described below
commit e8448e34d01e4e3695de2f5bdb2e8772acc1a776
Author: Jan Bednář <ma...@janbednar.eu>
AuthorDate: Wed May 15 23:02:52 2019 +0200
CAMEL-13527: Implement missing optimisation for DelimiterBasedFrameDecoder
---
.../netty4/codec/DelimiterBasedFrameDecoder.java | 27 +++++++++++++++++++++-
...rameDecoder.java => LineBasedFrameDecoder.java} | 17 ++++++--------
2 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java
index d6ededf..fd5064e 100644
--- a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java
+++ b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java
@@ -21,14 +21,39 @@ import io.netty.channel.ChannelHandlerContext;
public class DelimiterBasedFrameDecoder extends io.netty.handler.codec.DelimiterBasedFrameDecoder {
+ private final LineBasedFrameDecoder lineBasedFrameDecoder;
+
public DelimiterBasedFrameDecoder(int maxFrameLength, boolean stripDelimiter, ByteBuf[] delimiters) {
super(maxFrameLength, stripDelimiter, delimiters);
+ if (isLineBased(delimiters)) {
+ this.lineBasedFrameDecoder = new LineBasedFrameDecoder(maxFrameLength, stripDelimiter, true);
+ } else {
+ this.lineBasedFrameDecoder = null;
+ }
}
@Override
public Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
+ if (lineBasedFrameDecoder != null) {
+ return lineBasedFrameDecoder.decode(ctx, in);
+ }
return super.decode(ctx, in);
}
-
+ /** Returns true if the delimiters are "\n" and "\r\n".
+ * Copied from io.netty.handler.codec.DelimiterBasedFrameDecoder */
+ private static boolean isLineBased(final ByteBuf[] delimiters) {
+ if (delimiters.length != 2) {
+ return false;
+ }
+ ByteBuf a = delimiters[0];
+ ByteBuf b = delimiters[1];
+ if (a.capacity() < b.capacity()) {
+ a = delimiters[1];
+ b = delimiters[0];
+ }
+ return a.capacity() == 2 && b.capacity() == 1
+ && a.getByte(0) == '\r' && a.getByte(1) == '\n'
+ && b.getByte(0) == '\n';
+ }
}
diff --git a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/LineBasedFrameDecoder.java
similarity index 70%
copy from components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java
copy to components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/LineBasedFrameDecoder.java
index d6ededf..afbc9ef 100644
--- a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/DelimiterBasedFrameDecoder.java
+++ b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/codec/LineBasedFrameDecoder.java
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
@@ -19,16 +19,13 @@ package org.apache.camel.component.netty4.codec;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
-public class DelimiterBasedFrameDecoder extends io.netty.handler.codec.DelimiterBasedFrameDecoder {
-
- public DelimiterBasedFrameDecoder(int maxFrameLength, boolean stripDelimiter, ByteBuf[] delimiters) {
- super(maxFrameLength, stripDelimiter, delimiters);
+public class LineBasedFrameDecoder extends io.netty.handler.codec.LineBasedFrameDecoder {
+ public LineBasedFrameDecoder(int maxLength, boolean stripDelimiter, boolean failFast) {
+ super(maxLength, stripDelimiter, failFast);
}
-
+
@Override
- public Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
- return super.decode(ctx, in);
+ public Object decode(ChannelHandlerContext ctx, ByteBuf buffer) throws Exception {
+ return super.decode(ctx, buffer);
}
-
-
}