Search in sources :

Example 1 with FtpServerProtocolCodecFactory

use of org.apache.ftpserver.listener.nio.FtpServerProtocolCodecFactory 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

IOException (java.io.IOException)1 InetSocketAddress (java.net.InetSocketAddress)1 GeneralSecurityException (java.security.GeneralSecurityException)1 FtpServerConfigurationException (org.apache.ftpserver.FtpServerConfigurationException)1 FtpHandlerAdapter (org.apache.ftpserver.listener.nio.FtpHandlerAdapter)1 FtpLoggingFilter (org.apache.ftpserver.listener.nio.FtpLoggingFilter)1 FtpServerProtocolCodecFactory (org.apache.ftpserver.listener.nio.FtpServerProtocolCodecFactory)1 SslConfiguration (org.apache.ftpserver.ssl.SslConfiguration)1 ProtocolCodecFilter (org.apache.mina.filter.codec.ProtocolCodecFilter)1 ExecutorFilter (org.apache.mina.filter.executor.ExecutorFilter)1 BlacklistFilter (org.apache.mina.filter.firewall.BlacklistFilter)1 MdcInjectionFilter (org.apache.mina.filter.logging.MdcInjectionFilter)1 SslFilter (org.apache.mina.filter.ssl.SslFilter)1 SocketSessionConfig (org.apache.mina.transport.socket.SocketSessionConfig)1 NioSocketAcceptor (org.apache.mina.transport.socket.nio.NioSocketAcceptor)1