Eliminate NetconfCallHomeTlsConfiguration
[netconf.git] / apps / callhome-provider / src / main / java / org / opendaylight / netconf / callhome / mount / tls / NetconfCallHomeTlsService.java
1 /*
2  * Copyright (c) 2020 Pantheon Technologies, s.r.o. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.callhome.mount.tls;
9
10 import static java.util.Objects.requireNonNull;
11
12 import io.netty.channel.EventLoopGroup;
13 import org.opendaylight.mdsal.binding.api.DataBroker;
14 import org.opendaylight.netconf.callhome.protocol.CallHomeNetconfSubsystemListener;
15 import org.opendaylight.netconf.callhome.protocol.tls.NetconfCallHomeTlsServer;
16 import org.opendaylight.netconf.callhome.protocol.tls.NetconfCallHomeTlsServerBuilder;
17 import org.opendaylight.netconf.callhome.protocol.tls.TlsAllowedDevicesMonitor;
18 import org.opendaylight.netconf.client.SslHandlerFactory;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 public class NetconfCallHomeTlsService implements AutoCloseable {
23     private static final Logger LOG = LoggerFactory.getLogger(NetconfCallHomeTlsService.class);
24
25     private final Configuration config;
26     private final SslHandlerFactory sslHandlerFactory;
27     private final CallHomeNetconfSubsystemListener subsystemListener;
28     private final EventLoopGroup bossGroup;
29     private final EventLoopGroup workerGroup;
30     private final TlsAllowedDevicesMonitor allowedDevicesMonitor;
31
32     private NetconfCallHomeTlsServer server;
33
34     public NetconfCallHomeTlsService(final DataBroker dataBroker, final TlsAllowedDevicesMonitor allowedDevicesMonitor,
35             final CallHomeNetconfSubsystemListener subsystemListener, final EventLoopGroup bossGroup,
36             final EventLoopGroup workerGroup) {
37         this(dataBroker, allowedDevicesMonitor, subsystemListener, bossGroup, workerGroup, defaultTlsConfiguration());
38     }
39
40     public NetconfCallHomeTlsService(final DataBroker dataBroker,
41                                      final TlsAllowedDevicesMonitor allowedDevicesMonitor,
42                                      final CallHomeNetconfSubsystemListener subsystemListener,
43                                      final EventLoopGroup bossGroup,
44                                      final EventLoopGroup workerGroup, final Configuration config) {
45         this.config = requireNonNull(config);
46         this.subsystemListener = requireNonNull(subsystemListener);
47         this.bossGroup = requireNonNull(bossGroup);
48         this.workerGroup = requireNonNull(workerGroup);
49         this.allowedDevicesMonitor = requireNonNull(allowedDevicesMonitor);
50         sslHandlerFactory = new SslHandlerFactoryAdapter(dataBroker, allowedDevicesMonitor);
51     }
52
53     public void init() {
54         LOG.info("Initializing Call Home TLS server instance");
55
56         final NetconfCallHomeTlsServerBuilder builder = new NetconfCallHomeTlsServerBuilder();
57         server = builder.setHost(config.getHost())
58             .setPort(config.getPort())
59             .setTimeout(config.getTimeout())
60             .setMaxConnections(config.getMaxConnections())
61             .setSslHandlerFactory(sslHandlerFactory)
62             .setSubsystemListener(subsystemListener)
63             .setBossGroup(bossGroup)
64             .setWorkerGroup(workerGroup)
65             .setAllowedDevicesMonitor(allowedDevicesMonitor)
66             .build();
67         server.start();
68
69         LOG.info("Initializing Call Home TLS server instance completed successfuly");
70     }
71
72     // FIXME: convert to OSGi/MD-SAL configuration
73     private static Configuration defaultTlsConfiguration() {
74         final var conf = new Configuration();
75         conf.setHost("0.0.0.0");
76         conf.setPort(4335);
77         conf.setTimeout(10_000);
78         conf.setMaxConnections(64);
79         return conf;
80     }
81
82     @Override
83     public void close() {
84         server.stop();
85     }
86 }