/*
* 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.test;
import org.opendaylight.usc.manager.UscConfigurationServiceImpl;
import org.opendaylight.usc.manager.api.UscSecureService;
import org.opendaylight.usc.util.UscServiceUtils;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
/**
* UDP echo server.
*/
public class EchoServerUdp implements Runnable, AutoCloseable {
static int PORT = Integer.parseInt(System.getProperty("port", "2007"));
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
Bootstrap b = new Bootstrap();
private UscSecureService secureService = null;
public EchoServerUdp(final boolean enableEncryption) {
this(enableEncryption, PORT);
}
public EchoServerUdp(final boolean enableEncryption, int port) {
PORT = port;
UscConfigurationServiceImpl.setDefaultPropertyFilePath("resources/etc/usc/usc.properties");
secureService = UscServiceUtils.getService(UscSecureService.class);
b.group(bossGroup)
.channel(NioDatagramChannel.class)
.handler(new ChannelInitializer<DatagramChannel>() {
@Override
public void initChannel(DatagramChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
System.out.println("EchoServerUdp initChannel");
if(enableEncryption) {
p.addLast(new LoggingHandler("EchoServerUdp Handler 3", LogLevel.TRACE));
p.addLast(secureService.getUdpServerHandler(ch));
}
p.addLast(new LoggingHandler("EchoServerUdp Handler 2", LogLevel.TRACE));
p.addLast(new EchoServerUdpHandler());
p.addLast(new LoggingHandler("EchoServerUdp Handler 1", LogLevel.TRACE));
}
});
}
@Override
public void run() {
try {
ChannelFuture f = b.bind(PORT).sync();
// Wait until the server socket is closed.
System.out.println("UscAgentUdp initialized");
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void close() throws Exception {
bossGroup.shutdownGracefully();
}
public static void main(String[] args) throws Exception {
if(args.length > 0) {
try {
int port = Integer.parseInt(args[0]);
PORT = port;
}catch (NumberFormatException e) {
System.err.println("Argument " + args[0] + " must be an integer (port #).");
System.exit(1);
}
}
try (EchoServerUdp server = new EchoServerUdp(false)) {
server.run();
}
}
}