X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-ssh%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fssh%2FSshProxyClientHandler.java;h=49f8b85242535108e9480acd841b8d7a1c777361;hb=455dd29862158b2c1bfab4235860e8acec638065;hp=66a337433878ab6f692c9de5c8a1ba23248bff93;hpb=9022d0fa776cf481564ab792c183f2495a7cdbbe;p=netconf.git diff --git a/netconf/netconf-ssh/src/main/java/org/opendaylight/netconf/ssh/SshProxyClientHandler.java b/netconf/netconf-ssh/src/main/java/org/opendaylight/netconf/ssh/SshProxyClientHandler.java index 66a3374338..49f8b85242 100644 --- a/netconf/netconf-ssh/src/main/java/org/opendaylight/netconf/ssh/SshProxyClientHandler.java +++ b/netconf/netconf-ssh/src/main/java/org/opendaylight/netconf/ssh/SshProxyClientHandler.java @@ -8,10 +8,10 @@ package org.opendaylight.netconf.ssh; -import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import java.nio.charset.StandardCharsets; import org.apache.sshd.common.io.IoInputStream; import org.apache.sshd.common.io.IoOutputStream; import org.apache.sshd.server.ExitCallback; @@ -22,7 +22,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Netty handler that reads SSH from remote client and writes to delegate server and reads from delegate server and writes to remote client + * Netty handler that reads SSH from remote client and writes to delegate server + * and reads from delegate server and writes to remote client. */ final class SshProxyClientHandler extends ChannelInboundHandlerAdapter { @@ -37,9 +38,9 @@ final class SshProxyClientHandler extends ChannelInboundHandlerAdapter { private final NetconfHelloMessageAdditionalHeader netconfHelloMessageAdditionalHeader; private final ExitCallback callback; - public SshProxyClientHandler(final IoInputStream in, final IoOutputStream out, - final NetconfHelloMessageAdditionalHeader netconfHelloMessageAdditionalHeader, - final ExitCallback callback) { + SshProxyClientHandler(final IoInputStream in, final IoOutputStream out, + final NetconfHelloMessageAdditionalHeader netconfHelloMessageAdditionalHeader, + final ExitCallback callback) { this.in = in; this.out = out; this.netconfHelloMessageAdditionalHeader = netconfHelloMessageAdditionalHeader; @@ -51,26 +52,21 @@ final class SshProxyClientHandler extends ChannelInboundHandlerAdapter { writeAdditionalHeader(ctx); asyncSshHandlerWriter = new AsyncSshHandlerWriter(out); - asyncSshHandlerReader = new AsyncSshHandlerReader(new AutoCloseable() { - @Override - public void close() throws Exception { - // Close both sessions (delegate server and remote client) - ctx.fireChannelInactive(); - ctx.disconnect(); - ctx.close(); - asyncSshHandlerReader.close(); - asyncSshHandlerWriter.close(); - } - }, new AsyncSshHandlerReader.ReadMsgHandler() { - @Override - public void onMessageRead(final ByteBuf msg) { - if(LOG.isTraceEnabled()) { - LOG.trace("Forwarding message for client: {} on channel: {}, message: {}", - netconfHelloMessageAdditionalHeader.getAddress(), ctx.channel(), AsyncSshHandlerWriter.byteBufToString(msg)); - } - // Just forward to delegate - ctx.writeAndFlush(msg); + asyncSshHandlerReader = new AsyncSshHandlerReader(() -> { + // Close both sessions (delegate server and remote client) + ctx.fireChannelInactive(); + ctx.disconnect(); + ctx.close(); + asyncSshHandlerReader.close(); + asyncSshHandlerWriter.close(); + }, msg -> { + if (LOG.isTraceEnabled()) { + LOG.trace("Forwarding message for client: {} on channel: {}, message: {}", + netconfHelloMessageAdditionalHeader.getAddress(), ctx.channel(), + AsyncSshHandlerWriter.byteBufToString(msg)); } + // Just forward to delegate + ctx.writeAndFlush(msg); }, "ssh" + netconfHelloMessageAdditionalHeader.getAddress(), in); @@ -78,22 +74,21 @@ final class SshProxyClientHandler extends ChannelInboundHandlerAdapter { } private void writeAdditionalHeader(final ChannelHandlerContext ctx) { - ctx.writeAndFlush(Unpooled.copiedBuffer(netconfHelloMessageAdditionalHeader.toFormattedString().getBytes())); + ctx.writeAndFlush(Unpooled.copiedBuffer(netconfHelloMessageAdditionalHeader.toFormattedString() + .getBytes(StandardCharsets.UTF_8))); } @Override - public void channelRead(final ChannelHandlerContext ctx, final Object msg) throws Exception { + public void channelRead(final ChannelHandlerContext ctx, final Object msg) { asyncSshHandlerWriter.write(ctx, msg, ctx.newPromise()); } @Override public void channelInactive(final ChannelHandlerContext ctx) throws Exception { - LOG.debug("Internal connection to netconf server was dropped for client: {} on channel: ", + LOG.debug("Internal connection to netconf server was dropped for client: {} on channel: {}", netconfHelloMessageAdditionalHeader.getAddress(), ctx.channel()); - callback.onExit(1, "Internal connection to netconf server was dropped for client: " + - netconfHelloMessageAdditionalHeader.getAddress() + " on channel: " + ctx.channel()); + callback.onExit(1, "Internal connection to netconf server was dropped for client: " + + netconfHelloMessageAdditionalHeader.getAddress() + " on channel: " + ctx.channel()); super.channelInactive(ctx); } - - }