You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-commits@incubator.apache.org by ng...@apache.org on 2007/01/11 22:46:42 UTC

svn commit: r495421 [2/2] - in /incubator/ftpserver/trunk/core: ./ src/java/org/apache/ftpserver/ src/java/org/apache/ftpserver/command/ src/java/org/apache/ftpserver/ftplet/ src/java/org/apache/ftpserver/interfaces/ src/java/org/apache/ftpserver/liste...

Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaConnection.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaConnection.java?view=auto&rev=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaConnection.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaConnection.java Thu Jan 11 14:46:41 2007
@@ -0,0 +1,94 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.ftpserver.listener.mina;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import javax.net.ssl.SSLPeerUnverifiedException;
+
+import org.apache.ftpserver.FtpDataConnection;
+import org.apache.ftpserver.FtpSessionImpl;
+import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.interfaces.FtpServerContext;
+import org.apache.ftpserver.interfaces.Ssl;
+import org.apache.ftpserver.listener.AbstractConnection;
+import org.apache.ftpserver.listener.ConnectionObserver;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.SSLFilter;
+
+public class MinaConnection extends AbstractConnection {
+
+    private IoSession session;
+    
+    public MinaConnection(FtpServerContext serverContext, IoSession session) throws IOException {
+        super(serverContext);
+        
+        this.session = session;
+        
+        // data connection object
+        FtpDataConnection dataCon = new FtpDataConnection();
+        dataCon.setServerContext(this.serverContext);
+        dataCon.setServerControlAddress(((InetSocketAddress)session.getLocalAddress()).getAddress());
+        
+        // reader object
+        ftpSession = new FtpSessionImpl();
+        ftpSession.setClientAddress(((InetSocketAddress)session.getRemoteAddress()).getAddress());
+        ftpSession.setFtpDataConnection(dataCon);
+        
+        if(session.getFilterChain().contains("sslFilter")) {
+            SSLFilter sslFilter = (SSLFilter) session.getFilterChain().get("sslFilter");
+            
+            try {
+                ftpSession.setClientCertificates(sslFilter.getSSLSession(session).getPeerCertificates());
+            } catch(SSLPeerUnverifiedException e) {
+                // ignore, certificate will not be available to the session
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.ftpserver.listener.AbstractConnection#setObserver(org.apache.ftpserver.listener.ConnectionObserver)
+     */
+    public void setObserver(ConnectionObserver observer) {
+        session.setAttribute("observer", observer);
+    }
+
+    public void close() {
+        session.close().join();
+        
+    }
+
+    public void secureControlChannel(String type) throws Exception {
+        Ssl ssl = serverContext.getSocketFactory().getSSL();
+        
+        if(ssl != null) {
+            SSLFilter sslFilter = new SSLFilter( ssl.getSSLContext() );
+            sslFilter.setNeedClientAuth(ssl.getClientAuthenticationRequired());
+            session.getFilterChain().addFirst("sslSessionFilter", sslFilter);
+
+        } else {
+            throw new FtpException("Socket factory SSL not configured");
+        }
+        
+    }
+    
+    // TODO do we need to override setObserver?
+}

Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java?view=auto&rev=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java Thu Jan 11 14:46:41 2007
@@ -0,0 +1,98 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.ftpserver.listener.mina;
+
+import java.io.IOException;
+
+import org.apache.ftpserver.FtpSessionImpl;
+import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.interfaces.FtpServerContext;
+import org.apache.ftpserver.listener.ConnectionObserver;
+import org.apache.ftpserver.listener.FtpProtocolHandler;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.util.SessionLog;
+
+public class MinaFtpProtocolHandler extends IoHandlerAdapter
+{
+    
+    private static final String OUTPUT_KEY = "output";
+    private static final String CONNECTION_KEY = "connection";
+    
+    private FtpServerContext serverContext;
+    private FtpProtocolHandler protocolHandler;
+    
+    public MinaFtpProtocolHandler(FtpServerContext serverContext, FtpProtocolHandler protocolHandler) throws IOException {
+        this.serverContext = serverContext;
+        this.protocolHandler = protocolHandler;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.mina.common.IoHandlerAdapter#sessionCreated(org.apache.mina.common.IoSession)
+     */
+    public void sessionCreated(IoSession session) throws Exception {
+        MinaConnection connection = new MinaConnection(serverContext, session);
+        session.setAttribute(CONNECTION_KEY, connection);
+        
+        MinaFtpResponseOutput output = new MinaFtpResponseOutput(session);
+        output.setServerContext(serverContext);
+        output.setFtpSession(connection.getSession());
+        
+        session.setAttribute(OUTPUT_KEY, output);
+    }
+
+    public void sessionOpened( IoSession session ) throws Exception
+    {
+        // set idle time to 60 seconds
+        session.setIdleTime( IdleStatus.BOTH_IDLE, 60 );
+
+        MinaConnection connection = (MinaConnection) session.getAttribute(CONNECTION_KEY);
+        MinaFtpResponseOutput output = (MinaFtpResponseOutput) session.getAttribute(OUTPUT_KEY);
+        
+        protocolHandler.onConnectionOpened(connection, (FtpSessionImpl)connection.getSession(), output);
+    }
+    
+    public void messageReceived( IoSession session, Object message ) throws IOException, FtpException
+    {
+        FtpRequest request = (FtpRequest) message;
+
+        ConnectionObserver observer = (ConnectionObserver) session.getAttribute("observer");
+        observer.request(request.toString());
+        
+        MinaConnection connection = (MinaConnection) session.getAttribute(CONNECTION_KEY);
+        MinaFtpResponseOutput output = (MinaFtpResponseOutput) session.getAttribute(OUTPUT_KEY);
+
+        
+        protocolHandler.onRequestReceived(connection, (FtpSessionImpl)connection.getSession(), output, request);
+    }
+
+    public void sessionIdle( IoSession session, IdleStatus status )
+    {
+        SessionLog.info( session, "Disconnecting the idle." );
+        session.close();
+    }
+
+    public void exceptionCaught( IoSession session, Throwable cause )
+    {
+        session.close();
+    }
+}

Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpResponseOutput.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpResponseOutput.java?view=auto&rev=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpResponseOutput.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpResponseOutput.java Thu Jan 11 14:46:41 2007
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ftpserver.listener.mina;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+
+import org.apache.ftpserver.FtpWriter;
+import org.apache.ftpserver.ftplet.FtpResponse;
+import org.apache.mina.common.IoSession;
+
+public class MinaFtpResponseOutput extends FtpWriter {
+
+    private IoSession session;
+    
+    public MinaFtpResponseOutput(IoSession session) {
+        this.session = session;
+    }
+
+    public void write(FtpResponse response) throws IOException {
+        session.write(response).join();
+    }
+
+    protected InetAddress getFallbackServerAddress() {
+        if(session.getLocalAddress() instanceof InetSocketAddress) {
+            InetSocketAddress inetSocket = (InetSocketAddress) session.getLocalAddress();
+            return inetSocket.getAddress();
+        } else {
+            return null;
+        }
+    }
+
+    public void close() {
+        // do nothing
+    }
+
+    
+}

Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpResponseOutput.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaListener.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaListener.java?view=auto&rev=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaListener.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaListener.java Thu Jan 11 14:46:41 2007
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ 
+
+package org.apache.ftpserver.listener.mina;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.security.GeneralSecurityException;
+
+import org.apache.commons.logging.Log;
+import org.apache.ftpserver.interfaces.FtpServerContext;
+import org.apache.ftpserver.interfaces.Ssl;
+import org.apache.ftpserver.listener.FtpProtocolHandler;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.socketfactory.SSLFtpSocketFactory;
+import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.filter.LoggingFilter;
+import org.apache.mina.filter.SSLFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
+
+/**
+ * The default {@link Listener} implementation.
+ *
+ */
+public class MinaListener implements Listener {
+
+    private Log log;
+    
+    private FtpServerContext serverContext;
+
+    private IoAcceptor acceptor = new SocketAcceptor();
+    
+    private InetSocketAddress address;
+    
+    private MinaFtpProtocolHandler protocolHandler;
+
+    private SocketAcceptorConfig cfg;
+    
+    boolean suspended = false;
+ 
+
+    /**
+     * Constructs a listener based on the configuration object
+     * 
+     * @param serverContext Configuration for the listener
+     * @throws Exception 
+     */
+    public MinaListener(FtpServerContext serverContext) throws Exception {
+        this.serverContext = serverContext;
+        
+        log = serverContext.getLogFactory().getInstance(getClass());
+        
+        
+        int port = serverContext.getSocketFactory().getPort();
+        InetAddress serverAddress = serverContext.getSocketFactory().getServerAddress();
+        
+        if(serverAddress != null) {
+            address = new InetSocketAddress(serverAddress, port );
+        } else {
+            address = new InetSocketAddress( port );
+        }
+        
+        cfg = new SocketAcceptorConfig();
+        cfg.setReuseAddress( true );
+        cfg.getFilterChain().addLast(
+                "protocolFilter",
+                new ProtocolCodecFilter( new FtpServerProtocolCodecFactory() ) );
+        cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
+
+        if(serverContext.getSocketFactory() instanceof SSLFtpSocketFactory) {
+            Ssl ssl = serverContext.getSocketFactory().getSSL();
+            try {
+                SSLFilter sslFilter = new SSLFilter( ssl.getSSLContext() );
+                cfg.getFilterChain().addFirst("sslFilter", sslFilter);
+
+            } catch (GeneralSecurityException e) {
+                throw e;
+            }
+            
+        }
+    }
+
+    /**
+     * @see Listener#start()
+     */
+    public void start() throws Exception {
+        
+        protocolHandler = new MinaFtpProtocolHandler(serverContext, new FtpProtocolHandler(serverContext));
+
+        acceptor.bind(address, protocolHandler, cfg );
+    }
+
+    /**
+     * @see Listener#stop()
+     */
+    public synchronized void stop() {
+        // close server socket
+        if (acceptor != null) {
+            acceptor.unbindAll();
+            acceptor = null;
+        }
+    }
+
+    /**
+     * @see Listener#isStopped()
+     */
+    public boolean isStopped() {
+        return acceptor == null;
+    }
+
+    /**
+     * @see Listener#isSuspended()
+     */
+    public boolean isSuspended() {
+        return suspended;
+        
+    }
+
+    /**
+     * @see Listener#resume()
+     */
+    public void resume() {
+        if(acceptor != null && suspended) {
+            try {
+                acceptor.bind(address, protocolHandler, cfg);
+            } catch (IOException e) {
+                log.error("Failed to resume listener", e);
+            }
+        }
+    }
+
+    /**
+     * @see Listener#suspend()
+     */
+    public void suspend() {
+        if(acceptor != null && !suspended) {
+            acceptor.unbind(address);
+        }
+    }
+}
\ No newline at end of file

Propchange: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listener/mina/MinaListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ssl/DefaultSsl.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ssl/DefaultSsl.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ssl/DefaultSsl.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ssl/DefaultSsl.java Thu Jan 11 14:46:41 2007
@@ -23,8 +23,8 @@
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.security.GeneralSecurityException;
 import java.security.KeyStore;
-import java.security.SecureRandom;
 import java.util.HashMap;
 
 import javax.net.ssl.KeyManagerFactory;
@@ -124,7 +124,7 @@
     /**
      * Get SSL Context.
      */
-    private synchronized SSLContext getSSLContext(String protocol) throws Exception {
+    public synchronized SSLContext getSSLContext(String protocol) throws GeneralSecurityException {
         
         // null value check
         if(protocol == null) {
@@ -137,15 +137,11 @@
             return ctx;
         }
         
-        // create new secure random object
-        SecureRandom random = new SecureRandom();
-        random.nextInt();
-        
         // create SSLContext
         ctx = SSLContext.getInstance(protocol);
         ctx.init(keyManagerFactory.getKeyManagers(), 
                  trustManagerFactory.getTrustManagers(), 
-                 random);
+                 null);
 
         // store it in map
         sslContextMap.put(protocol, ctx);
@@ -259,5 +255,13 @@
      * Dispose - does nothing.
      */
     public void dispose() {
+    }
+
+    public boolean getClientAuthenticationRequired() {
+        return clientAuthReqd;
+    }
+
+    public SSLContext getSSLContext() throws GeneralSecurityException {
+        return getSSLContext(sslProtocol);
     }
 }

Added: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpResponseImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpResponseImplTest.java?view=auto&rev=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpResponseImplTest.java (added)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpResponseImplTest.java Thu Jan 11 14:46:41 2007
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */  
+
+package org.apache.ftpserver;
+
+import junit.framework.TestCase;
+
+
+public class FtpResponseImplTest extends TestCase {
+
+    public void testSingleLineToString() {
+        FtpResponseImpl response = new FtpResponseImpl(123, "foo bar");
+        
+        assertEquals("123 foo bar\r\n", response.toString());
+    }
+
+    public void testNullToString() {
+        FtpResponseImpl response = new FtpResponseImpl(123, null);
+        
+        assertEquals("123 \r\n", response.toString());
+    }
+
+    public void testMultipleLinesToString() {
+        FtpResponseImpl response = new FtpResponseImpl(123, "foo\nbar\nbaz");
+        
+        assertEquals("123-foo\r\nbar\r\n123 baz\r\n", response.toString());
+    }
+
+    public void testMultipleLinesToString1() {
+        FtpResponseImpl response = new FtpResponseImpl(123, "\nfoo\nbar\nbaz");
+        
+        assertEquals("123-\r\nfoo\r\nbar\r\n123 baz\r\n", response.toString());
+    }
+}

Propchange: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpResponseImplTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java Thu Jan 11 14:46:41 2007
@@ -28,6 +28,7 @@
 import org.apache.ftpserver.FtpRequestImpl;
 import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
+import org.apache.ftpserver.listener.io.IOFtpResponseOutput;
 
 
 public abstract class FtpLetContainerTestTemplate extends TestCase {
@@ -94,13 +95,13 @@
     
     public void testOnConnect() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onConnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onConnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onConnect(session, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onConnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onConnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onConnect(session, response);
             }
@@ -109,7 +110,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onConnect(new FtpSessionImpl(), new FtpWriter());
+        container.onConnect(new FtpSessionImpl(), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -118,13 +119,13 @@
     
     public void testOnDisconnect() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onDisconnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDisconnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onDisconnect(session, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onDisconnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDisconnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onDisconnect(session, response);
             }
@@ -133,7 +134,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onDisconnect(new FtpSessionImpl(), new FtpWriter());
+        container.onDisconnect(new FtpSessionImpl(), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -142,13 +143,13 @@
     
     public void testOnLogin() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onLogin(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onLogin(session, request, response);
             }
@@ -157,7 +158,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onLogin(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onLogin(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -166,13 +167,13 @@
     
     public void testOnDeleteStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onDeleteStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onDeleteStart(session, request, response);
             }
@@ -181,7 +182,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onDeleteStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onDeleteStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -190,13 +191,13 @@
 
     public void testOnDeleteEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onDeleteEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onDeleteEnd(session, request, response);
             }
@@ -205,7 +206,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onDeleteEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onDeleteEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -214,13 +215,13 @@
 
     public void testOnUploadStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onUploadStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onUploadStart(session, request, response);
             }
@@ -229,7 +230,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onUploadStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onUploadStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -238,13 +239,13 @@
 
     public void testOnUploadEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onUploadEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onUploadEnd(session, request, response);
             }
@@ -253,7 +254,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onUploadEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onUploadEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -262,13 +263,13 @@
 
     public void testOnDownloadStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onDownloadStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onDownloadStart(session, request, response);
             }
@@ -277,7 +278,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onDownloadStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onDownloadStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -286,13 +287,13 @@
     
     public void testOnDownloadEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onDownloadEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onDownloadEnd(session, request, response);
             }
@@ -301,7 +302,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onDownloadEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onDownloadEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -310,13 +311,13 @@
     
     public void testOnRmdirStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onRmdirStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onRmdirStart(session, request, response);
             }
@@ -325,7 +326,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onRmdirStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onRmdirStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -334,13 +335,13 @@
     
     public void testOnRmdirEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onRmdirEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onRmdirEnd(session, request, response);
             }
@@ -349,7 +350,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onRmdirEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onRmdirEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -358,13 +359,13 @@
     
     public void testOnMkdirStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onMkdirStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onMkdirStart(session, request, response);
             }
