X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2FNetconfServerSessionNegotiator.java;h=91555861dc4aaaa51fdfd69dd24ae9bb834f02e7;hb=3c4c5f529dadea6a027cbb6430ae631da883d83d;hp=e14ae3e4dca088cbd7d016ac119e6003bb8525a9;hpb=a92d9d6a21a0f6ca8d2153795721f500eaf29ee9;p=controller.git 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 e14ae3e4dc..91555861dc 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,26 +8,86 @@ 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 org.opendaylight.controller.netconf.api.NetconfMessage; 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.protocol.framework.SessionListener; -import org.w3c.dom.Document; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import io.netty.channel.Channel; -import io.netty.util.Timer; -import io.netty.util.concurrent.Promise; +import java.net.InetSocketAddress; public class NetconfServerSessionNegotiator extends AbstractNetconfSessionNegotiator { + static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionNegotiator.class); + protected NetconfServerSessionNegotiator(NetconfServerSessionPreferences sessionPreferences, - Promise promise, Channel channel, Timer timer, SessionListener sessionListener) { - super(sessionPreferences, promise, channel, timer, sessionListener); + Promise promise, Channel channel, Timer timer, SessionListener sessionListener, + long connectionTimeoutMillis) { + super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis); } @Override - protected NetconfServerSession getSession(SessionListener sessionListener, Channel channel, Document doc) { - return new NetconfServerSession(sessionListener, channel, sessionPreferences.getSessionId()); + protected NetconfServerSession getSession(SessionListener sessionListener, Channel channel, NetconfMessage message) { + Optional additionalHeader = message.getAdditionalHeader(); + + AdditionalHeader parsedHeader; + if (additionalHeader.isPresent()) { + parsedHeader = AdditionalHeaderUtil.fromString(additionalHeader.get()); + } else { + parsedHeader = new AdditionalHeader("unknown", ((InetSocketAddress)channel.localAddress()).getHostString(), + "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; + } + + @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(); + } } }