package org.opendaylight.protocol.bgp.parser.impl;
import java.util.Arrays;
-import java.util.List;
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPError;
-import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.parser.spi.MessageUtil;
import org.opendaylight.protocol.framework.DeserializerException;
-import org.opendaylight.protocol.framework.DocumentedException;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yangtools.yang.binding.Notification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.collect.Lists;
import com.google.common.primitives.UnsignedBytes;
-abstract class AbstractMessageRegistry implements BGPMessageFactory, MessageRegistry {
+abstract class AbstractMessageRegistry implements MessageRegistry {
private final static Logger logger = LoggerFactory.getLogger(AbstractMessageRegistry.class);
protected abstract Notification parseBody(final int type, final byte[] body, final int messageLength) throws BGPDocumentedException;
logger.trace("Serialized BGP message {}.", Arrays.toString(ret));
return ret;
}
-
- /*
- * (non-Javadoc)
- * @see org.opendaylight.protocol.bgp.parser.BGPMessageParser#parse(byte[])
- */
- @Override
- public final List<Notification> parse(final byte[] bytes) throws DeserializerException, DocumentedException {
- return Lists.newArrayList(parseMessage(bytes));
- }
-
- @Override
- public final byte[] put(final Notification msg) {
- return serializeMessage(msg);
- }
}
--- /dev/null
+/*
+ * 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.protocol.bgp.parser.impl;
+
+import java.util.List;
+
+import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
+import org.opendaylight.protocol.bgp.parser.spi.ProviderContext;
+import org.opendaylight.protocol.framework.DeserializerException;
+import org.opendaylight.protocol.framework.DocumentedException;
+import org.opendaylight.yangtools.yang.binding.Notification;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+
+public final class BGPMessageFactoryImpl implements BGPMessageFactory {
+ private static final class Holder {
+ private static final BGPMessageFactoryImpl INSTANCE;
+
+ static {
+ final ProviderContext pc = SingletonProviderContext.getInstance();
+
+ new ActivatorImpl().start(pc);
+
+ INSTANCE = new BGPMessageFactoryImpl(pc.getMessageRegistry());
+ }
+ }
+
+ private final MessageRegistry registry;
+
+ private BGPMessageFactoryImpl(final MessageRegistry registry) {
+ this.registry = Preconditions.checkNotNull(registry);
+ }
+
+ public static BGPMessageFactoryImpl getInstance() {
+ return Holder.INSTANCE;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.opendaylight.protocol.bgp.parser.BGPMessageParser#parse(byte[])
+ */
+ @Override
+ public final List<Notification> parse(final byte[] bytes) throws DeserializerException, DocumentedException {
+ return Lists.newArrayList(registry.parseMessage(bytes));
+ }
+
+ @Override
+ public final byte[] put(final Notification msg) {
+ return registry.serializeMessage(msg);
+ }
+}
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.spi.MessageParser;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.parser.spi.MessageSerializer;
import org.opendaylight.protocol.concepts.HandlerRegistry;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.binding.Notification;
-public final class SimpleBGPMessageFactory extends AbstractMessageRegistry {
+public final class SimpleMessageRegistry extends AbstractMessageRegistry {
private static final class Holder {
- private static final SimpleBGPMessageFactory INSTANCE;
-
- static {
- final SimpleBGPMessageFactory f = new SimpleBGPMessageFactory();
-
- // Wrong order, but needed for circular dep.
- INSTANCE = f;
- try {
- new ActivatorImpl().start(SingletonProviderContext.getInstance());
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
+ private static final MessageRegistry INSTANCE = new SimpleMessageRegistry();
}
private final HandlerRegistry<DataContainer, MessageParser, MessageSerializer> handlers = new HandlerRegistry<>();
- private SimpleBGPMessageFactory() {
+ private SimpleMessageRegistry() {
}
- public static SimpleBGPMessageFactory getInstance() {
+ public static MessageRegistry getInstance() {
return Holder.INSTANCE;
}
@Override
public MessageRegistry getMessageRegistry() {
- return SimpleBGPMessageFactory.getInstance();
+ return SimpleMessageRegistry.getInstance();
}
@Override
import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
import org.opendaylight.protocol.bgp.parser.impl.message.BGPUpdateMessageParser;
-import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.parser.spi.MessageUtil;
import org.opendaylight.protocol.concepts.IGPMetric;
import org.opendaylight.protocol.concepts.IPv4;
private static int MAX_SIZE = 300;
- private static MessageRegistry reg;
+ private static BGPMessageFactory reg;
private static BGPUpdateMessageParser updateParser;
@BeforeClass
public static void setUp() throws Exception {
- reg = SimpleBGPMessageFactory.getInstance();
+ reg = BGPMessageFactoryImpl.getInstance();
updateParser = new BGPUpdateMessageParser(SimpleAttributeRegistry.getInstance());
for (int i = 1; i <= COUNTER; i++) {
*/
@Test
public void testOpenMessage() throws Exception {
- final BGPMessageFactory msgFactory = SimpleBGPMessageFactory.getInstance();
+ final BGPMessageFactory msgFactory = BGPMessageFactoryImpl.getInstance();
final Open open = (Open) msgFactory.parse(inputBytes.get(13)).get(0);
final Set<BgpTableType> types = Sets.newHashSet();
for (final BgpParameters param : open.getBgpParameters()) {
@Test
public void testBGPHeaderParser() throws IOException {
- final BGPMessageFactory h = SimpleBGPMessageFactory.getInstance();
+ final BGPMessageFactory h = BGPMessageFactoryImpl.getInstance();
try {
h.parse(new byte[] { (byte) 0, (byte) 0 });
fail("Exception should have occured.");
@Test
public void testMessageParser() throws IOException {
- final BGPMessageFactory parser = SimpleBGPMessageFactory.getInstance();
+ final BGPMessageFactory parser = BGPMessageFactoryImpl.getInstance();
String ex = "";
try {
parser.put(null);
@Before
public void setUp() {
// Activates everything
- SimpleBGPMessageFactory.getInstance();
+ BGPMessageFactoryImpl.getInstance();
}
@Test
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPError;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
-import org.opendaylight.protocol.bgp.parser.impl.SimpleBGPMessageFactory;
+import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
import org.opendaylight.protocol.framework.DeserializerException;
import org.opendaylight.protocol.framework.DocumentedException;
import org.opendaylight.protocol.framework.ProtocolMessageFactory;
(byte) 0x40, (byte) 0x04, (byte) 0x00, (byte) 0x47, (byte) 0x02, (byte) 0x06, (byte) 0x01, (byte) 0x04, (byte) 0x00,
(byte) 0x01, (byte) 0x00, (byte) 0x01 };
- final ProtocolMessageFactory<Notification> factory = SimpleBGPMessageFactory.getInstance();
+ final ProtocolMessageFactory<Notification> factory = BGPMessageFactoryImpl.getInstance();
@Test
public void testHeaderErrors() throws DeserializerException, DocumentedException {
import org.opendaylight.protocol.bgp.parser.BGPError;
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
-import org.opendaylight.protocol.bgp.parser.impl.SimpleBGPMessageFactory;
+import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGP;
import org.opendaylight.protocol.concepts.ListenerRegistration;
import org.opendaylight.protocol.framework.DeserializerException;
private List<Notification> parsePrevious(final List<byte[]> msgs) {
final List<Notification> messages = Lists.newArrayList();
- final ProtocolMessageFactory<Notification> parser = SimpleBGPMessageFactory.getInstance();
+ final ProtocolMessageFactory<Notification> parser = BGPMessageFactoryImpl.getInstance();
try {
for (final byte[] b : msgs) {
import java.net.InetSocketAddress;
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
-import org.opendaylight.protocol.bgp.parser.impl.SimpleBGPMessageFactory;
+import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionProposalImpl;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
BGPDispatcherImpl dispatcher;
public Main() throws IOException {
- this.dispatcher = new BGPDispatcherImpl(SimpleBGPMessageFactory.getInstance());
+ this.dispatcher = new BGPDispatcherImpl(BGPMessageFactoryImpl.getInstance());
}
public static void main(final String[] args) throws NumberFormatException, IOException {
import java.net.InetSocketAddress;
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
-import org.opendaylight.protocol.bgp.parser.impl.SimpleBGPMessageFactory;
+import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPHandlerFactory;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionNegotiatorFactory;
final SessionNegotiatorFactory<Notification, BGPSessionImpl, BGPSessionListener> snf = new BGPSessionNegotiatorFactory(new HashedWheelTimer(), prefs);
final BGPSpeakerMock<Notification, BGPSessionImpl, BGPSessionListener> mock = new BGPSpeakerMock<>(snf,
- new BGPHandlerFactory(SimpleBGPMessageFactory.getInstance()),
+ new BGPHandlerFactory(BGPMessageFactoryImpl.getInstance()),
new DefaultPromise<BGPSessionImpl>(GlobalEventExecutor.INSTANCE));
mock.createServer(new InetSocketAddress("127.0.0.2", 12345), f);