1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.ftp.core.control.ftps;
21
22 import io.netty.channel.ChannelPipeline;
23 import io.netty.channel.socket.SocketChannel;
24 import io.netty.handler.codec.DelimiterBasedFrameDecoder;
25 import io.netty.handler.ssl.SslHandler;
26 import io.netty.util.concurrent.EventExecutorGroup;
27 import org.waarp.common.crypto.ssl.WaarpSecureKeyStore;
28 import org.waarp.common.crypto.ssl.WaarpSslContextFactory;
29 import org.waarp.ftp.core.config.FtpConfiguration;
30 import org.waarp.ftp.core.control.BusinessHandler;
31 import org.waarp.ftp.core.control.FtpInitializer;
32 import org.waarp.ftp.core.session.FtpSession;
33
34
35
36
37 public class FtpsInitializer extends FtpInitializer {
38
39 public static WaarpSslContextFactory waarpSslContextFactory;
40 public static WaarpSecureKeyStore waarpSecureKeyStore;
41
42
43
44
45
46
47
48 public FtpsInitializer(final Class<? extends BusinessHandler> businessHandler,
49 final FtpConfiguration configuration) {
50 super(businessHandler, configuration);
51 }
52
53
54
55
56 @Override
57 public void initChannel(final SocketChannel ch) throws Exception {
58 final ChannelPipeline pipeline = ch.pipeline();
59
60 final SslHandler handler = waarpSslContextFactory.createHandlerServer(
61 waarpSslContextFactory.needClientAuthentication(), ch);
62 pipeline.addLast("SSL", handler);
63
64 pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, delimiter));
65 pipeline.addLast("decoder", ftpControlStringDecoder);
66 pipeline.addLast("encoder", ftpControlStringEncoder);
67
68
69 final EventExecutorGroup executorGroup =
70 configuration.getFtpInternalConfiguration().getExecutor();
71
72 final BusinessHandler newbusiness =
73 businessHandler.getDeclaredConstructor().newInstance();
74 final SslNetworkHandler newNetworkHandler =
75 new SslNetworkHandler(new FtpSession(configuration, newbusiness));
76 pipeline.addLast(executorGroup, "handler", newNetworkHandler);
77 }
78 }