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=022ddb986c0c48af44ff274ebe7e4f89ab252fa0;hb=60ad94454217d7d1f6f9e65f39f72ae111ecc845;hp=a05aefe3066135d3c33ca18841dfc8494e01e653;hpb=0d9c30aa4c3e66f92eca0a867d3cf678b07770ca;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 a05aefe3..022ddb98 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,60 +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; - -/** - * @author michal.polkorab - * - */ -public class PacketOutInputMessageFactory implements OFSerializer{ - - /** Code type of PacketOut message */ - public static final byte MESSAGE_TYPE = 13; - private static final int MESSAGE_LENGTH = 30; - 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()); - ByteBufUtils.padBuffer(PADDING_IN_PACKET_OUT_MESSAGE, out); - ActionsSerializer.encodeActions(message.getActionsList(), out); - // TODO - finish implementation after Action serialization is done - //out.writeShort(message.getActions().size()); - //out.writeBytes(message.getData()); - } - - @Override - public int computeLength(PacketOutInput message) { - return MESSAGE_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.util.ByteBufUtils; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory; +import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer; +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); + ByteBufUtils.padBuffer(PADDING_IN_PACKET_OUT_MESSAGE, outBuffer); + 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; + } + +}