![JAR search and dependency download from the Maven repository](/logo.png)
org.opendaylight.controller.netconf.util.messages.NetconfHelloMessageAdditionalHeader Maven / Gradle / Ivy
/*
* Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* 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.controller.netconf.util.messages;
import com.google.common.base.Preconditions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Additional header can be used with hello message to carry information about
* session's connection. Provided information can be reported via netconf
* monitoring.
*
* It has PATTERN "[username; host-address:port; transport; session-identifier;]"
* username - name of account on a remote
* host-address - client's IP address
* port - port number
* transport - tcp, ssh
* session-identifier - persister, client
* Session-identifier is optional, others mandatory.
*
* This header is inserted in front of a netconf hello message followed by a newline.
*/
public class NetconfHelloMessageAdditionalHeader {
private static final String SC = ";";
private final String userName;
private final String hostAddress;
private final String port;
private final String transport;
private final String sessionIdentifier;
public NetconfHelloMessageAdditionalHeader(String userName, String hostAddress, String port, String transport, String sessionIdentifier) {
this.userName = userName;
this.hostAddress = hostAddress;
this.port = port;
this.transport = transport;
this.sessionIdentifier = sessionIdentifier;
}
public String getUserName() {
return userName;
}
public String getAddress() {
return hostAddress;
}
public String getPort() {
return port;
}
public String getTransport() {
return transport;
}
public String getSessionIdentifier() {
return sessionIdentifier;
}
/**
* Format additional header into a string suitable as a prefix for netconf hello message
*/
public String toFormattedString() {
Preconditions.checkNotNull(userName);
Preconditions.checkNotNull(hostAddress);
Preconditions.checkNotNull(port);
Preconditions.checkNotNull(transport);
Preconditions.checkNotNull(sessionIdentifier);
return "[" + userName + SC + hostAddress + ":" + port + SC + transport + SC + sessionIdentifier + SC + "]"
+ System.lineSeparator();
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("NetconfHelloMessageAdditionalHeader{");
sb.append("userName='").append(userName).append('\'');
sb.append(", hostAddress='").append(hostAddress).append('\'');
sb.append(", port='").append(port).append('\'');
sb.append(", transport='").append(transport).append('\'');
sb.append(", sessionIdentifier='").append(sessionIdentifier).append('\'');
sb.append('}');
return sb.toString();
}
// TODO IPv6
private static final Pattern PATTERN = Pattern
.compile("\\[(?[^;]+);(?[0-9\\.]+)[:/](?[0-9]+);(?[a-z]+)[^\\]]+\\]");
private static final Pattern CUSTOM_HEADER_PATTERN = Pattern
.compile("\\[(?[^;]+);(?[0-9\\.]+)[:/](?[0-9]+);(?[a-z]+);(?[a-z]+)[^\\]]+\\]");
/**
* Parse additional header from a formatted string
*/
public static NetconfHelloMessageAdditionalHeader fromString(String additionalHeader) {
String additionalHeaderTrimmed = additionalHeader.trim();
Matcher matcher = PATTERN.matcher(additionalHeaderTrimmed);
Matcher matcher2 = CUSTOM_HEADER_PATTERN.matcher(additionalHeaderTrimmed);
Preconditions.checkArgument(matcher.matches(), "Additional header in wrong format %s, expected %s",
additionalHeaderTrimmed, PATTERN);
String username = matcher.group("username");
String address = matcher.group("address");
String port = matcher.group("port");
String transport = matcher.group("transport");
String sessionIdentifier = "client";
if (matcher2.matches()) {
sessionIdentifier = matcher2.group("sessionIdentifier");
}
return new NetconfHelloMessageAdditionalHeader(username, address, port, transport, sessionIdentifier);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy