001/*
002Copyright 2015 Hendrik Saly
003
004Licensed under the Apache License, Version 2.0 (the "License");
005you may not use this file except in compliance with the License.
006You may obtain a copy of the License at
007
008    http://www.apache.org/licenses/LICENSE-2.0
009
010Unless required by applicable law or agreed to in writing, software
011distributed under the License is distributed on an "AS IS" BASIS,
012WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013See the License for the specific language governing permissions and
014limitations under the License.
015 */
016
017package de.saly.es.example.tssl.netty;
018
019import org.elasticsearch.Version;
020import org.elasticsearch.common.logging.ESLogger;
021import org.elasticsearch.common.logging.Loggers;
022import org.elasticsearch.common.netty.channel.ChannelPipeline;
023import org.elasticsearch.common.network.NetworkService;
024import org.elasticsearch.common.settings.Settings;
025import org.elasticsearch.common.util.BigArrays;
026import org.elasticsearch.threadpool.ThreadPool;
027import org.elasticsearch.transport.netty.NettyTransport;
028
029public abstract class SecureNettyTransport extends NettyTransport {
030
031    protected SecureNettyTransport(final Settings settings, final ThreadPool threadPool, final NetworkService networkService,
032            final BigArrays bigArrays, final Version version) {
033        super(settings, threadPool, networkService, bigArrays, version);
034    }
035
036    protected static class SecureServerChannelPipelineFactory extends ServerChannelPipelineFactory {
037
038        protected final NettyTransport nettyTransport;
039        protected static final ESLogger log = Loggers.getLogger(SecureServerChannelPipelineFactory.class);
040
041        public SecureServerChannelPipelineFactory(final NettyTransport nettyTransport, final String name, final Settings settings) {
042            super(nettyTransport, name, settings);
043            this.nettyTransport = nettyTransport;
044        }
045
046        @Override
047        public ChannelPipeline getPipeline() throws Exception {
048            final ChannelPipeline pipeline = super.getPipeline();
049            pipeline.replace("dispatcher", "dispatcher", new SecureMessageChannelHandler(nettyTransport, log));
050            return pipeline;
051        }
052    }
053
054    protected static class SecureClientChannelPipelineFactory extends ClientChannelPipelineFactory {
055
056        protected final NettyTransport nettyTransport;
057        protected static final ESLogger log = Loggers.getLogger(SecureClientChannelPipelineFactory.class);
058
059        public SecureClientChannelPipelineFactory(final NettyTransport nettyTransport) {
060            super(nettyTransport);
061            this.nettyTransport = nettyTransport;
062        }
063
064        @Override
065        public ChannelPipeline getPipeline() throws Exception {
066            final ChannelPipeline pipeline = super.getPipeline();
067            pipeline.replace("dispatcher", "dispatcher", new SecureMessageChannelHandler(nettyTransport, log));
068            return pipeline;
069        }
070
071    }
072}