/* * 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("\\[(?