X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fcore%2FOFDecoder.java;h=de419f8b005e8d82e8507498ae9c5c525b797eee;hb=272138f7081efbd9796a2a661c92c88727935235;hp=ceec8dfa74685c74632486edf87ac70b80a21c48;hpb=417c7b4d13903633bf4d6ff61596392a1ef58ce3;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoder.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoder.java index ceec8dfa..de419f8b 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoder.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoder.java @@ -1,51 +1,79 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ -package org.opendaylight.openflowjava.protocol.impl.core; - -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageDecoder; - -import java.util.List; - -import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory; -import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Transforms OpenFlow Protocol messages to POJOs - * @author michal.polkorab - */ -public class OFDecoder extends MessageToMessageDecoder { - - private static final Logger LOGGER = LoggerFactory.getLogger(OFDecoder.class); - - /** - * Constructor of class - */ - public OFDecoder() { - LOGGER.debug("Creating OF 1.3 Decoder"); - } - - @Override - protected void decode(ChannelHandlerContext ctx, VersionMessageWrapper msg, - List out) throws Exception { - LOGGER.debug("VersionMessageWrapper received"); - LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(msg.getMessageBuffer())); - DataObject dataObject = null; - try { - dataObject = DeserializationFactory.bufferToMessage(msg.getMessageBuffer(), - msg.getVersion()); - } catch(Exception e) { - LOGGER.error("Message deserialization failed"); - LOGGER.error(e.getMessage(), e); - return; - } - if (dataObject == null) { - LOGGER.warn("Translated POJO is null"); - return; - } - msg.getMessageBuffer().release(); - out.add(dataObject); - } -} +/* + * 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.core; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; + +import java.util.List; + +import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory; +import org.opendaylight.openflowjava.statistics.CounterEventTypes; +import org.opendaylight.openflowjava.statistics.StatisticsCounters; +import org.opendaylight.openflowjava.util.ByteBufUtils; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Transforms OpenFlow Protocol messages to POJOs + * @author michal.polkorab + */ +public class OFDecoder extends MessageToMessageDecoder { + + private static final Logger LOGGER = LoggerFactory.getLogger(OFDecoder.class); + private final StatisticsCounters statisticsCounter; + + // TODO: make this final? + private DeserializationFactory deserializationFactory; + + /** + * Constructor of class + */ + public OFDecoder() { + LOGGER.trace("Creating OF 1.3 Decoder"); + // TODO: pass as argument + statisticsCounter = StatisticsCounters.getInstance(); + } + + @Override + protected void decode(ChannelHandlerContext ctx, VersionMessageWrapper msg, + List out) throws Exception { + statisticsCounter.incrementCounter(CounterEventTypes.US_RECEIVED_IN_OFJAVA); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("VersionMessageWrapper received"); + LOGGER.debug("<< {}", ByteBufUtils.byteBufToHexString(msg.getMessageBuffer())); + } + + try { + final DataObject dataObject = deserializationFactory.deserialize(msg.getMessageBuffer(), + msg.getVersion()); + if (dataObject == null) { + LOGGER.warn("Translated POJO is null"); + statisticsCounter.incrementCounter(CounterEventTypes.US_DECODE_FAIL); + } else { + out.add(dataObject); + statisticsCounter.incrementCounter(CounterEventTypes.US_DECODE_SUCCESS); + } + } catch (Exception e) { + LOGGER.warn("Message deserialization failed", e); + statisticsCounter.incrementCounter(CounterEventTypes.US_DECODE_FAIL); + } finally { + msg.getMessageBuffer().release(); + } + } + + /** + * @param deserializationFactory + */ + public void setDeserializationFactory(DeserializationFactory deserializationFactory) { + this.deserializationFactory = deserializationFactory; + } + +}