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/02 16:17:26 UTC

svn commit: r491831 [1/4] - in /incubator/ftpserver/trunk: admin-gui/src/java/org/apache/ftpserver/gui/ core/src/java/org/apache/ftpserver/ core/src/java/org/apache/ftpserver/command/ core/src/java/org/apache/ftpserver/ftplet/ core/src/java/org/apache/...

Author: ngn
Date: Tue Jan  2 08:17:22 2007
New Revision: 491831

URL: http://svn.apache.org/viewvc?view=rev&rev=491831
Log:
Seperated FtpRequest into a pure request and a dedicated session class. Ths makes the seperation of duties more clear and moves us closer to the pattern used by MINA.

Added:
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpSessionImpl.java   (with props)
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/FtpRequestImplTest.java   (with props)
    incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FtpSession.java   (with props)
Modified:
    incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/DirectoryPanel.java
    incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FilePanel.java
    incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FtpConnectionTableModel.java
    incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/SpyPanelContainer.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConnectionManagerImpl.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpRequestImpl.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpStatisticsImpl.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ABOR.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ACCT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AUTH.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AbstractCommand.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CDUP.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CWD.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/DELE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPRT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPSV.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/FEAT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/HELP.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LANG.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LIST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MDTM.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MKD.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MLSD.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MLST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MODE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/NLST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/NOOP.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/OPTS.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/OPTS_MLST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/OPTS_UTF8.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PASS.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PASV.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PBSZ.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PORT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PROT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/PWD.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/QUIT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/REIN.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/REST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RETR.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RMD.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RNFR.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/RNTO.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_DESCUSER.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_HELP.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_STAT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_WHO.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SITE_ZONE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SIZE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STAT.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOR.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STOU.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/STRU.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/SYST.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/TYPE.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/USER.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ftplet/DefaultFtpletContainer.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/Command.java
    incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/interfaces/Connection.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetContainerTestTemplate.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDefaultTest.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnDisconnectTest.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/FtpLetReturnSkipTest.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtplet.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/ftplet/MockFtpletCallback.java
    incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/interfaces/ServerFtpStatisticsTestTemplate.java
    incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/DefaultFtplet.java
    incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FtpRequest.java
    incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/Ftplet.java

Modified: incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/DirectoryPanel.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/DirectoryPanel.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/DirectoryPanel.java (original)
+++ incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/DirectoryPanel.java Tue Jan  2 08:17:22 2007
@@ -115,7 +115,7 @@
      * Make directory notification.
      */
     public void notifyMkdir(Connection con, FileObject file) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         models[0].newEntry(file.getFullName(), user);
     }
     
@@ -124,7 +124,7 @@
      * Remove directory notification.
      */
     public void notifyRmdir(Connection con, FileObject file) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         models[1].newEntry(file.getFullName(), user);
     }
     

Modified: incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FilePanel.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FilePanel.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FilePanel.java (original)
+++ incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FilePanel.java Tue Jan  2 08:17:22 2007
@@ -117,7 +117,7 @@
      * File upload notification.
      */
     public void notifyUpload(Connection con, FileObject file, long sz) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         models[0].newEntry(file.getFullName(), user);
     }
     
@@ -125,7 +125,7 @@
      * File download notification.
      */
     public void notifyDownload(Connection con, FileObject file, long sz) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         models[1].newEntry(file.getFullName(), user);
     }
     
@@ -133,7 +133,7 @@
      * File delete notification.
      */
     public void notifyDelete(Connection con, FileObject file) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         models[2].newEntry(file.getFullName(), user);
     }
     

Modified: incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FtpConnectionTableModel.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FtpConnectionTableModel.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FtpConnectionTableModel.java (original)
+++ incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/FtpConnectionTableModel.java Tue Jan  2 08:17:22 2007
@@ -31,6 +31,7 @@
 import javax.swing.table.TableModel;
 
 import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.ftplet.FtpSession;
 import org.apache.ftpserver.ftplet.User;
 import org.apache.ftpserver.interfaces.Connection;
 import org.apache.ftpserver.interfaces.ConnectionManager;
@@ -142,12 +143,12 @@
             return retVal;
         }
         
