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ář <m...@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);
     }
-
-
 }

Reply via email to