X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fserialization%2Ffactories%2FPacketOutInputMessageFactory.java;h=f229424d8645252beee0236199759bf6a553fb39;hb=5f5622e79402f70a944fa93fd7ee2d84d1776b08;hp=02386440c233d58b9b1954575c956f01a4de16d3;hpb=09a089ee658f6fc1627b5eafdbb29249e7c7ffb9;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java index 02386440..f229424d 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java @@ -1,69 +1,58 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ -package org.opendaylight.openflowjava.protocol.impl.serialization.factories; - -import io.netty.buffer.ByteBuf; - -import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer; -import org.opendaylight.openflowjava.protocol.impl.util.ActionsSerializer; -import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput; - -/** - * Translates PacketOut messages - * @author michal.polkorab - * @author timotej.kubas - */ -public class PacketOutInputMessageFactory implements OFSerializer{ - - /** Code type of PacketOut message */ - public static final byte MESSAGE_TYPE = 13; - private static final int MESSAGE_LENGTH = 24; - private static final byte PADDING_IN_PACKET_OUT_MESSAGE = 6; - private static PacketOutInputMessageFactory instance; - - private PacketOutInputMessageFactory() { - // do nothing, just singleton - } - - /** - * @return singleton factory - */ - public static synchronized PacketOutInputMessageFactory getInstance() { - if (instance == null) { - instance = new PacketOutInputMessageFactory(); - } - return instance; - } - - @Override - public void messageToBuffer(short version, ByteBuf out, - PacketOutInput message) { - ByteBufUtils.writeOFHeader(instance, message, out); - out.writeInt(message.getBufferId().intValue()); - out.writeInt(message.getInPort().getValue().intValue()); - out.writeShort(ActionsSerializer.computeLengthOfActions(message.getActionsList())); - ByteBufUtils.padBuffer(PADDING_IN_PACKET_OUT_MESSAGE, out); - ActionsSerializer.encodeActions(message.getActionsList(), out); - byte[] data = message.getData(); - if (data != null) { - out.writeBytes(data); - } - } - - @Override - public int computeLength(PacketOutInput message) { - int length = MESSAGE_LENGTH; - length += ActionsSerializer.computeLengthOfActions(message.getActionsList()); - byte[] data = message.getData(); - if (data != null) { - length += data.length; - } - return length; - } - - @Override - public byte getMessageType() { - return MESSAGE_TYPE; - } - -} +/* + * Copyright (c) 2013 Pantheon Technologies s.r.o. 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.openflowjava.protocol.impl.serialization.factories; + +import io.netty.buffer.ByteBuf; + +import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer; +import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry; +import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer; +import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory; +import org.opendaylight.openflowjava.util.ByteBufUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput; + +/** + * Translates PacketOut messages + * @author michal.polkorab + * @author timotej.kubas + */ +public class PacketOutInputMessageFactory implements OFSerializer, SerializerRegistryInjector { + + /** Code type of PacketOut message */ + private static final byte MESSAGE_TYPE = 13; + private static final byte PADDING_IN_PACKET_OUT_MESSAGE = 6; + private SerializerRegistry registry; + + @Override + public void serialize(PacketOutInput message, ByteBuf outBuffer) { + ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); + outBuffer.writeInt(message.getBufferId().intValue()); + outBuffer.writeInt(message.getInPort().getValue().intValue()); + int actionsLengthIndex = outBuffer.writerIndex(); + outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH); + outBuffer.writeZero(PADDING_IN_PACKET_OUT_MESSAGE); + int actionsStartIndex = outBuffer.writerIndex(); + ListSerializer.serializeList(message.getAction(), TypeKeyMakerFactory + .createActionKeyMaker(EncodeConstants.OF13_VERSION_ID), registry, outBuffer); + outBuffer.setShort(actionsLengthIndex, outBuffer.writerIndex() - actionsStartIndex); + byte[] data = message.getData(); + if (data != null) { + outBuffer.writeBytes(data); + } + ByteBufUtils.updateOFHeaderLength(outBuffer); + } + + @Override + public void injectSerializerRegistry(SerializerRegistry serializerRegistry) { + this.registry = serializerRegistry; + } + +}