*/
package org.opendaylight.netconf.ssh.osgi;
-import com.google.common.base.Optional;
import io.netty.channel.local.LocalAddress;
import io.netty.channel.nio.NioEventLoopGroup;
import java.io.File;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.security.SecurityUtils;
import org.apache.sshd.common.util.threads.ThreadUtils;
import org.apache.sshd.server.keyprovider.AbstractGeneratorHostKeyProvider;
import org.opendaylight.netconf.ssh.SshProxyServer;
import org.opendaylight.netconf.ssh.SshProxyServerConfigurationBuilder;
import org.opendaylight.netconf.util.osgi.NetconfConfigUtil;
-import org.opendaylight.netconf.util.osgi.NetconfConfigUtil.InfixProp;
+import org.opendaylight.netconf.util.osgi.NetconfConfiguration;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private SshProxyServer server;
@Override
- public void start(final BundleContext bundleContext) throws IOException {
- minaTimerExecutor = Executors.newScheduledThreadPool(POOL_SIZE, new ThreadFactory() {
- @Override
- public Thread newThread(final Runnable r) {
- return new Thread(r, "netconf-ssh-server-mina-timers");
- }
- });
+ public void start(final BundleContext bundleContext) throws IOException, InvalidSyntaxException {
+ minaTimerExecutor = Executors.newScheduledThreadPool(POOL_SIZE,
+ runnable -> new Thread(runnable, "netconf-ssh-server-mina-timers"));
clientGroup = new NioEventLoopGroup();
nioExecutor = ThreadUtils.newFixedThreadPool("netconf-ssh-server-nio-group", POOL_SIZE);
server = startSSHServer(bundleContext);
authProviderTracker.stop();
}
- if (nioExecutor!=null) {
+ if (nioExecutor != null) {
nioExecutor.shutdownNow();
}
}
}
- private SshProxyServer startSSHServer(final BundleContext bundleContext) throws IOException {
- final Optional<InetSocketAddress> maybeSshSocketAddress = NetconfConfigUtil.extractNetconfServerAddress(bundleContext, InfixProp.ssh);
- if (!maybeSshSocketAddress.isPresent()) {
- LOG.warn("SSH bridge not configured. Using default value {}", NetconfConfigUtil.DEFAULT_SSH_SERVER_ADRESS);
- }
- final InetSocketAddress sshSocketAddress = maybeSshSocketAddress
- .or(NetconfConfigUtil.DEFAULT_SSH_SERVER_ADRESS);
- LOG.info("Starting netconf SSH bridge at {}", sshSocketAddress);
+ private SshProxyServer startSSHServer(final BundleContext bundleContext)
+ throws IOException, InvalidSyntaxException {
+ final NetconfConfiguration netconfConfiguration =
+ NetconfConfigUtil.getNetconfConfigurationService(bundleContext);
- final LocalAddress localAddress = NetconfConfigUtil.getNetconfLocalAddress();
+ final InetSocketAddress sshSocketAddress = netconfConfiguration.getSshServerAddress();
+ LOG.info("Starting netconf SSH server at {}", sshSocketAddress);
+ final LocalAddress localAddress = NetconfConfiguration.NETCONF_LOCAL_ADDRESS;
authProviderTracker = new AuthProviderTracker(bundleContext);
- final Optional<String> maybePath = NetconfConfigUtil.getPrivateKeyPath(bundleContext);
- if (!maybePath.isPresent()) {
- LOG.warn("Private key path not configured. Using default value {}",
- NetconfConfigUtil.DEFAULT_PRIVATE_KEY_PATH);
- }
- final String path = maybePath.or(NetconfConfigUtil.DEFAULT_PRIVATE_KEY_PATH);
- LOG.trace("Starting netconf SSH bridge with path to ssh private key {}", path);
+ final String path = netconfConfiguration.getPrivateKeyPath();
+ LOG.trace("Starting netconf SSH server with path to ssh private key {}", path);
final SshProxyServer sshProxyServer = new SshProxyServer(minaTimerExecutor, clientGroup, nioExecutor);
final AbstractGeneratorHostKeyProvider keyPairProvider = SecurityUtils.createGeneratorHostKeyProvider(null);
keyPairProvider.setAlgorithm(ALGORITHM);
keyPairProvider.setKeySize(KEY_SIZE);
keyPairProvider.setFile(new File(path));
-
sshProxyServer.bind(
new SshProxyServerConfigurationBuilder()
.setBindingAddress(sshSocketAddress)
.createSshProxyServerConfiguration());
return sshProxyServer;
}
-
}