X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2FNetconfServerSessionNegotiator.java;h=a48cbbe24106411451cc4726d6e3ca153f3166cb;hp=1303d1143500cfac3817723cc497adf8b44a303e;hb=c3108b4e80ec9f6ee6c8cf96df3009bb91dc8bc0;hpb=474d4daf958336effcf4f419843d9d659a27bce5 diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiator.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiator.java index 1303d11435..a48cbbe241 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiator.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiator.java @@ -8,21 +8,19 @@ package org.opendaylight.controller.netconf.impl; +import com.google.common.base.Optional; import io.netty.channel.Channel; import io.netty.util.Timer; import io.netty.util.concurrent.Promise; - import java.net.InetSocketAddress; - -import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfServerSessionPreferences; -import org.opendaylight.controller.netconf.impl.util.AdditionalHeaderUtil; -import org.opendaylight.controller.netconf.util.AbstractNetconfSessionNegotiator; +import org.opendaylight.controller.netconf.nettyutil.AbstractNetconfSessionNegotiator; +import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessage; +import org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; - public class NetconfServerSessionNegotiator extends AbstractNetconfSessionNegotiator { @@ -35,60 +33,29 @@ public class NetconfServerSessionNegotiator extends } @Override - protected NetconfServerSession getSession(NetconfServerSessionListener sessionListener, Channel channel, NetconfMessage message) { - Optional additionalHeader = message.getAdditionalHeader(); + protected void handleMessage(NetconfHelloMessage netconfMessage) throws NetconfDocumentedException { + NetconfServerSession session = getSessionForHelloMessage(netconfMessage); + replaceHelloMessageInboundHandler(session); + // Negotiation successful after all non hello messages were processed + negotiationSuccessful(session); + } + + @Override + protected NetconfServerSession getSession(NetconfServerSessionListener sessionListener, Channel channel, NetconfHelloMessage message) { + Optional additionalHeader = message.getAdditionalHeader(); - AdditionalHeader parsedHeader; + NetconfHelloMessageAdditionalHeader parsedHeader; if (additionalHeader.isPresent()) { - parsedHeader = AdditionalHeaderUtil.fromString(additionalHeader.get()); + parsedHeader = additionalHeader.get(); } else { - parsedHeader = new AdditionalHeader("unknown", ((InetSocketAddress)channel.localAddress()).getHostString(), + InetSocketAddress inetSocketAddress = (InetSocketAddress) channel.localAddress(); + parsedHeader = new NetconfHelloMessageAdditionalHeader("unknown", inetSocketAddress.getHostString(), Integer.toString(inetSocketAddress.getPort()), "tcp", "client"); } - logger.debug("Additional header from hello parsed as {} from {}", parsedHeader, additionalHeader); - - return new NetconfServerSession(sessionListener, channel, sessionPreferences.getSessionId(), parsedHeader); - } - - public static class AdditionalHeader { - - private final String username; - private final String address; - private final String transport; - private final String sessionIdentifier; - - public AdditionalHeader(String userName, String hostAddress, String transport, String sessionIdentifier) { - this.address = hostAddress; - this.username = userName; - this.transport = transport; - this.sessionIdentifier = sessionIdentifier; - } - - String getUsername() { - return username; - } - - String getAddress() { - return address; - } - - String getTransport() { - return transport; - } - String getSessionType() { - return sessionIdentifier; - } + logger.debug("Additional header from hello parsed as {} from {}", parsedHeader, additionalHeader); - @Override - public String toString() { - final StringBuffer sb = new StringBuffer("AdditionalHeader{"); - sb.append("username='").append(username).append('\''); - sb.append(", address='").append(address).append('\''); - sb.append(", transport='").append(transport).append('\''); - sb.append('}'); - return sb.toString(); - } + return new NetconfServerSession(sessionListener, channel, getSessionPreferences().getSessionId(), parsedHeader); } }