5c630dd3431a5a45c7b0a67ce1d919ff9fdb353f
[controller.git] / opendaylight / netconf / netconf-impl / src / main / java / org / opendaylight / controller / netconf / impl / util / AdditionalHeaderUtil.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.netconf.impl.util;
10
11 import java.util.regex.Matcher;
12 import java.util.regex.Pattern;
13
14 import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiator.AdditionalHeader;
15
16 import com.google.common.base.Preconditions;
17
18 public class AdditionalHeaderUtil {
19
20     private static final Pattern pattern = Pattern
21             .compile("\\[(?<username>[^;]+);(?<address>[0-9\\.]+)[:/](?<port>[0-9]+);(?<transport>[a-z]+)[^\\]]+\\]");
22     private static final Pattern customHeaderPattern = Pattern
23             .compile("\\[(?<username>[^;]+);(?<address>[0-9\\.]+)[:/](?<port>[0-9]+);(?<transport>[a-z]+);(?<sessionIdentifier>[a-z]+)[^\\]]+\\]");
24
25     public static AdditionalHeader fromString(String additionalHeader) {
26         additionalHeader = additionalHeader.trim();
27         Matcher matcher = pattern.matcher(additionalHeader);
28         Matcher matcher2 = customHeaderPattern.matcher(additionalHeader);
29         Preconditions.checkArgument(matcher.matches(), "Additional header in wrong format %s, expected %s",
30                 additionalHeader, pattern);
31         String username = matcher.group("username");
32         String address = matcher.group("address");
33         String transport = matcher.group("transport");
34         String sessionIdentifier = "client";
35         if (matcher2.matches()) {
36             sessionIdentifier = matcher2.group("sessionIdentifier");
37         }
38         return new AdditionalHeader(username, address, transport, sessionIdentifier);
39     }
40
41 }