| /* |
| * 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. |
| * The ASF 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.apache.camel.component.netty; |
| |
| import java.nio.charset.Charset; |
| |
| import io.netty.buffer.ByteBuf; |
| import io.netty.channel.ChannelHandler; |
| import io.netty.handler.codec.LengthFieldBasedFrameDecoder; |
| import io.netty.handler.codec.bytes.ByteArrayDecoder; |
| import io.netty.handler.codec.bytes.ByteArrayEncoder; |
| import io.netty.handler.codec.serialization.ClassResolvers; |
| import io.netty.handler.codec.string.StringDecoder; |
| import io.netty.handler.codec.string.StringEncoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketByteArrayDecoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketByteArrayEncoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketDecoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketDelimiterDecoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketEncoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketObjectDecoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketObjectEncoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketStringDecoder; |
| import org.apache.camel.component.netty.codec.DatagramPacketStringEncoder; |
| import org.apache.camel.component.netty.codec.DelimiterBasedFrameDecoder; |
| import org.apache.camel.component.netty.codec.ObjectDecoder; |
| import org.apache.camel.component.netty.codec.ObjectEncoder; |
| |
| /** |
| * Helper to create commonly used {@link ChannelHandlerFactory} instances. |
| */ |
| public final class ChannelHandlerFactories { |
| |
| private ChannelHandlerFactories() { |
| } |
| |
| public static ChannelHandlerFactory newStringEncoder(Charset charset, String protocol) { |
| if ("udp".equalsIgnoreCase(protocol)) { |
| return new ShareableChannelHandlerFactory(new DatagramPacketStringEncoder(charset)); |
| } else { |
| return new ShareableChannelHandlerFactory(new StringEncoder(charset)); |
| } |
| } |
| |
| public static ChannelHandlerFactory newStringDecoder(Charset charset, String protocol) { |
| if ("udp".equalsIgnoreCase(protocol)) { |
| return new ShareableChannelHandlerFactory(new DatagramPacketStringDecoder(charset)); |
| } else { |
| return new ShareableChannelHandlerFactory(new StringDecoder(charset)); |
| } |
| } |
| |
| |
| public static ChannelHandlerFactory newObjectDecoder(String protocol) { |
| if ("udp".equalsIgnoreCase(protocol)) { |
| return new DefaultChannelHandlerFactory() { |
| @Override |
| public ChannelHandler newChannelHandler() { |
| return new DatagramPacketObjectDecoder(ClassResolvers.weakCachingResolver(null)); |
| } |
| }; |
| } else { |
| return new DefaultChannelHandlerFactory() { |
| @Override |
| public ChannelHandler newChannelHandler() { |
| return new ObjectDecoder(ClassResolvers.weakCachingResolver(null)); |
| } |
| }; |
| } |
| } |
| |
| public static ChannelHandlerFactory newObjectEncoder(String protocol) { |
| if ("udp".equals(protocol)) { |
| return new ShareableChannelHandlerFactory(new DatagramPacketObjectEncoder()); |
| } else { |
| return new ShareableChannelHandlerFactory(new ObjectEncoder()); |
| } |
| } |
| |
| public static ChannelHandlerFactory newDelimiterBasedFrameDecoder(final int maxFrameLength, final ByteBuf[] delimiters, String protocol) { |
| return newDelimiterBasedFrameDecoder(maxFrameLength, delimiters, true, protocol); |
| } |
| |
| public static ChannelHandlerFactory newDelimiterBasedFrameDecoder(final int maxFrameLength, final ByteBuf[] delimiters, final boolean stripDelimiter, String protocol) { |
| if ("udp".equals(protocol)) { |
| return new DefaultChannelHandlerFactory() { |
| @Override |
| public ChannelHandler newChannelHandler() { |
| return new DatagramPacketDelimiterDecoder(maxFrameLength, stripDelimiter, delimiters); |
| } |
| }; |
| } else { |
| return new DefaultChannelHandlerFactory() { |
| @Override |
| public ChannelHandler newChannelHandler() { |
| return new DelimiterBasedFrameDecoder(maxFrameLength, stripDelimiter, delimiters); |
| } |
| }; |
| } |
| } |
| |
| public static ChannelHandlerFactory newDatagramPacketDecoder() { |
| return new ShareableChannelHandlerFactory(new DatagramPacketDecoder()); |
| } |
| |
| public static ChannelHandlerFactory newDatagramPacketEncoder() { |
| return new ShareableChannelHandlerFactory(new DatagramPacketEncoder()); |
| } |
| |
| public static ChannelHandlerFactory newLengthFieldBasedFrameDecoder(final int maxFrameLength, final int lengthFieldOffset, |
| final int lengthFieldLength, final int lengthAdjustment, |
| final int initialBytesToStrip) { |
| return new DefaultChannelHandlerFactory() { |
| @Override |
| public ChannelHandler newChannelHandler() { |
| return new LengthFieldBasedFrameDecoder(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip); |
| } |
| }; |
| } |
| |
| public static ChannelHandlerFactory newByteArrayDecoder(String protocol) { |
| if ("udp".equals(protocol)) { |
| return new ShareableChannelHandlerFactory(new DatagramPacketByteArrayDecoder()); |
| } else { |
| return new ShareableChannelHandlerFactory(new ByteArrayDecoder()); |
| } |
| } |
| |
| public static ChannelHandlerFactory newByteArrayEncoder(String protocol) { |
| if ("udp".equals(protocol)) { |
| return new ShareableChannelHandlerFactory(new DatagramPacketByteArrayEncoder()); |
| } else { |
| return new ShareableChannelHandlerFactory(new ByteArrayEncoder()); |
| } |
| } |
| |
| } |