@@ -373,7 +374,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onMkdirStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onMkdirStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -382,13 +383,13 @@
 
     public void testOnMkdirEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onMkdirEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onMkdirEnd(session, request, response);
             }
@@ -397,7 +398,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onMkdirEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onMkdirEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -406,13 +407,13 @@
     
     public void testOnAppendStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onAppendStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onAppendStart(session, request, response);
             }
@@ -421,7 +422,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onAppendStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onAppendStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -430,13 +431,13 @@
     
     public void testOnAppendEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onAppendEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onAppendEnd(session, request, response);
             }
@@ -445,7 +446,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onAppendEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onAppendEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -454,13 +455,13 @@
     
     public void testOnUploadUniqueStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onUploadUniqueStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onUploadUniqueStart(session, request, response);
             }
@@ -469,7 +470,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onUploadUniqueStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onUploadUniqueStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -478,13 +479,13 @@
 
     public void testOnUploadUniqueEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onUploadUniqueEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onUploadUniqueEnd(session, request, response);
             }
@@ -493,7 +494,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onUploadUniqueEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onUploadUniqueEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -502,13 +503,13 @@
     
     public void testOnRenameStart() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onRenameStart(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onRenameStart(session, request, response);
             }
@@ -517,7 +518,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onRenameStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onRenameStart(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -526,13 +527,13 @@
     
     public void testOnRenameEnd() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onRenameEnd(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onRenameEnd(session, request, response);
             }
@@ -541,7 +542,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onRenameEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onRenameEnd(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));
@@ -550,13 +551,13 @@
     
     public void testOnSite() throws FtpException, IOException {
         MockFtplet ftplet1 = new MockFtplet() {
-            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet1");
                 return super.onSite(session, request, response);
             }
         };
         MockFtplet ftplet2 = new MockFtplet() {
-            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 calls.add("ftplet2");
                 return super.onSite(session, request, response);
             }
