<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-binding-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-binding-dom-adapter</artifactId>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>netconf-topology</artifactId>
<groupId>org.opendaylight.netconf</groupId>
<artifactId>callhome-model</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.guicedee.services</groupId>
+ <artifactId>javax.inject</artifactId>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.annotation</groupId>
+ <artifactId>jakarta.annotation-api</artifactId>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>mdsal-binding-dom-adapter</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
public NetconfCallHomeTlsService(final Configuration config,
final DataBroker dataBroker,
+ final TlsAllowedDevicesMonitor allowedDevicesMonitor,
final CallHomeNetconfSubsystemListener subsystemListener,
final EventLoopGroup bossGroup,
final EventLoopGroup workerGroup) {
this.subsystemListener = requireNonNull(subsystemListener);
this.bossGroup = requireNonNull(bossGroup);
this.workerGroup = requireNonNull(workerGroup);
- this.allowedDevicesMonitor = new TlsAllowedDevicesMonitorImpl(dataBroker);
- this.sslHandlerFactory = new SslHandlerFactoryAdapter(dataBroker, allowedDevicesMonitor);
+ this.allowedDevicesMonitor = requireNonNull(allowedDevicesMonitor);
+ sslHandlerFactory = new SslHandlerFactoryAdapter(dataBroker, allowedDevicesMonitor);
}
public void init() {
@Override
public void close() {
server.stop();
- allowedDevicesMonitor.close();
}
}
\ No newline at end of file
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.stream.Collectors;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netconf.callhome.server.rev201015.netconf.callhome.server.allowed.devices.device.transport.Tls;
import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class TlsAllowedDevicesMonitorImpl implements TlsAllowedDevicesMonitor, AutoCloseable {
+@Singleton
+@Component(service = TlsAllowedDevicesMonitor.class, immediate = true, property = "type=default")
+public final class TlsAllowedDevicesMonitorImpl implements TlsAllowedDevicesMonitor, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(TlsAllowedDevicesMonitorImpl.class);
private final ConcurrentMap<String, String> deviceToPrivateKey = new ConcurrentHashMap<>();
private final Registration allowedDevicesReg;
private final Registration certificatesReg;
- public TlsAllowedDevicesMonitorImpl(final DataBroker dataBroker) {
+ @Inject
+ @Activate
+ public TlsAllowedDevicesMonitorImpl(@Reference final DataBroker dataBroker) {
allowedDevicesReg = dataBroker.registerDataTreeChangeListener(
DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
InstanceIdentifier.create(NetconfCallhomeServer.class).child(AllowedDevices.class).child(Device.class)),
new CertificatesMonitor());
}
+ @PreDestroy
+ @Deactivate
+ @Override
+ public void close() {
+ allowedDevicesReg.close();
+ certificatesReg.close();
+ }
+
@Override
public Optional<String> findDeviceIdByPublicKey(final PublicKey key) {
// Find certificate names by the public key
return Set.copyOf(deviceToPrivateKey.values());
}
- @Override
- public void close() {
- allowedDevicesReg.close();
- certificatesReg.close();
- }
-
private final class CertificatesMonitor implements ClusteredDataTreeChangeListener<Keystore> {
@Override
public void onDataTreeChanged(@NonNull final Collection<DataTreeModification<Keystore>> changes) {
<reference id="globalWorkerGroup"
interface="io.netty.channel.EventLoopGroup"
odl:type="global-worker-group"/>
+ <reference id="allowedDevicesMonitor"
+ interface="org.opendaylight.netconf.callhome.protocol.tls.TlsAllowedDevicesMonitor"/>
<bean id="callhomeProvider" class="org.opendaylight.netconf.callhome.mount.IetfZeroTouchCallHomeServerProvider"
init-method="init"
destroy-method="close">
<argument ref="netconfCallHomeTlsConfiguration" />
<argument ref="dataBroker" />
+ <argument ref="allowedDevicesMonitor" />
<argument ref="callhomeDispatcher" />
<argument ref="globalBossGroup"/>
<argument ref="globalWorkerGroup"/>
import java.util.Optional;
import java.util.Set;
-public interface TlsAllowedDevicesMonitor extends AutoCloseable {
-
+public interface TlsAllowedDevicesMonitor {
/**
* Returns a Call-Home Device ID by the public key.
*/
* Returns a set of IDs for the keys associated with Call-Home devices.
*/
Set<String> findAllowedKeys();
-
- @Override
- void close();
-
}