X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fimpl%2FNetconfServerSession.java;h=a9cb3eb4f773321d2180581ae2ceeb1280b7fab1;hb=a33c5a6dce59e7fde138a873500861b06116b3bc;hp=16e9285d704e04b3d6a481fc70615a2d2029ba27;hpb=63abf8472cfb70f4e2729585dc9ff95b41d068f8;p=netconf.git diff --git a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSession.java b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSession.java index 16e9285d70..a9cb3eb4f7 100644 --- a/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSession.java +++ b/netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSession.java @@ -5,20 +5,22 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.impl; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Verify.verify; + +import com.google.common.net.InetAddresses; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; -import io.netty.channel.ChannelFutureListener; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.MessageToByteEncoder; +import java.net.Inet4Address; +import java.net.InetAddress; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.regex.Matcher; import java.util.regex.Pattern; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader; @@ -26,43 +28,61 @@ import org.opendaylight.netconf.api.monitoring.NetconfManagementSession; import org.opendaylight.netconf.nettyutil.AbstractNetconfSession; import org.opendaylight.netconf.nettyutil.handler.NetconfMessageToXMLEncoder; import org.opendaylight.netconf.nettyutil.handler.NetconfXMLToMessageDecoder; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.DomainName; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Host; +import org.opendaylight.netconf.notifications.NetconfNotification; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.NetconfTcp; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.Session1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.Session1Builder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfSsh; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Transport; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.SessionBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.SessionKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.DateAndTime; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.ZeroBasedCounter32; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.ZeroBasedCounter32; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class NetconfServerSession extends AbstractNetconfSession implements NetconfManagementSession { +public final class NetconfServerSession extends AbstractNetconfSession implements NetconfManagementSession { private static final Logger LOG = LoggerFactory.getLogger(NetconfServerSession.class); - private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_OFFSET_DATE_TIME; + + private static final String DATE_TIME_PATTERN_STRING; + + static { + verify(DateAndTime.PATTERN_CONSTANTS.size() == 1); + DATE_TIME_PATTERN_STRING = DateAndTime.PATTERN_CONSTANTS.get(0); + } + + private static final Pattern DATE_TIME_PATTERN = Pattern.compile(DATE_TIME_PATTERN_STRING); private final NetconfHelloMessageAdditionalHeader header; + private final NetconfServerSessionListener sessionListener; private ZonedDateTime loginTime; - private long inRpcSuccess, inRpcFail, outRpcError; + private long inRpcSuccess; + private long inRpcFail; + private long outRpcError; + private long outNotification; private volatile boolean delayedClose; - public NetconfServerSession(final NetconfServerSessionListener sessionListener, final Channel channel, final long sessionId, - final NetconfHelloMessageAdditionalHeader header) { + public NetconfServerSession(final NetconfServerSessionListener sessionListener, final Channel channel, + final long sessionId, final NetconfHelloMessageAdditionalHeader header) { super(sessionListener, channel, sessionId); this.header = header; - LOG.debug("Session {} created", toString()); + this.sessionListener = sessionListener; + LOG.debug("Session {} created", this); } @Override protected void sessionUp() { - Preconditions.checkState(loginTime == null, "Session is already up"); - this.loginTime = Instant.now().atZone(ZoneId.systemDefault()); + checkState(loginTime == null, "Session is already up"); + loginTime = Instant.now().atZone(ZoneId.systemDefault()); super.sessionUp(); } @@ -71,20 +91,19 @@ public final class NetconfServerSession extends AbstractNetconfSession close()); } return channelFuture; } @@ -101,50 +120,41 @@ public final class NetconfServerSession extends AbstractNetconfSession getTransportForString(final String transport) { - switch(transport) { - case "ssh" : - return NetconfSsh.class; - case "tcp" : - return NetconfTcp.class; - default: - throw new IllegalArgumentException("Unknown transport type " + transport); - } + private static Transport getTransportForString(final String transport) { + return switch (transport) { + case "ssh" -> NetconfSsh.VALUE; + case "tcp" -> NetconfTcp.VALUE; + default -> throw new IllegalArgumentException("Unknown transport type " + transport); + }; } @Override @@ -153,7 +163,8 @@ public final class NetconfServerSession extends AbstractNetconfSession encoder) { + protected void addExiHandlers(final ByteToMessageDecoder decoder, + final MessageToByteEncoder encoder) { replaceMessageDecoder(decoder); replaceMessageEncoderAfterNextMessage(encoder); }