@@ -565,7 +566,7 @@
         container.addFtplet("ftplet1", ftplet1);
         container.addFtplet("ftplet2", ftplet2);
         
-        container.onSite(new FtpSessionImpl(), new FtpRequestImpl("foo"), new FtpWriter());
+        container.onSite(new FtpSessionImpl(), new FtpRequestImpl("foo"), new IOFtpResponseOutput());
         
         assertEquals(2, calls.size());
         assertEquals("ftplet1", calls.get(0));

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java Thu Jan 11 14:46:41 2007
@@ -69,7 +69,7 @@
 
     public void testLogin() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 assertNotNull(session.getUser());
                 
                 return super.onLogin(session, request, response);

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java Thu Jan 11 14:46:41 2007
@@ -87,7 +87,7 @@
 
     public void testExceptionDuringLogin() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response)
+            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response)
                     throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
@@ -104,7 +104,7 @@
 
     public void testExceptionDuringDeleteStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -125,7 +125,7 @@
 
     public void testExceptionDuringDeleteEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -149,7 +149,7 @@
 
     public void testExceptionDuringMkdirStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -168,7 +168,7 @@
 
     public void testExceptionDuringMkdirEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -190,7 +190,7 @@
 
     public void testExceptionDuringRmdirStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -211,7 +211,7 @@
 
     public void testExceptionDuringRmdirEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -235,7 +235,7 @@
 
     public void testExceptionDuringSite() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -252,7 +252,7 @@
 
     public void testExceptionDuringRenameStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -274,7 +274,7 @@
     
     public void testExceptionDuringRenameEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -300,7 +300,7 @@
 
     public void testExceptionDuringDownloadStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -319,7 +319,7 @@
 
     public void testExceptionDuringDownloadEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -342,7 +342,7 @@
 
     public void testExceptionDuringAppendStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -363,7 +363,7 @@
     
     public void testExceptionDuringAppendEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -385,7 +385,7 @@
 
     public void testExceptionDuringUploadStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -404,7 +404,7 @@
     
     public void testExceptionDuringUploadEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -424,7 +424,7 @@
     
     public void testExceptionDuringUploadUniqueStart() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 return mockReturnValue;
             }
