c495cbc5f3e5ecb885a2879747181479034017b5
[openflowjava.git] / simple-client / src / main / java / org / opendaylight / openflowjava / protocol / impl / clients / SimpleClientInitializer.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
2
3 package org.opendaylight.openflowjava.protocol.impl.clients;
4
5 import io.netty.channel.ChannelInitializer;
6 import io.netty.channel.ChannelPipeline;
7 import io.netty.channel.socket.SocketChannel;
8 import io.netty.handler.ssl.SslHandler;
9
10 import javax.net.ssl.SSLEngine;
11
12 import org.opendaylight.openflowjava.protocol.impl.core.SslContextFactory;
13
14 import com.google.common.util.concurrent.SettableFuture;
15
16 /** Initializes secured {@link SimpleClient} pipeline
17  * 
18  * @author michal.polkorab
19  */
20 public class SimpleClientInitializer extends ChannelInitializer<SocketChannel> {
21     
22     private SettableFuture<Boolean> isOnlineFuture;
23     private boolean secured;
24     private ScenarioHandler scenarioHandler;
25
26     /**
27      * @param isOnlineFuture future notifier of connected channel
28      */
29     public SimpleClientInitializer(SettableFuture<Boolean> isOnlineFuture, boolean secured) {
30         this.isOnlineFuture = isOnlineFuture;
31         this.secured = secured;
32     }
33
34     @Override
35     public void initChannel(SocketChannel ch) throws Exception {
36         ChannelPipeline pipeline = ch.pipeline();
37         if (secured) {
38             SSLEngine engine = SslContextFactory.getClientContext()
39                     .createSSLEngine();
40             engine.setUseClientMode(true);
41             pipeline.addLast("ssl", new SslHandler(engine));
42         }
43         SimpleClientHandler simpleClientHandler = new SimpleClientHandler(isOnlineFuture, scenarioHandler);
44         simpleClientHandler.setScenario(scenarioHandler);
45         pipeline.addLast("handler", simpleClientHandler);
46         isOnlineFuture = null;
47
48     }
49     
50     public void setScenario(ScenarioHandler scenarioHandler) {
51         this.scenarioHandler = scenarioHandler;
52     }
53 }