org.bgp4j.config.nodes.impl.PeerConfigurationParser.java Source code

Java tutorial

Introduction

Here is the source code for org.bgp4j.config.nodes.impl.PeerConfigurationParser.java

Source

/**
 *  Copyright 2012 Rainer Bieniek (Rainer.Bieniek@web.de)
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * 
 * File: org.bgp4.config.nodes.impl.PeerConfigurationParser.java 
 */
package org.bgp4j.config.nodes.impl;

import java.util.List;
import java.util.NoSuchElementException;

import javax.inject.Inject;
import javax.inject.Singleton;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.bgp4j.config.nodes.PeerConfiguration;

/**
 * @author Rainer Bieniek (Rainer.Bieniek@web.de)
 *
 */
@Singleton
public class PeerConfigurationParser {

    private @Inject ClientConfigurationParser clientConfigurationParser;
    private @Inject CapabilitiesParser capabilityParser;

    public PeerConfiguration parseConfiguration(HierarchicalConfiguration config) throws ConfigurationException {
        PeerConfigurationImpl peerConfig = new PeerConfigurationImpl();
        List<HierarchicalConfiguration> clientConfigs = config.configurationsAt("Client");
        List<HierarchicalConfiguration> capabilityConfigs = config.configurationsAt("Capabilities");

        try {
            peerConfig.setPeerName(config.getString("[@name]"));
        } catch (NoSuchElementException e) {
            throw new ConfigurationException("peer name not set", e);
        }

        if (clientConfigs.size() > 1) {
            throw new ConfigurationException("duplicate <Client/> element");
        } else if (clientConfigs.size() == 0) {
            throw new ConfigurationException("missing <Client/> element");
        } else
            peerConfig.setClientConfig(clientConfigurationParser.parseConfig(clientConfigs.get(0)));

        if (capabilityConfigs.size() > 1) {
            throw new ConfigurationException("duplicate <Capabilities/> element");
        } else if (capabilityConfigs.size() == 1)
            peerConfig.setCapabilities(capabilityParser.parseConfig(capabilityConfigs.get(0)));

        try {
            peerConfig.setLocalAS(config.getInt("AutonomousSystem[@local]"));
        } catch (NoSuchElementException e) {
            throw new ConfigurationException("local AS number not given", e);
        }
        try {
            peerConfig.setRemoteAS(config.getInt("AutonomousSystem[@remote]"));
        } catch (NoSuchElementException e) {
            throw new ConfigurationException("remote AS number not given", e);
        }

        try {
            long identifier = config.getLong("BgpIdentifier[@local]");

            if (!isValidBgpIdentifier(identifier))
                throw new ConfigurationException("Invalid local BGP identifier: " + identifier);

            peerConfig.setLocalBgpIdentifier(identifier);
        } catch (NoSuchElementException e) {
            throw new ConfigurationException("local BGP identifier not given", e);
        }
        try {
            long identifier = config.getLong("BgpIdentifier[@remote]");

            if (!isValidBgpIdentifier(identifier))
                throw new ConfigurationException("Invalid remote BGP identifier: " + identifier);

            peerConfig.setRemoteBgpIdentifier(identifier);
        } catch (NoSuchElementException e) {
            throw new ConfigurationException("remote BGP identifier not given", e);
        }

        peerConfig.setHoldTime(config.getInt("Timers[@holdTime]", 0));
        peerConfig.setIdleHoldTime(config.getInt("Timers[@idleHoldTime]", 0));
        peerConfig.setDelayOpenTime(config.getInt("Timers[@delayOpenTime]", 0));
        peerConfig.setConnectRetryTime(config.getInt("Timers[@connectRetryTime]", 0));
        peerConfig.setAutomaticStartInterval(config.getInt("Timers[@automaticStartInterval]", 0));

        peerConfig.setAllowAutomaticStart(config.getBoolean("Options[@allowAutomaticStart]", true));
        peerConfig.setAllowAutomaticStop(config.getBoolean("Options[@allowAutomaticStop]", false));
        peerConfig.setDampPeerOscillation(config.getBoolean("Options[@dampPeerOscillation]", false));
        peerConfig.setCollisionDetectEstablishedState(
                config.getBoolean("Options[@collisionDetectEstablishedState]", false));
        peerConfig.setDelayOpen(config.getBoolean("Options[@delayOpen]", false));
        peerConfig.setPassiveTcpEstablishment(config.getBoolean("Options[@passiveTcpEstablishment]", false));
        peerConfig.setHoldTimerDisabled(config.getBoolean("Options[@holdTimerDisabled]", false));

        return peerConfig;
    }

    private boolean isValidBgpIdentifier(long id) {
        return ((id > 0) && (id < 0x00000000ffffffffL));
    }
}