Search in sources :

Example 11 with ExecutorFilter

use of org.apache.mina.filter.executor.ExecutorFilter in project lobcder by skoulouzis.

the class MiltonListener method start.

/**
 * @see Listener#start(FtpServerContext)
 */
public synchronized void start(FtpServerContext context) {
    try {
        this.context = context;
        acceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors());
        if (getServerAddress() != null) {
            address = new InetSocketAddress(getServerAddress(), getPort());
        } else {
            address = new InetSocketAddress(getPort());
        }
        acceptor.setReuseAddress(true);
        acceptor.getSessionConfig().setReadBufferSize(2048);
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, getIdleTimeout());
        // Decrease the default receiver buffer size
        ((SocketSessionConfig) acceptor.getSessionConfig()).setReceiveBufferSize(512);
        MdcInjectionFilter mdcFilter = new MdcInjectionFilter();
        acceptor.getFilterChain().addLast("mdcFilter", mdcFilter);
        // add and update the blacklist filter
        acceptor.getFilterChain().addLast("ipFilter", new BlacklistFilter());
        updateBlacklistFilter();
        acceptor.getFilterChain().addLast("threadPool", new ExecutorFilter(filterExecutor));
        acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new FtpServerProtocolCodecFactory()));
        acceptor.getFilterChain().addLast("mdcFilter2", mdcFilter);
        acceptor.getFilterChain().addLast("logger", new FtpLoggingFilter());
        if (isImplicitSsl()) {
            SslConfiguration ssl = getSslConfiguration();
            SslFilter sslFilter;
            try {
                sslFilter = new SslFilter(ssl.getSSLContext());
            } catch (GeneralSecurityException e) {
                throw new FtpServerConfigurationException("SSL could not be initialized, check configuration");
            }
            if (ssl.getClientAuth() == ClientAuth.NEED) {
                sslFilter.setNeedClientAuth(true);
            } else if (ssl.getClientAuth() == ClientAuth.WANT) {
                sslFilter.setWantClientAuth(true);
            }
            if (ssl.getEnabledCipherSuites() != null) {
                sslFilter.setEnabledCipherSuites(ssl.getEnabledCipherSuites());
            }
            acceptor.getFilterChain().addFirst("sslFilter", sslFilter);
        }
        handler.init(context, this);
        // ////////////////////////////////////////
        // Here's the hack. Instead of instantiating a defaultftphandler
        // we use the one supplied in the constructor
        // ////////////////////////////////////////
        acceptor.setHandler(new FtpHandlerAdapter(context, handler));
        try {
            acceptor.bind(address);
        } catch (IOException e) {
            throw new FtpServerConfigurationException("Failed to bind to address " + address + ", check configuration", e);
        }
        updatePort();
    } catch (RuntimeException e) {
        // clean up if we fail to start
        stop();
        throw e;
    }
}
Also used : SslFilter(org.apache.mina.filter.ssl.SslFilter) MdcInjectionFilter(org.apache.mina.filter.logging.MdcInjectionFilter) FtpLoggingFilter(org.apache.ftpserver.listener.nio.FtpLoggingFilter) InetSocketAddress(java.net.InetSocketAddress) FtpHandlerAdapter(org.apache.ftpserver.listener.nio.FtpHandlerAdapter) GeneralSecurityException(java.security.GeneralSecurityException) ExecutorFilter(org.apache.mina.filter.executor.ExecutorFilter) IOException(java.io.IOException) ProtocolCodecFilter(org.apache.mina.filter.codec.ProtocolCodecFilter) NioSocketAcceptor(org.apache.mina.transport.socket.nio.NioSocketAcceptor) SocketSessionConfig(org.apache.mina.transport.socket.SocketSessionConfig) FtpServerProtocolCodecFactory(org.apache.ftpserver.listener.nio.FtpServerProtocolCodecFactory) BlacklistFilter(org.apache.mina.filter.firewall.BlacklistFilter) SslConfiguration(org.apache.ftpserver.ssl.SslConfiguration) FtpServerConfigurationException(org.apache.ftpserver.FtpServerConfigurationException)

Aggregations

ExecutorFilter (org.apache.mina.filter.executor.ExecutorFilter)11 InetSocketAddress (java.net.InetSocketAddress)9 SslFilter (org.apache.mina.filter.ssl.SslFilter)6 IoFilter (org.apache.mina.core.filterchain.IoFilter)5 OrderedThreadPoolExecutor (org.apache.mina.filter.executor.OrderedThreadPoolExecutor)5 UnorderedThreadPoolExecutor (org.apache.mina.filter.executor.UnorderedThreadPoolExecutor)5 LoggingFilter (org.apache.mina.filter.logging.LoggingFilter)5 ThreadPoolExecutor (java.util.concurrent.ThreadPoolExecutor)3 IOException (java.io.IOException)2 SocketAddress (java.net.SocketAddress)2 KeyManagementException (java.security.KeyManagementException)2 KeyStoreException (java.security.KeyStoreException)2 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)2 UnrecoverableKeyException (java.security.UnrecoverableKeyException)2 ExecutorService (java.util.concurrent.ExecutorService)2 IoAcceptor (org.apache.mina.common.IoAcceptor)2 IoConnector (org.apache.mina.common.IoConnector)2 IoFilter (org.apache.mina.common.IoFilter)2 DefaultIoFilterChainBuilder (org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder)2 LoggingFilter (org.apache.mina.filter.LoggingFilter)2