UDP support implementation
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / OFDatagramPacketEncoder.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.impl.core;\r
10 \r
11 import java.util.List;\r
12 \r
13 import org.opendaylight.openflowjava.protocol.impl.connection.UdpMessageListenerWrapper;\r
14 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;\r
15 import org.slf4j.Logger;\r
16 import org.slf4j.LoggerFactory;\r
17 \r
18 import io.netty.buffer.ByteBuf;\r
19 import io.netty.buffer.PooledByteBufAllocator;\r
20 import io.netty.channel.ChannelHandlerContext;\r
21 import io.netty.channel.socket.DatagramPacket;\r
22 import io.netty.handler.codec.MessageToMessageEncoder;\r
23 import io.netty.util.concurrent.Future;\r
24 \r
25 /**\r
26  * @author michal.polkorab\r
27  *\r
28  */\r
29 public class OFDatagramPacketEncoder extends MessageToMessageEncoder<UdpMessageListenerWrapper> {\r
30 \r
31     private static final Logger LOGGER = LoggerFactory.getLogger(OFDatagramPacketEncoder.class);\r
32     private SerializationFactory serializationFactory;\r
33 \r
34     @Override\r
35     protected void encode(ChannelHandlerContext ctx,\r
36             UdpMessageListenerWrapper wrapper, List<Object> out) throws Exception {\r
37         LOGGER.trace("Encoding");\r
38         try {\r
39             ByteBuf buffer = PooledByteBufAllocator.DEFAULT.buffer();\r
40             serializationFactory.messageToBuffer(wrapper.getMsg().getVersion(), buffer, wrapper.getMsg());\r
41             out.add(new DatagramPacket(buffer, wrapper.getAddress()));\r
42         } catch(Exception e) {\r
43             LOGGER.warn("Message serialization failed: {}", e.getMessage());\r
44             Future<Void> newFailedFuture = ctx.newFailedFuture(e);\r
45             wrapper.getListener().operationComplete(newFailedFuture);\r
46             return;\r
47         }\r
48     }\r
49 \r
50     /**\r
51      * @param serializationFactory\r
52      */\r
53     public void setSerializationFactory(SerializationFactory serializationFactory) {\r
54         this.serializationFactory = serializationFactory;\r
55     }\r
56 }