/* | |
* Copyright 2015 Open Networking Laboratory | |
* | |
* 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. | |
*/ | |
package org.onosproject.bgpio.protocol; | |
import org.jboss.netty.buffer.ChannelBuffer; | |
import org.onosproject.bgpio.exceptions.BGPParseException; | |
import org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4; | |
import org.onosproject.bgpio.types.BGPHeader; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
/** | |
* Abstraction to provide the version for BGP. | |
*/ | |
public final class BGPFactories { | |
protected static final Logger log = LoggerFactory.getLogger(BGPFactories.class); | |
private static final GenericReader GENERIC_READER = new GenericReader(); | |
private BGPFactories() { | |
} | |
/** | |
* Returns the instance of BGP Version. | |
* | |
* @param version BGP version | |
* @return BGP version | |
*/ | |
public static BGPFactory getFactory(BGPVersion version) { | |
switch (version) { | |
case BGP_4: | |
return BGPFactoryVer4.INSTANCE; | |
default: | |
throw new IllegalArgumentException("[BGPFactory:]Unknown version: " + version); | |
} | |
} | |
/** | |
* Reader class for reading BGP messages from channel buffer. | |
* | |
*/ | |
private static class GenericReader implements BGPMessageReader<BGPMessage> { | |
@Override | |
public BGPMessage readFrom(ChannelBuffer bb, BGPHeader bgpHeader) | |
throws BGPParseException { | |
BGPFactory factory; | |
if (!bb.readable()) { | |
log.error("Empty message received"); | |
throw new BGPParseException("Empty message received"); | |
} | |
// TODO: Currently only BGP version 4 is supported | |
factory = org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4.INSTANCE; | |
return factory.getReader().readFrom(bb, bgpHeader); | |
} | |
} | |
/** | |
* Returns BGP messsage generic reader. | |
* | |
* @return bgp message generic reader | |
*/ | |
public static BGPMessageReader<BGPMessage> getGenericReader() { | |
return GENERIC_READER; | |
} | |
} |