-        FtpRequest request = thisCon.getRequest();
-        if(request == null) {
+        FtpSession session = thisCon.getSession();
+        if(session == null) {
             return retVal;
         }
         
-        User user = request.getUser();
+        User user = session.getUser();
         InetAddress addr = null;
         Date date = null;
         switch(col) {
@@ -161,21 +162,21 @@
                 break;
                 
             case 1:
-                date = request.getLoginTime();
+                date = session.getLoginTime();
                 if(date != null) {
                     retVal = DateUtils.getISO8601Date(date.getTime());
                 }
                 break;
                 
             case 2:
-                date = request.getLastAccessTime();
+                date = session.getLastAccessTime();
                 if(date != null) {
                     retVal = DateUtils.getISO8601Date(date.getTime());
                 }
                 break;
                 
             case 3:
-                addr = request.getRemoteAddress();
+                addr = session.getRemoteAddress();
                 if (addr != null) {
                     retVal = addr.getHostAddress();
                 }

Modified: incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/SpyPanelContainer.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/SpyPanelContainer.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/SpyPanelContainer.java (original)
+++ incubator/ftpserver/trunk/admin-gui/src/java/org/apache/ftpserver/gui/SpyPanelContainer.java Tue Jan  2 08:17:22 2007
@@ -109,7 +109,7 @@
      * Get tab caption.
      */
     private String getCaption(Connection con) {
-        User user = con.getRequest().getUser();
+        User user = con.getSession().getUser();
         String name = "UNKNOWN";
         if(user != null) {
             String tmp = user.getName();

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConnectionManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConnectionManagerImpl.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConnectionManagerImpl.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/ConnectionManagerImpl.java Tue Jan  2 08:17:22 2007
@@ -26,6 +26,7 @@
 import org.apache.ftpserver.ftplet.Configuration;
 import org.apache.ftpserver.ftplet.FtpException;
 import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.ftplet.FtpSession;
 import org.apache.ftpserver.interfaces.ConnectionManagerObserver;
 import org.apache.ftpserver.interfaces.Connection;
 import org.apache.ftpserver.interfaces.ConnectionManager;
@@ -161,7 +162,7 @@
          * set default idle time for request. This value should be overrided
          * after user login
          */
-        connection.getRequest().setMaxIdleTime(defaultIdleSec);
+        connection.getSession().setMaxIdleTime(defaultIdleSec);
         
         // now start a new thread to serve this connection
         new Thread(connection).start();
@@ -243,17 +244,17 @@
                 }
                     
                 // idle client connection
-                FtpRequestImpl request = (FtpRequestImpl)con.getRequest();
-                if(request == null) {
+                FtpSessionImpl session = (FtpSessionImpl)con.getSession();
+                if(session == null) {
                     continue;
                 }
-                if(request.isTimeout(currTime)) {
+                if(session.isTimeout(currTime)) {
                     inactiveCons.add(con);
                     continue;
                 }
                 
                 // idle data connection
-                FtpDataConnection dataCon = request.getFtpDataConnection();
+                FtpDataConnection dataCon = session.getFtpDataConnection();
                 if(dataCon == null) {
                     continue;
                 }
@@ -261,7 +262,7 @@
 
                     // if the data connection is not active - close it
                     if(dataCon.isTimeout(currTime)) {
-                        log.info("Removing idle data connection for " + request.getUser());
+                        log.info("Removing idle data connection for " + session.getUser());
                         dataCon.closeDataSocket();
                     }
                 }
@@ -275,12 +276,12 @@
                 continue;
             }
             
-            FtpRequest request = connection.getRequest();
-            if(request == null) {
+            FtpSession session = connection.getSession();
+            if(session == null) {
                 continue;
             }
             
-            log.info("Removing idle user " + request.getUser());
+            log.info("Removing idle user " + session.getUser());
             closeConnection(connection);
         }
     }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpRequestImpl.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpRequestImpl.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpRequestImpl.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpRequestImpl.java Tue Jan  2 08:17:22 2007
@@ -19,107 +19,32 @@
 
 package org.apache.ftpserver;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.InflaterInputStream;
-
-import org.apache.ftpserver.ftplet.*;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.interfaces.ConnectionObserver;
 
 /**
  * FTP request object.
- *
- * @author <a href="mailto:rana_b@yahoo.com">Rana Bhattacharyya</a>
  */
-public
-class FtpRequestImpl implements FtpRequest {
+public class FtpRequestImpl implements FtpRequest {
     
     private String line;
     private String command;
     private String argument;
     
-    /**
-     * Contains user name between USER and PASS commands
-     */
-    private String userArgument;
-    private User user;
-    private HashMap attributeMap;
-    private InetAddress remoteAddr;
     private ConnectionObserver observer;
-    private String language;
-    
-    private int maxIdleTime = 0;
-    private long connectionTime = 0L;
-    private long loginTime = 0L;
-    private long lastAccessTime = 0L;
-    
-    private FtpDataConnection dataConnection;
-    private FileSystemView fileSystemView;
-    
-    private FileObject renameFrom;
-    private long fileOffset;
-    
-    /**
-     * Default constructor.
-     */
-    public FtpRequestImpl() {
-        attributeMap = new HashMap();
-        userArgument = null;
-        user = null;
-        connectionTime = System.currentTimeMillis();
-    } 
-    
-    /**
-     * Set client address.
-     */
-    public void setClientAddress(InetAddress addr) {
-        remoteAddr = addr;
-    }
 
-    /**
-     * Set FTP data connection.
-     */
-    public void setFtpDataConnection(FtpDataConnection dataCon) {
-        dataConnection = dataCon;
-    }
     
     /**
-     * Get the observer object to get what the user is sending.
+     * Default constructor.
      */
-    public void setObserver(ConnectionObserver observer) {
-        this.observer = observer;
+    public FtpRequestImpl(String requestLine) {
+        parse(requestLine);
     } 
     
     /**
-     * Reset temporary state variables.
-     */
-    public void resetState() {
-        renameFrom = null;
-        fileOffset = 0L;
-    }
-    
-    /**
-     * Reinitialize request.
-     */
-    public void reinitialize() {
-        userArgument = null;
-        user = null;
-        loginTime = 0L;
-        fileSystemView = null;
-        renameFrom = null;
-        fileOffset = 0L;
-    }
-    
-    /**
      * Parse the ftp command line.
      */
-    public void parse(String lineToParse) {
+    private void parse(String lineToParse) {
         
         // notify connection observer
         spyRequest(lineToParse);
@@ -156,114 +81,6 @@
     }
     
     /**
-     * Set login attribute & user file system view.
-     */
-    public void setLogin(FileSystemView userFsView) {
-        loginTime = System.currentTimeMillis();
-        fileSystemView = userFsView;
-    }
-    
-    /**
-     * Set logout.
-     */
-    public void setLogout() {
-        loginTime = 0L;
-    }
-    
-    /**
-     * Update last access time.
-     */
-    public void updateLastAccessTime() {
-        lastAccessTime = System.currentTimeMillis();
-    }
-    
-    /**
-     * Is logged-in
-     */
-    public boolean isLoggedIn() {
-        return (loginTime != 0L);
-    }
-    
-    /**
-     * Get FTP data connection.
-     */
-    public FtpDataConnection getFtpDataConnection() {
-        return dataConnection;
-    }
-    
-    /**
-     * Get file system view.
-     */
-    public FileSystemView getFileSystemView() {
-        return fileSystemView;
-    }
-    
-    /**
-     * Get connection time.
-     */
-    public Date getConnectionTime() {
-        return new Date(connectionTime);
-    }
-    
-    /**
-     * Get the login time.
-     */
-    public Date getLoginTime() {
-        return new Date(loginTime);
-    }
-    
-    /**
-     * Get last access time.
-     */
-    public Date getLastAccessTime() {
-        return new Date(lastAccessTime);
-    }
-    
-    /**
-     * Get file offset.
-     */
-    public long getFileOffset() {
-        return fileOffset;
-    }
-    
-    /**
-     * Set the file offset.
-     */
-    public void setFileOffset(long offset) {
-        fileOffset = offset;
-    }
-    
-    /**
-     * Get rename from file object.
-     */
-    public FileObject getRenameFrom() {
-        return renameFrom;
-    }
-    
-    /**
-     * Set rename from.
-     */
-    public void setRenameFrom(FileObject file) {
-        renameFrom = file;
-    }
-
-    /**
-     * Returns user name entered in USER command
-     * 
-     * @return user name entered in USER command
-     */
-    public String getUserArgument() {
-        return userArgument;
-    }
-
-    /**
-     * Set user name entered from USER command
-     */
-    public void setUserArgument(String tmpUserName) {
-        this.userArgument = tmpUserName;
-    }
-
-    /**
      * Get the ftp command.
      */
     public String getCommand() {
@@ -284,150 +101,12 @@
         return line;
     }
     
+
     /**
      * Has argument.
+     * TODO: should be in interface?
      */
     public boolean hasArgument() {
         return getArgument() != null;
-    }
-    
-    /**
-     * Get language.
-     */
-    public String getLanguage() {
-        return language;
-    }
-    
-    /**
-     * Set language.
-     */
-    public void setLanguage(String language) {
-        this.language = language;
-    }
-    
-    /**
-     * Get user.
-     */
-    public User getUser() {
-        return user;
-    }
-    
-    public void setUser(User user) {
-	this.user = user;
-    }
-    
-    /**
-     * Get remote address
-     */
-    public InetAddress getRemoteAddress() {
-        return remoteAddr;
-    }
-    
-    /**
-     * Get data input stream. The return value will never be null.
-     */
-    public InputStream getDataInputStream() throws IOException {
-        try {
-            
-            // get data socket
-            Socket dataSoc = dataConnection.getDataSocket();
-            if(dataSoc == null) {
-                throw new IOException("Cannot open data connection.");
-            }
-            
-            // create input stream
-            InputStream is = dataSoc.getInputStream();
-            if(dataConnection.isZipMode()) {
-                is = new InflaterInputStream(is);
-            }
-            return is;
-        }
-        catch(IOException ex) {
-            dataConnection.closeDataSocket();
-            throw ex;
-        }
-    }
-    
-    /**
-     * Get data output stream. The return value will never be null.
-     */
-    public OutputStream getDataOutputStream() throws IOException {
-        try {
-            
-            // get data socket
-            Socket dataSoc = dataConnection.getDataSocket();
-            if(dataSoc == null) {
-                throw new IOException("Cannot open data connection.");
-            }
-            
-            // create output stream
-            OutputStream os = dataSoc.getOutputStream();
-            if(dataConnection.isZipMode()) {
-                os = new DeflaterOutputStream(os);
-            }
-            return os;
-        }
-        catch(IOException ex) {
-            dataConnection.closeDataSocket();
-            throw ex;
-        }
-    }
-    
-    /**
-     * Get attribute
-     */
-    public Object getAttribute(String name) {
-        return attributeMap.get(name);
-    }
-    
-    /**
-     * Set attribute.
-     */
-    public void setAttribute(String name, Object value) {
-        attributeMap.put(name, value);
-    }
-    
-    /**
-     * Remove attribute.
-     */
-    public void removeAttribute(String name) {
-        attributeMap.remove(name);
-    }
-    
-    /**
-     * Remove all attributes.
-     */
-    public void clear() {
-        attributeMap.clear();
-    }
-    
-    /**
-     * It checks the request timeout.
-     * Compares the last access time with the specified time.
-     */
-    public boolean isTimeout(long currTime) {
-         boolean bActive = true;
-         int maxIdleTime = getMaxIdleTime();
-         if(maxIdleTime > 0) {
-             long currIdleTimeMillis = currTime - lastAccessTime;
-             long maxIdleTimeMillis = maxIdleTime * 1000L;
-             bActive = currIdleTimeMillis <= maxIdleTimeMillis;
-         }
-         return !bActive;
-    }
-
-    /**
-     * Check request timeout.
-     */
-    public boolean isTimeout() {
-        return isTimeout(System.currentTimeMillis());
-    }
-
-    public int getMaxIdleTime() {
-        return this.maxIdleTime;
-    }
-
-    public void setMaxIdleTime(int maxIdleTimeSec) {
-        this.maxIdleTime = maxIdleTimeSec;
     }
 }

Added: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpSessionImpl.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpSessionImpl.java?view=auto&rev=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpSessionImpl.java (added)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpSessionImpl.java Tue Jan  2 08:17:22 2007
@@ -0,0 +1,384 @@
+/*
+ * 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 java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.InflaterInputStream;
+
+import org.apache.ftpserver.ftplet.FileObject;
+import org.apache.ftpserver.ftplet.FileSystemView;
+import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.ftplet.FtpSession;
+import org.apache.ftpserver.ftplet.User;
+import org.apache.ftpserver.interfaces.ConnectionObserver;
+
+/**
+ * FTP session
+ */
+public class FtpSessionImpl implements FtpSession {
+
+    
+    /**
+     * Contains user name between USER and PASS commands
+     */
+    private String userArgument;
+    private User user;
+    private HashMap attributeMap;
+    private InetAddress remoteAddr;
+    private ConnectionObserver observer;
+    private String language;
+    
+    private int maxIdleTime = 0;
+    private long connectionTime = 0L;
+    private long loginTime = 0L;
+    private long lastAccessTime = 0L;
+    
+    private FtpDataConnection dataConnection;
+    private FileSystemView fileSystemView;
+    
+    private FileObject renameFrom;
+    private long fileOffset;
+    private FtpRequest request;
+    
+    /**
+     * Default constructor.
+     */
+    public FtpSessionImpl() {
+        attributeMap = new HashMap();
+        userArgument = null;
+        user = null;
+        connectionTime = System.currentTimeMillis();
+    } 
+    
+    /**
+     * Set client address.
+     */
+    public void setClientAddress(InetAddress addr) {
+        remoteAddr = addr;
+    }
+
+    /**
+     * Set FTP data connection.
+     */
+    public void setFtpDataConnection(FtpDataConnection dataCon) {
+        dataConnection = dataCon;
+    }
+    
+    /**
+     * Get the observer object to get what the user is sending.
+     */
+    public void setObserver(ConnectionObserver observer) {
+        this.observer = observer;
+    } 
+    
+    /**
+     * Reset temporary state variables.
+     */
+    public void resetState() {
+        renameFrom = null;
+        fileOffset = 0L;
+    }
+    
+    /**
+     * Reinitialize request.
+     */
+    public void reinitialize() {
+        userArgument = null;
+        user = null;
+        loginTime = 0L;
+        fileSystemView = null;
+        renameFrom = null;
+        fileOffset = 0L;
+    }
+    
+    /**
+     * Spy print. Monitor user request.
+     */
+    private void spyRequest(String str) {
+        ConnectionObserver observer = this.observer;
+        if(observer != null) {
+            observer.request(str + "\r\n");
+        }
+    }
+    
+    /**
+     * Set login attribute & user file system view.
+     */
+    public void setLogin(FileSystemView userFsView) {
+        loginTime = System.currentTimeMillis();
+        fileSystemView = userFsView;
+    }
+    
+    /**
+     * Set logout.
+     */
+    public void setLogout() {
+        loginTime = 0L;
+    }
+    
+    /**
+     * Update last access time.
+     */
+    public void updateLastAccessTime() {
+        lastAccessTime = System.currentTimeMillis();
+    }
+    
+    /**
+     * Is logged-in
+     */
+    public boolean isLoggedIn() {
+        return (loginTime != 0L);
+    }
+    
+    /**
+     * Get FTP data connection.
+     */
+    public FtpDataConnection getFtpDataConnection() {
+        return dataConnection;
+    }
+    
+    /**
+     * Get file system view.
+     */
+    public FileSystemView getFileSystemView() {
+        return fileSystemView;
+    }
+    
+    /**
+     * Get connection time.
+     */
+    public Date getConnectionTime() {
+        return new Date(connectionTime);
+    }
+    
+    /**
+     * Get the login time.
+     */
+    public Date getLoginTime() {
+        return new Date(loginTime);
+    }
+    
+    /**
+     * Get last access time.
+     */
+    public Date getLastAccessTime() {
+        return new Date(lastAccessTime);
+    }
+    
+    /**
+     * Get file offset.
+     */
+    public long getFileOffset() {
+        return fileOffset;
+    }
+    
+    /**
+     * Set the file offset.
+     */
+    public void setFileOffset(long offset) {
+        fileOffset = offset;
+    }
+    
+    /**
+     * Get rename from file object.
+     */
+    public FileObject getRenameFrom() {
+        return renameFrom;
+    }
+    
+    /**
+     * Set rename from.
+     */
+    public void setRenameFrom(FileObject file) {
+        renameFrom = file;
+    }
+
+    /**
+     * Returns user name entered in USER command
+     * 
+     * @return user name entered in USER command
+     */
+    public String getUserArgument() {
+        return userArgument;
+    }
+
+    /**
+     * Set user name entered from USER command
+     */
+    public void setUserArgument(String tmpUserName) {
+        this.userArgument = tmpUserName;
+    }
+
+    
+    /**
+     * Get language.
+     */
+    public String getLanguage() {
+        return language;
+    }
+    
+    /**
+     * Set language.
+     */
+    public void setLanguage(String language) {
+        this.language = language;
+    }
+    
+    /**
+     * Get user.
+     */
+    public User getUser() {
+        return user;
+    }
+    
+    public void setUser(User user) {
+	this.user = user;
+    }
+    
+    /**
+     * Get remote address
+     */
+    public InetAddress getRemoteAddress() {
+        return remoteAddr;
+    }
+    
+    /**
+     * Get data input stream. The return value will never be null.
+     */
+    public InputStream getDataInputStream() throws IOException {
+        try {
+            
+            // get data socket
+            Socket dataSoc = dataConnection.getDataSocket();
+            if(dataSoc == null) {
+                throw new IOException("Cannot open data connection.");
+            }
+            
+            // create input stream
+            InputStream is = dataSoc.getInputStream();
+            if(dataConnection.isZipMode()) {
+                is = new InflaterInputStream(is);
+            }
+            return is;
+        }
+        catch(IOException ex) {
+            dataConnection.closeDataSocket();
+            throw ex;
+        }
+    }
+    
+    /**
+     * Get data output stream. The return value will never be null.
+     */
+    public OutputStream getDataOutputStream() throws IOException {
+        try {
+            
+            // get data socket
+            Socket dataSoc = dataConnection.getDataSocket();
+            if(dataSoc == null) {
+                throw new IOException("Cannot open data connection.");
+            }
+            
+            // create output stream
+            OutputStream os = dataSoc.getOutputStream();
+            if(dataConnection.isZipMode()) {
+                os = new DeflaterOutputStream(os);
+            }
+            return os;
+        }
+        catch(IOException ex) {
+            dataConnection.closeDataSocket();
+            throw ex;
+        }
+    }
+    
+    /**
+     * Get attribute
+     */
+    public Object getAttribute(String name) {
+        return attributeMap.get(name);
+    }
+    
+    /**
+     * Set attribute.
+     */
+    public void setAttribute(String name, Object value) {
+        attributeMap.put(name, value);
+    }
+    
+    /**
+     * Remove attribute.
+     */
+    public void removeAttribute(String name) {
+        attributeMap.remove(name);
+    }
+    
+    /**
+     * Remove all attributes.
+     */
+    public void clear() {
+        attributeMap.clear();
+    }
+    
+    /**
+     * It checks the request timeout.
+     * Compares the last access time with the specified time.
+     */
+    public boolean isTimeout(long currTime) {
+         boolean bActive = true;
+         int maxIdleTime = getMaxIdleTime();
+         if(maxIdleTime > 0) {
+             long currIdleTimeMillis = currTime - lastAccessTime;
+             long maxIdleTimeMillis = maxIdleTime * 1000L;
+             bActive = currIdleTimeMillis <= maxIdleTimeMillis;
+         }
+         return !bActive;
+    }
+
+    /**
+     * Check request timeout.
+     */
+    public boolean isTimeout() {
+        return isTimeout(System.currentTimeMillis());
+    }
+
+    public int getMaxIdleTime() {
+        return this.maxIdleTime;
+    }
+
+    public void setMaxIdleTime(int maxIdleTimeSec) {
+        this.maxIdleTime = maxIdleTimeSec;
+    }
+
+    public FtpRequest getCurrentRequest() {
+        return request;
+    }
+    
+    public void setCurrentRequest(FtpRequest request) {
+        this.request = request;
+    }
+}

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

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpStatisticsImpl.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpStatisticsImpl.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpStatisticsImpl.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpStatisticsImpl.java Tue Jan  2 08:17:22 2007
@@ -320,7 +320,7 @@
     public void setLogin(Connection connection) {
         ++currLogins;
         ++totalLogins;
-        User user = connection.getRequest().getUser();
+        User user = connection.getSession().getUser();
         if( "anonymous".equals(user.getName()) ) {
             ++currAnonLogins;
             ++totalAnonLogins;
@@ -335,15 +335,15 @@
             userLoginTable.put(user.getName(), statisticsTable);
             //new login, put 1 in the login number
             statisticsTable.put(LOGIN_NUMBER, new Integer(1));
-            statisticsTable.put(connection.getRequest().getRemoteAddress().getHostAddress(), new Integer(1));
+            statisticsTable.put(connection.getSession().getRemoteAddress().getHostAddress(), new Integer(1));
           } else{
             Integer loginNumber = (Integer) statisticsTable.get(LOGIN_NUMBER);
             statisticsTable.put(LOGIN_NUMBER, new Integer(loginNumber.intValue() + 1));
-            Integer loginNumberPerIP = (Integer) statisticsTable.get(connection.getRequest().getRemoteAddress().getHostAddress());
+            Integer loginNumberPerIP = (Integer) statisticsTable.get(connection.getSession().getRemoteAddress().getHostAddress());
             if(loginNumberPerIP == null){//new connection from this ip
-              statisticsTable.put(connection.getRequest().getRemoteAddress().getHostAddress(), new Integer(1));
+              statisticsTable.put(connection.getSession().getRemoteAddress().getHostAddress(), new Integer(1));
             } else{//this ip has connections already
-              statisticsTable.put(connection.getRequest().getRemoteAddress().getHostAddress(), new Integer(loginNumberPerIP.intValue() + 1));
+              statisticsTable.put(connection.getSession().getRemoteAddress().getHostAddress(), new Integer(loginNumberPerIP.intValue() + 1));
             }
           }
         }
@@ -364,7 +364,7 @@
      */
     public void setLogout(Connection connection) {
         --currLogins;
-        User user = connection.getRequest().getUser();
+        User user = connection.getSession().getUser();
         if( "anonymous".equals(user.getName()) ) {
             --currAnonLogins;
         }
@@ -373,13 +373,13 @@
           Hashtable statisticsTable = (Hashtable) userLoginTable.get(user.getName());
           Integer loginNumber = (Integer) statisticsTable.get(LOGIN_NUMBER);
           statisticsTable.put(LOGIN_NUMBER, new Integer(loginNumber.intValue() - 1));
-          Integer loginNumberPerIP = (Integer) statisticsTable.get(connection.getRequest().getRemoteAddress().getHostAddress());
+          Integer loginNumberPerIP = (Integer) statisticsTable.get(connection.getSession().getRemoteAddress().getHostAddress());
           if(loginNumberPerIP != null){//this should always be true
             if(loginNumberPerIP.intValue() <= 1){//the last login from this ip, remove this ip address
-              statisticsTable.remove(connection.getRequest().getRemoteAddress().getHostAddress());
+              statisticsTable.remove(connection.getSession().getRemoteAddress().getHostAddress());
             }
           } else{//this ip has other logins, reduce the number
-            statisticsTable.put(connection.getRequest().getRemoteAddress().getHostAddress(), new Integer(loginNumberPerIP.intValue() - 1));
+            statisticsTable.put(connection.getSession().getRemoteAddress().getHostAddress(), new Integer(loginNumberPerIP.intValue() - 1));
           }
         }
         
@@ -492,7 +492,7 @@
         if (observer != null) {
             
             // is anonymous login
-            User user = connection.getRequest().getUser();
+            User user = connection.getSession().getUser();
             boolean anonymous = false;
             if(user != null) {
                 String login = user.getName();
@@ -508,7 +508,7 @@
     private void notifyLoginFail(Connection connection) {
         StatisticsObserver observer = this.observer;
         if (observer != null) {
-            observer.notifyLoginFail(connection.getRequest().getRemoteAddress());
+            observer.notifyLoginFail(connection.getSession().getRemoteAddress());
         }
     }
     
@@ -519,7 +519,7 @@
         StatisticsObserver observer = this.observer;
         if (observer != null) {
             // is anonymous login
-            User user = connection.getRequest().getUser();
+            User user = connection.getSession().getUser();
             boolean anonymous = false;
             if(user != null) {
                 String login = user.getName();

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpWriter.java Tue Jan  2 08:17:22 2007
@@ -31,6 +31,7 @@
 import org.apache.ftpserver.ftplet.FileSystemView;
 import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.ftplet.FtpResponse;
+import org.apache.ftpserver.ftplet.FtpSession;
 import org.apache.ftpserver.ftplet.FtpStatistics;
 import org.apache.ftpserver.interfaces.ConnectionObserver;
 import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -95,7 +96,7 @@
     private Writer writer;
     private ConnectionObserver observer;
     private FtpServerContext serverContext;
-    private FtpRequest request;
+    private FtpSession session;
     private InetAddress serverAddress;
 
         
@@ -118,8 +119,8 @@
     /**
      * Set ftp request.
      */
-    public void setFtpRequest(FtpRequest request) {
-        this.request = request;
+    public void setFtpSession(FtpSession session) {
+        this.session = session;
     }
     
     /**
@@ -144,7 +145,7 @@
      */
     public void send(int code, String subId, String basicMsg) throws IOException {
         MessageResource resource = serverContext.getMessageResource();
-        String lang = request.getLanguage();
+        String lang = session.getLanguage();
         
         String msg = null;
         if(resource != null ) {
@@ -270,7 +271,7 @@
     /**
      * Get the variable value.
      */
-    public String getVariableValue(int code, String basicMsg, String varName) {
+    private String getVariableValue(int code, String basicMsg, String varName) {
         
         String varVal = null;
         
@@ -336,6 +337,12 @@
         
         String varVal = null;
         
+        FtpRequest request = session.getCurrentRequest();
+        
+        if(request == null) {
+            return "";
+        }
+        
         // request line
         if(varName.equals(REQUEST_LINE)) {
             varVal = request.getRequestLine();
@@ -523,37 +530,37 @@
         
         // client ip
         if(varName.equals(CLIENT_IP)) {
-            varVal = request.getRemoteAddress().getHostAddress();
+            varVal = session.getRemoteAddress().getHostAddress();
         }
         
         // client connection time
         else if(varName.equals(CLIENT_CON_TIME)) {
-            varVal = DateUtils.getISO8601Date(request.getConnectionTime().getTime());
+            varVal = DateUtils.getISO8601Date(session.getConnectionTime().getTime());
         }
         
         // client login name
         else if(varName.equals(CLIENT_LOGIN_NAME)) {
-            varVal = request.getUserArgument();
+            varVal = session.getUserArgument();
         }
         
         // client login time
         else if(varName.equals(CLIENT_LOGIN_TIME)) {
-            varVal = DateUtils.getISO8601Date(request.getLoginTime().getTime());
+            varVal = DateUtils.getISO8601Date(session.getLoginTime().getTime());
         }
         
         // client last access time
         else if(varName.equals(CLIENT_ACCESS_TIME)) {
-            varVal = DateUtils.getISO8601Date(request.getLastAccessTime().getTime());
+            varVal = DateUtils.getISO8601Date(session.getLastAccessTime().getTime());
         }
         
         // client home
         else if(varName.equals(CLIENT_HOME)) {
-            varVal = request.getUser().getHomeDirectory();
+            varVal = session.getUser().getHomeDirectory();
         }
         
         // client directory
         else if(varName.equals(CLIENT_DIR)) {
-            FileSystemView fsView = request.getFileSystemView();
+            FileSystemView fsView = session.getFileSystemView();
             if(fsView != null) {
                 try {
                     varVal = fsView.getCurrentDirectory().getFullName();

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/RequestHandler.java Tue Jan  2 08:17:22 2007
@@ -37,6 +37,7 @@
 import org.apache.ftpserver.ftplet.FileSystemView;
 import org.apache.ftpserver.ftplet.FtpException;
 import org.apache.ftpserver.ftplet.FtpRequest;
+import org.apache.ftpserver.ftplet.FtpSession;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.FtpletEnum;
 import org.apache.ftpserver.ftplet.Structure;
@@ -66,7 +67,7 @@
     private Log log;
     
     private Socket controlSocket;
-    private FtpRequestImpl request;
+    private FtpSessionImpl session;
     private FtpWriter writer;
     private BufferedReader reader;
     private boolean isConnectionClosed;
@@ -90,15 +91,15 @@
         dataCon.setServerControlAddress(controlSocket.getLocalAddress());
         
         // reader object
-        request = new FtpRequestImpl();
-        request.setClientAddress(this.controlSocket.getInetAddress());
-        request.setFtpDataConnection(dataCon);
+        session = new FtpSessionImpl();
+        session.setClientAddress(this.controlSocket.getInetAddress());
+        session.setFtpDataConnection(dataCon);
         
         // writer object
         writer = new FtpWriter();
         writer.setControlSocket(this.controlSocket);
         writer.setServerContext(this.serverContext);
-        writer.setFtpRequest(request);
+        writer.setFtpSession(session);
     }
     
     /**
@@ -113,9 +114,9 @@
         }
         
         // set request observer
-        FtpRequestImpl request = this.request;
-        if(request != null) {
-            request.setObserver(observer);
+        FtpSessionImpl session = this.session;
+        if(session != null) {
+            session.setObserver(observer);
         }
     }   
     
@@ -176,22 +177,22 @@
     /**
      * Get request.
      */
-    public FtpRequest getRequest() {
-        return request;
+    public FtpSession getSession() {
+        return session;
     }
     
     /**
      * Server one FTP client connection.
      */
     public void run() {
-        if(request == null ) {
+        if(session == null ) {
             return;
         }
         if(serverContext == null) {
         	return;
         }
         
-        InetAddress clientAddr = request.getRemoteAddress();
+        InetAddress clientAddr = session.getRemoteAddress();
         ConnectionManager conManager = serverContext.getConnectionManager();
         Ftplet ftpletContainer = serverContext.getFtpletContainer();
         
@@ -214,7 +215,7 @@
             // call Ftplet.onConnect() method
             boolean isSkipped = false;
 
-            FtpletEnum ftpletRet = ftpletContainer.onConnect(request, writer);
+            FtpletEnum ftpletRet = ftpletContainer.onConnect(session, writer);
             if(ftpletRet == FtpletEnum.RET_SKIP) {
                 isSkipped = true;
             }
@@ -261,14 +262,20 @@
                 }
                 
                 // parse and check permission
-                request.parse(commandLine);
-                if(!hasPermission()) {
+                FtpRequestImpl request = new FtpRequestImpl(commandLine);
+                session.setCurrentRequest(request);
+                
+                if(!hasPermission(request)) {
                     writer.send(530, "permission", null);
                     continue;
                 }
 
                 // execute command
-                service(request, writer);
+                service(request, session, writer);
+                
+                if(session != null) {
+                    session.setCurrentRequest(null);
+                }
             }
             while(!isConnectionClosed);
         } catch(SocketException ex) {
@@ -290,20 +297,20 @@
      * Notify connection manager observer.
      */
     protected void notifyObserver() {
-        request.updateLastAccessTime();
+        session.updateLastAccessTime();
         serverContext.getConnectionManager().updateConnection(this);
     }
 
     /**
      * Execute the ftp command.
      */
-    public void service(FtpRequestImpl request, FtpWriter out) throws IOException, FtpException {
+    public void service(FtpRequestImpl request, FtpSessionImpl session, FtpWriter out) throws IOException, FtpException {
         try {
             String commandName = request.getCommand();
             CommandFactory commandFactory = serverContext.getCommandFactory();
             Command command = commandFactory.getCommand(commandName);
             if(command != null) {
-                command.execute(this, request, out);
+                command.execute(this, request, session, out);
             }
             else {
                 out.send(502, "not.implemented", null);
@@ -343,7 +350,7 @@
         // call Ftplet.onDisconnect() method.
         try {
             Ftplet ftpletContainer = serverContext.getFtpletContainer();
-            ftpletContainer.onDisconnect(request, writer);
+            ftpletContainer.onDisconnect(session, writer);
         }
         catch(Exception ex) {
             log.warn("RequestHandler.close()", ex);
@@ -352,30 +359,30 @@
         // notify statistics object and close request
         ServerFtpStatistics ftpStat = (ServerFtpStatistics)serverContext.getFtpStatistics();
 
-        if(request != null) {
+        if(session != null) {
             
             // log message
-            User user = request.getUser();
+            User user = session.getUser();
             String userName = user != null ? user.getName() : "<Not logged in>";
-            InetAddress clientAddr = request.getRemoteAddress(); 
+            InetAddress clientAddr = session.getRemoteAddress(); 
             log.info("Close connection : " + clientAddr.getHostAddress() + " - " + userName);
             
             // logout if necessary and notify statistics
-            if(request.isLoggedIn()) {
-                request.setLogout();
+            if(session.isLoggedIn()) {
+                session.setLogout();
                 ftpStat.setLogout(this);
             }
             ftpStat.setCloseConnection(this);
             
             // clear request
-            request.clear();
-            request.setObserver(null);
-            request.getFtpDataConnection().dispose();
-            FileSystemView fview = request.getFileSystemView();
+            session.clear();
+            session.setObserver(null);
+            session.getFtpDataConnection().dispose();
+            FileSystemView fview = session.getFileSystemView();
             if(fview != null) {
                 fview.dispose();
             }
-            request = null;
+            session = null;
         }
                 
         // close ftp writer
@@ -409,12 +416,12 @@
     /**
      * Check user permission to execute ftp command. 
      */
-    protected boolean hasPermission() {
+    protected boolean hasPermission(FtpRequest request) {
         String cmd = request.getCommand();
         if(cmd == null) {
             return false;
         }
-        return request.isLoggedIn() ||
+        return session.isLoggedIn() ||
                cmd.equals("USER")   || 
 		       cmd.equals("PASS")   ||
 		       cmd.equals("QUIT")   ||

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ABOR.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ABOR.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ABOR.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ABOR.java Tue Jan  2 08:17:22 2007
@@ -21,9 +21,10 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * <code>ABOR &lt;CRLF&gt;</code><br>
@@ -46,14 +47,15 @@
      * Execute command
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // and abort any data connection
-        request.getFtpDataConnection().closeDataSocket();
+        session.getFtpDataConnection().closeDataSocket();
         out.send(226, "ABOR", null);
     }   
 }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ACCT.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ACCT.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ACCT.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/ACCT.java Tue Jan  2 08:17:22 2007
@@ -21,9 +21,10 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * <code>ACCT &lt;CRLF&gt;</code><br>
@@ -40,11 +41,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request,
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // and abort any data connection
         out.send(202, "ACCT", null);

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/APPE.java Tue Jan  2 08:17:22 2007
@@ -26,12 +26,13 @@
 import java.net.SocketException;
 
 import org.apache.commons.logging.Log;
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.Authority;
 import org.apache.ftpserver.ftplet.FileObject;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.FtpletEnum;
 import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -58,13 +59,14 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         try {
         
             // reset state variables
-            request.resetState();
+            session.resetState();
             FtpServerContext serverContext = handler.getServerContext();
             
             // argument check
@@ -78,7 +80,7 @@
             Ftplet ftpletContainer = serverContext.getFtpletContainer();
             FtpletEnum ftpletRet;
             try {
-                ftpletRet = ftpletContainer.onAppendStart(request, out);
+                ftpletRet = ftpletContainer.onAppendStart(session, request, out);
             } catch(Exception e) {
                 log.debug("Ftplet container threw exception", e);
                 ftpletRet = FtpletEnum.RET_DISCONNECT;
@@ -94,7 +96,7 @@
             // get filenames
             FileObject file = null;
             try {
-                file = request.getFileSystemView().getFileObject(fileName);
+                file = session.getFileSystemView().getFileObject(fileName);
             }
             catch(Exception e) {
                 log.debug("File system threw exception", e);
@@ -121,7 +123,7 @@
             out.send(150, "APPE", fileName);
             InputStream is = null;
             try {
-                is = request.getDataInputStream();
+                is = session.getDataInputStream();
             }
             catch(IOException e) {
                 log.debug("Exception when getting data input stream", e);
@@ -146,7 +148,7 @@
                 bos = IoUtils.getBufferedOutputStream( file.createOutputStream(offset) );
                     
                 // transfer data
-                Authority[] maxUploadRates = handler.getRequest().getUser().getAuthorities(TransferRatePermission.class);
+                Authority[] maxUploadRates = session.getUser().getAuthorities(TransferRatePermission.class);
                 
                 int maxRate = 0;
                 if(maxUploadRates.length > 0) {
@@ -156,7 +158,7 @@
                 long transSz = handler.transfer(bis, bos, maxRate);
                 
                 // log message
-                String userName = request.getUser().getName();
+                String userName = session.getUser().getName();
                 Log log = serverContext.getLogFactory().getInstance(getClass());
                 log.info("File upload : " + userName + " - " + fileName);
                 
@@ -185,7 +187,7 @@
                 
                 // call Ftplet.onAppendEnd() method
                 try {
-                    ftpletRet = ftpletContainer.onAppendEnd(request, out);
+                    ftpletRet = ftpletContainer.onAppendEnd(session, request, out);
                 } catch(Exception e) {
                     log.debug("Ftplet container threw exception", e);
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
@@ -198,7 +200,7 @@
             }
         }
         finally {
-            request.getFtpDataConnection().closeDataSocket();
+            session.getFtpDataConnection().closeDataSocket();
         }
     }
 }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AUTH.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AUTH.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AUTH.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AUTH.java Tue Jan  2 08:17:22 2007
@@ -22,10 +22,11 @@
 import java.io.IOException;
 
 import org.apache.commons.logging.Log;
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.interfaces.FtpServerContext;
 
 /**
@@ -41,11 +42,12 @@
      * Execute command
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // argument check
         if(!request.hasArgument()) {

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AbstractCommand.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AbstractCommand.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AbstractCommand.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/AbstractCommand.java Tue Jan  2 08:17:22 2007
@@ -19,14 +19,8 @@
 
 package org.apache.ftpserver.command;
 
-import java.io.IOException;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ftpserver.FtpRequestImpl;
-import org.apache.ftpserver.FtpWriter;
-import org.apache.ftpserver.RequestHandler;
-import org.apache.ftpserver.ftplet.FtpException;
 import org.apache.ftpserver.interfaces.Command;
 
 /**
@@ -42,12 +36,5 @@
 
     public void setLogFactory(LogFactory logFactory) {
         log = logFactory.getInstance(getClass());
-    }
-    
-    /**
-     * Execute command
-     */
-    public abstract void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
-                        FtpWriter out) throws IOException, FtpException;   
+    }  
 }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CDUP.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CDUP.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CDUP.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CDUP.java Tue Jan  2 08:17:22 2007
@@ -21,11 +21,12 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileSystemView;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * <code>CDUP &lt;CRLF&gt;</code><br>
@@ -45,14 +46,15 @@
      * Execute command.
      */
     public void execute(RequestHandler handler, 
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // change directory
-        FileSystemView fsview = request.getFileSystemView();
+        FileSystemView fsview = session.getFileSystemView();
         boolean success = false;
         try {
             success = fsview.changeDirectory("..");

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CWD.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CWD.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CWD.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/CWD.java Tue Jan  2 08:17:22 2007
@@ -21,11 +21,12 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileSystemView;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * <code>CWD  &lt;SP&gt; &lt;pathname&gt; &lt;CRLF&gt;</code><br>
@@ -45,11 +46,12 @@
      * Execute command
      */
     public void execute(RequestHandler handler, 
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // get new directory name
         String dirName = "/";
@@ -58,7 +60,7 @@
         } 
         
         // change directory
-        FileSystemView fsview = request.getFileSystemView();
+        FileSystemView fsview = session.getFileSystemView();
         boolean success = false;
         try {
             success = fsview.changeDirectory(dirName);

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/DELE.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/DELE.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/DELE.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/DELE.java Tue Jan  2 08:17:22 2007
@@ -22,11 +22,12 @@
 import java.io.IOException;
 
 import org.apache.commons.logging.Log;
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileObject;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.FtpletEnum;
 import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -48,11 +49,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state variables
-        request.resetState(); 
+        session.resetState(); 
         FtpServerContext serverContext = handler.getServerContext();
         
         // argument check
@@ -66,7 +68,7 @@
         Ftplet ftpletContainer = serverContext.getFtpletContainer();
         FtpletEnum ftpletRet;
         try {
-            ftpletRet = ftpletContainer.onDeleteStart(request, out);
+            ftpletRet = ftpletContainer.onDeleteStart(session, request, out);
         } catch(Exception e) {
             log.debug("Ftplet container threw exception", e);
             ftpletRet = FtpletEnum.RET_DISCONNECT;
@@ -84,7 +86,7 @@
         FileObject file = null;
         
         try {
-            file = request.getFileSystemView().getFileObject(fileName);
+            file = session.getFileSystemView().getFileObject(fileName);
         }
         catch(Exception ex) {
             log.debug("Could not get file " + fileName, ex);
@@ -107,7 +109,7 @@
             out.send(250, "DELE", fileName); 
             
             // log message
-            String userName = request.getUser().getName();
+            String userName = session.getUser().getName();
             Log log = serverContext.getLogFactory().getInstance(getClass());
             log.info("File delete : " + userName + " - " + fileName);
             
@@ -117,7 +119,7 @@
             
             // call Ftplet.onDeleteEnd() method
             try{
-                ftpletRet = ftpletContainer.onDeleteEnd(request, out);
+                ftpletRet = ftpletContainer.onDeleteEnd(session, request, out);
             } catch(Exception e) {
                 log.debug("Ftplet container threw exception", e);
                 ftpletRet = FtpletEnum.RET_DISCONNECT;

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPRT.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPRT.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPRT.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPRT.java Tue Jan  2 08:17:22 2007
@@ -23,9 +23,10 @@
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.interfaces.DataConnectionConfig;
 
 /**
@@ -45,11 +46,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // argument check
         String arg = request.getArgument();
@@ -93,7 +95,7 @@
         
         // check IP
         if(dataCfg.isActiveIpCheck()) {
-            InetAddress clientAddr = handler.getRequest().getRemoteAddress();
+            InetAddress clientAddr = session.getRemoteAddress();
             if(!dataAddr.equals(clientAddr)) {
                 out.send(510, "EPRT.mismatch", null);
                 return;
@@ -111,7 +113,7 @@
             return; 
         }
         
-        request.getFtpDataConnection().setPortCommand(dataAddr, dataPort);
+        session.getFtpDataConnection().setPortCommand(dataAddr, dataPort);
         out.send(200, "EPRT", null);
     }
 }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPSV.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPSV.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPSV.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/EPSV.java Tue Jan  2 08:17:22 2007
@@ -22,9 +22,10 @@
 import java.io.IOException;
 
 import org.apache.ftpserver.FtpDataConnection;
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * The EPSV command requests that a server listen on a data port and
@@ -47,14 +48,15 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request,
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // set data connection
-        FtpDataConnection dataCon = request.getFtpDataConnection();
+        FtpDataConnection dataCon = session.getFtpDataConnection();
         if (!dataCon.setPasvCommand()) {
             out.send(425, "EPSV", null);
             return;   

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/FEAT.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/FEAT.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/FEAT.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/FEAT.java Tue Jan  2 08:17:22 2007
@@ -21,10 +21,11 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 
 /**
  * The FEAT command (introduced in [RFC-2389]) allows servers with
@@ -38,11 +39,12 @@
 class FEAT extends AbstractCommand {
 
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
 
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         out.send(211, "FEAT", null);
     }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/HELP.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/HELP.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/HELP.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/HELP.java Tue Jan  2 08:17:22 2007
@@ -21,9 +21,10 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.interfaces.MessageResource;
 
 /**
@@ -44,11 +45,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
         
         // print global help
         if(!request.hasArgument()) {
@@ -59,7 +61,7 @@
         // print command specific help if available
         String ftpCmd = request.getArgument().toUpperCase();
         MessageResource resource = handler.getServerContext().getMessageResource();
-        if(resource.getMessage(214, ftpCmd, request.getLanguage()) == null) {
+        if(resource.getMessage(214, ftpCmd, session.getLanguage()) == null) {
             ftpCmd = null;
         }
         out.send(214, ftpCmd, null);

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LANG.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LANG.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LANG.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LANG.java Tue Jan  2 08:17:22 2007
@@ -21,10 +21,11 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.interfaces.MessageResource;
 
 /**
@@ -41,16 +42,17 @@
      * Execute command.
      */
     public void execute(RequestHandler handler, 
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state
-        request.resetState();
+        session.resetState();
         
         // default language
         String language = request.getArgument();
         if(language == null) {
-            request.setLanguage(null);
+            session.setLanguage(null);
             out.send(200, "LANG", null);
             return;
         }
@@ -62,7 +64,7 @@
         if(availableLanguages != null) {
             for(int i=0; i<availableLanguages.length; ++i) {
                 if(availableLanguages[i].equals(language)) {
-                    request.setLanguage(language);
+                    session.setLanguage(language);
                     out.send(200, "LANG", null);
                     return;
                 }

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LIST.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LIST.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LIST.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/LIST.java Tue Jan  2 08:17:22 2007
@@ -25,10 +25,11 @@
 import java.io.Writer;
 import java.net.SocketException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.listing.DirectoryLister;
 import org.apache.ftpserver.listing.LISTFileFormater;
 import org.apache.ftpserver.listing.ListArgument;
@@ -59,19 +60,20 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         try {
         
             // reset state variables
-            request.resetState();
+            session.resetState();
             
             // get data connection
             out.send(150, "LIST", null);
             OutputStream os = null;
             try {
-                os = request.getDataOutputStream();
+                os = session.getDataOutputStream();
             }
             catch(IOException ex) {
                 log.debug("Exception getting the output data stream", ex);
@@ -90,7 +92,7 @@
                 // parse argument
                 ListArgument parsedArg = ListArgumentParser.parse(request.getArgument());
                 
-                writer.write(directoryLister.listFiles(parsedArg, request.getFileSystemView(), LIST_FILE_FORMATER));
+                writer.write(directoryLister.listFiles(parsedArg, session.getFileSystemView(), LIST_FILE_FORMATER));
             }
             catch(SocketException ex) {
                 log.debug("Socket exception during list transfer", ex);
@@ -116,7 +118,7 @@
             }
         }
         finally {
-            request.getFtpDataConnection().closeDataSocket();
+            session.getFtpDataConnection().closeDataSocket();
         }
     }
 

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MD5.java Tue Jan  2 08:17:22 2007
@@ -25,10 +25,11 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileObject;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.util.IoUtils;
 
 /**
@@ -46,11 +47,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException {
         
         // reset state variables
-        request.resetState();
+        session.resetState();
 
         boolean isMMD5 = false;
         
@@ -81,11 +83,10 @@
             FileObject file = null;
             
             try {
-                file = request.getFileSystemView().getFileObject(fileName);
+                file = session.getFileSystemView().getFileObject(fileName);
             }
             catch(Exception ex) {
                 log.debug("Exception getting the file object: " + fileName, ex);
-                // TODO: handle exception
             }
             
             if(file == null) {

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MDTM.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MDTM.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MDTM.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MDTM.java Tue Jan  2 08:17:22 2007
@@ -21,11 +21,12 @@
 
 import java.io.IOException;
 
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileObject;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.util.DateUtils;
 
 /**
@@ -42,11 +43,12 @@
      * Execute command
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state
-        request.resetState();
+        session.resetState();
         
         // argument check
         String fileName = request.getArgument();
@@ -58,7 +60,7 @@
         // get file object
         FileObject file = null;
         try {
-            file = request.getFileSystemView().getFileObject(fileName);
+            file = session.getFileSystemView().getFileObject(fileName);
         }
         catch(Exception ex) {
             log.debug("Exception getting file object", ex);

Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MKD.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MKD.java?view=diff&rev=491831&r1=491830&r2=491831
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MKD.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/command/MKD.java Tue Jan  2 08:17:22 2007
@@ -22,11 +22,12 @@
 import java.io.IOException;
 
 import org.apache.commons.logging.Log;
-import org.apache.ftpserver.FtpRequestImpl;
+import org.apache.ftpserver.FtpSessionImpl;
 import org.apache.ftpserver.FtpWriter;
 import org.apache.ftpserver.RequestHandler;
 import org.apache.ftpserver.ftplet.FileObject;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.FtpletEnum;
 import org.apache.ftpserver.interfaces.FtpServerContext;
@@ -50,11 +51,12 @@
      * Execute command.
      */
     public void execute(RequestHandler handler,
-                        FtpRequestImpl request, 
+                        FtpRequest request, 
+                        FtpSessionImpl session, 
                         FtpWriter out) throws IOException, FtpException {
         
         // reset state
-        request.resetState(); 
+        session.resetState(); 
         FtpServerContext serverContext = handler.getServerContext();
         
         // argument check
@@ -68,7 +70,7 @@
         Ftplet ftpletContainer = serverContext.getFtpletContainer();
         FtpletEnum ftpletRet;
         try{
-            ftpletRet = ftpletContainer.onMkdirStart(request, out);
+            ftpletRet = ftpletContainer.onMkdirStart(session, request, out);
         } catch(Exception e) {
             log.debug("Ftplet container threw exception", e);
             ftpletRet = FtpletEnum.RET_DISCONNECT;
@@ -84,7 +86,7 @@
         // get file object
         FileObject file = null;
         try {
-            file = request.getFileSystemView().getFileObject(fileName);
+            file = session.getFileSystemView().getFileObject(fileName);
         }
         catch(Exception ex) {
             log.debug("Exception getting file object", ex);
@@ -112,7 +114,7 @@
             out.send(250, "MKD", fileName);
             
             // write log message
-            String userName = request.getUser().getName();
+            String userName = session.getUser().getName();
             Log log = serverContext.getLogFactory().getInstance(getClass());
             log.info("Directory create : " + userName + " - " + fileName);
             
@@ -122,7 +124,7 @@
             
             // call Ftplet.onMkdirEnd() method
             try{
-                ftpletRet = ftpletContainer.onMkdirEnd(request, out);
+                ftpletRet = ftpletContainer.onMkdirEnd(session, request, out);
             } catch(Exception e) {
                 log.debug("Ftplet container threw exception", e);
                 ftpletRet = FtpletEnum.RET_DISCONNECT;