12775c6bd113ebc54be393452daed3aa35b22145
[openflowplugin.git] / openflow_netty / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / core / internal / OFMessageEncoder.java
1 package org.opendaylight.controller.protocol_plugin.openflow.core.internal;
2
3 import java.util.List;
4
5 import org.jboss.netty.buffer.ChannelBuffer;
6 import org.jboss.netty.buffer.ChannelBuffers;
7 import org.jboss.netty.channel.Channel;
8 import org.jboss.netty.channel.ChannelHandlerContext;
9 import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
10 import org.openflow.protocol.OFMessage;
11
12 /**
13  * Encode an openflow message for output into a ChannelBuffer, for use in a
14  * netty pipeline
15  * @author readams
16  */
17 public class OFMessageEncoder extends OneToOneEncoder {
18
19     @Override
20     protected Object encode(ChannelHandlerContext ctx, Channel channel,
21                             Object msg) throws Exception {
22         if (!(  msg instanceof List))
23             return msg;
24
25         @SuppressWarnings("unchecked")
26         List<OFMessage> msglist = (List<OFMessage>)msg;
27         int size = 0;
28         for (OFMessage ofm :  msglist) {
29                 size += ofm.getLengthU();
30         }
31
32         ChannelBuffer buf = ChannelBuffers.buffer(size);;
33         for (OFMessage ofm :  msglist) {
34             ofm.writeTo(buf);
35         }
36         return buf;
37     }
38
39 }