blob: 295e9679db82dd4c65148adb65e4f3ed2c507f7a [file] [log] [blame]
Umesh Krishnaswamy345ee992012-12-13 20:29:48 -08001/**
2* Copyright 2011, Big Switch Networks, Inc.
3* Originally created by David Erickson, Stanford University
4*
5* Licensed under the Apache License, Version 2.0 (the "License"); you may
6* not use this file except in compliance with the License. You may obtain
7* a copy of the License at
8*
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Unless required by applicable law or agreed to in writing, software
12* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14* License for the specific language governing permissions and limitations
15* under the License.
16**/
17
18package net.floodlightcontroller.core.internal;
19
20import java.util.List;
21
22import org.jboss.netty.buffer.ChannelBuffer;
23import org.jboss.netty.channel.Channel;
24import org.jboss.netty.channel.ChannelHandlerContext;
25import org.jboss.netty.handler.codec.frame.FrameDecoder;
26import org.openflow.protocol.OFMessage;
27import org.openflow.protocol.factory.BasicFactory;
28import org.openflow.protocol.factory.OFMessageFactory;
29
30/**
31 * Decode an openflow message from a Channel, for use in a netty
32 * pipeline
33 * @author readams
34 */
35public class OFMessageDecoder extends FrameDecoder {
36
37 OFMessageFactory factory = new BasicFactory();
38
39 @Override
40 protected Object decode(ChannelHandlerContext ctx, Channel channel,
41 ChannelBuffer buffer) throws Exception {
42 if (!channel.isConnected()) {
43 // In testing, I see decode being called AFTER decode last.
44 // This check avoids that from reading curroupted frames
45 return null;
46 }
47
48 List<OFMessage> message = factory.parseMessage(buffer);
49 return message;
50 }
51
52 @Override
53 protected Object decodeLast(ChannelHandlerContext ctx, Channel channel,
54 ChannelBuffer buffer) throws Exception {
55 // This is not strictly needed atthis time. It is used to detect
56 // connection reset detection from netty (for debug)
57 return null;
58 }
59
60}