Convert TlsAllowedDevicesMonitorImpl to OSGi DS
[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 Configuration config,
35                                      final DataBroker dataBroker,
36                                      final TlsAllowedDevicesMonitor allowedDevicesMonitor,
37                                      final CallHomeNetconfSubsystemListener subsystemListener,
38                                      final EventLoopGroup bossGroup,
39                                      final EventLoopGroup workerGroup) {
40         this.config = requireNonNull(config);
41         this.subsystemListener = requireNonNull(subsystemListener);
42         this.bossGroup = requireNonNull(bossGroup);
43         this.workerGroup = requireNonNull(workerGroup);
44         this.allowedDevicesMonitor = requireNonNull(allowedDevicesMonitor);
45         sslHandlerFactory = new SslHandlerFactoryAdapter(dataBroker, allowedDevicesMonitor);
46     }
47
48     public void init() {
49         LOG.info("Initializing Call Home TLS server instance");
50
51         final NetconfCallHomeTlsServerBuilder builder = new NetconfCallHomeTlsServerBuilder();
52         server = builder.setHost(config.getHost())
53             .setPort(config.getPort())
54             .setTimeout(config.getTimeout())
55             .setMaxConnections(config.getMaxConnections())
56             .setSslHandlerFactory(sslHandlerFactory)
57             .setSubsystemListener(subsystemListener)
58             .setBossGroup(bossGroup)
59             .setWorkerGroup(workerGroup)
60             .setAllowedDevicesMonitor(allowedDevicesMonitor)
61             .build();
62         server.start();
63
64         LOG.info("Initializing Call Home TLS server instance completed successfuly");
65     }
66
67     @Override
68     public void close() {
69         server.stop();
70     }
71 }