@@ -443,7 +443,7 @@
     
     public void testExceptionDuringUploadUniqueEnd() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 throwException();
                 
                 return mockReturnValue;

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java Thu Jan 11 14:46:41 2007
@@ -66,7 +66,7 @@
 
     public void testLogin() throws Exception {
         MockFtplet.callback = new MockFtpletCallback() {
-            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+            public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
                 return FtpletEnum.RET_SKIP;
             }
         };

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtplet.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtplet.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtplet.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtplet.java Thu Jan 11 14:46:41 2007
@@ -33,83 +33,83 @@
         callback.init(ftpletContext, config);
     }
 
-    public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onAppendEnd(session, request, response);
     }
 
-    public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onAppendStart(session, request, response);
     }
 
-    public FtpletEnum onConnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onConnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onConnect(session, response);
     }
 
-    public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onDeleteEnd(session, request, response);
     }
 
-    public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onDeleteStart(session, request, response);
     }
 
-    public FtpletEnum onDisconnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDisconnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onDisconnect(session, response);
     }
 
-    public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onDownloadEnd(session, request, response);
     }
 
-    public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onDownloadStart(session, request, response);
     }
 
-    public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onLogin(session, request, response);
     }
 
-    public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onMkdirEnd(session, request, response);
     }
 
-    public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onMkdirStart(session, request, response);
     }
 
