/*
* Copyright (c) 2015 Huawei, Inc 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.usc.plugin;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.socket.DatagramPacket;
import io.netty.util.ReferenceCountUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Sharable
public class Demultiplexer extends SimpleChannelInboundHandler<Object> {
private static final Logger LOG = LoggerFactory.getLogger(Demultiplexer.class);
public Demultiplexer(UscPlugin plugin) {
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
LOG.trace("Demultiplexer.channelRead0: " + msg);
Channel channel = ctx.channel();
Channel serverChannel = channel.attr(UscPlugin.LOCAL_SERVER_CHANNEL).get();
ReferenceCountUtil.retain(msg);
if (msg instanceof DatagramPacket) {
ByteBuf payload = ((DatagramPacket) msg).content();
serverChannel.writeAndFlush(payload);
} else {
serverChannel.writeAndFlush(msg);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
cause.printStackTrace();
}
}