Java tutorial
/** This file is part of Waarp Project. Copyright 2009, Frederic Bregier, and individual contributors by the @author tags. See the COPYRIGHT.txt in the distribution for a full listing of individual contributors. All Waarp Project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Waarp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Waarp . If not, see <http://www.gnu.org/licenses/>. */ package org.waarp.commandexec.ssl.server; import java.net.InetAddress; import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.concurrent.DefaultEventExecutorGroup; import io.netty.util.concurrent.EventExecutorGroup; import org.waarp.commandexec.utils.LocalExecDefaultResult; import org.waarp.common.crypto.ssl.WaarpSecureKeyStore; import org.waarp.common.crypto.ssl.WaarpSslContextFactory; import org.waarp.common.logging.WaarpLoggerFactory; import org.waarp.common.logging.WaarpSlf4JLoggerFactory; import org.waarp.common.utility.DetectionUtils; import org.waarp.common.utility.WaarpNettyUtil; import org.waarp.common.utility.WaarpThreadFactory; /** * LocalExec server Main method. * */ public class LocalExecSslServer { static EventLoopGroup bossGroup = new NioEventLoopGroup(); static EventLoopGroup workerGroup = new NioEventLoopGroup(); static EventExecutorGroup executor = new DefaultEventExecutorGroup(DetectionUtils.numberThreads(), new WaarpThreadFactory("LocalExecServer")); /** * Takes 3 to 8 arguments (last 5 are optional arguments):<br> * - mandatory arguments: filename keystorepaswwd keypassword<br> * - if no more arguments are provided, it implies 127.0.0.1 + 9999 as port and no certificates<br> * - optional arguments:<br> * "port"<br> * "port" "trustfilename" "trustpassword"<br> * "port" "trustfilename" "trustpassword" "addresse"<br> * "port" "trustfilename" "trustpassword" "addresse" "default delay"<br> * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { WaarpLoggerFactory.setDefaultFactory(new WaarpSlf4JLoggerFactory(null)); int port = 9999; InetAddress addr; long delay = LocalExecDefaultResult.MAXWAITPROCESS; String keyStoreFilename, keyStorePasswd, keyPassword; String trustStoreFilename = null, trustStorePasswd = null; byte[] loop = { 127, 0, 0, 1 }; addr = InetAddress.getByAddress(loop); if (args.length >= 3) { keyStoreFilename = args[0]; keyStorePasswd = args[1]; keyPassword = args[2]; if (args.length >= 4) { port = Integer.parseInt(args[3]); if (args.length >= 6) { trustStoreFilename = args[4]; trustStorePasswd = args[5]; if (args.length >= 7) { addr = InetAddress.getByName(args[6]); if (args.length > 7) { delay = Long.parseLong(args[7]); } } } } } else { System.err.println("Need at least 3 arguments: Filename KeyStorePswd KeyPswd"); return; } // Configure the server. ServerBootstrap bootstrap = new ServerBootstrap(); WaarpNettyUtil.setServerBootstrap(bootstrap, bossGroup, workerGroup, 30000); // Load the KeyStore (No certificates) WaarpSecureKeyStore WaarpSecureKeyStore = new WaarpSecureKeyStore(keyStoreFilename, keyStorePasswd, keyPassword); if (trustStoreFilename != null) { // Include certificates WaarpSecureKeyStore.initTrustStore(trustStoreFilename, trustStorePasswd, true); } else { WaarpSecureKeyStore.initEmptyTrustStore(); } WaarpSslContextFactory waarpSslContextFactory = new WaarpSslContextFactory(WaarpSecureKeyStore, true); // Configure the pipeline factory. bootstrap.childHandler(new LocalExecSslServerInitializer(waarpSslContextFactory, delay, executor)); // Bind and start to accept incoming connections only on local address. bootstrap.bind(new InetSocketAddress(addr, port)); } }