-    public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onRenameEnd(session, request, response);
     }
 
-    public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onRenameStart(session, request, response);
     }
 
-    public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onRmdirEnd(session, request, response);
     }
 
-    public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onRmdirStart(session, request, response);
     }
 
-    public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onSite(session, request, response);
     }
 
-    public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onUploadEnd(session, request, response);
     }
 
-    public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onUploadStart(session, request, response);
     }
 
-    public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onUploadUniqueEnd(session, request, response);
     }
 
-    public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return callback.onUploadUniqueStart(session, request, response);
     }
 }

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtpletCallback.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtpletCallback.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtpletCallback.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtpletCallback.java Thu Jan 11 14:46:41 2007
@@ -31,83 +31,83 @@
     public void init(FtpletContext ftpletContext, Configuration config) throws FtpException {
     }
 
-    public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onAppendEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onAppendStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onConnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onConnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDeleteEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDeleteStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onDisconnect(FtpSession session, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDisconnect(FtpSession session, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDownloadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onDownloadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onLogin(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onMkdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onMkdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRenameEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRenameStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRmdirEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onRmdirStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onSite(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadUniqueEnd(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 
-    public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponse response) throws FtpException, IOException {
+    public FtpletEnum onUploadUniqueStart(FtpSession session, FtpRequest request, FtpResponseOutput response) throws FtpException, IOException {
         return returnValue;
     }
 

Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java?view=diff&rev=495421&r1=495420&r2=495421
==============================================================================
--- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java (original)
+++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java Thu Jan 11 14:46:41 2007
@@ -49,7 +49,7 @@
         public void run() {            
         }
 
-        public void createSecureSocket(String type) throws Exception {
+        public void secureControlChannel(String type) throws Exception {
             
         }