Hi

Here is a little patch on the core that adds the possibility to add a
ConnectionObserver on the RequestHandler via configuration.

Also comes with a simple ConsoleConnetionObserver

---------------------

Index:
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/FtpConfigImpl.java
===================================================================
---
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/FtpConfigImpl.java
   (revision
471166)
+++
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/FtpConfigImpl.java
   (working
copy)
@@ -29,6 +29,7 @@
 import org.apache.ftpserver.ftplet.FtpStatistics;
 import org.apache.ftpserver.ftplet.Ftplet;
 import org.apache.ftpserver.ftplet.UserManager;
+import org.apache.ftpserver.interfaces.ConnectionObserver;
 import org.apache.ftpserver.interfaces.ICommandFactory;
 import org.apache.ftpserver.interfaces.IConnectionManager;
 import org.apache.ftpserver.interfaces.IDataConnectionConfig;
@@ -59,6 +60,7 @@
     private FtpletContainer ftpletContainer;
     private IFtpStatistics statistics;
     private ICommandFactory commandFactory;
+    private ConnectionObserver connectionObserver;

     private Log log;

@@ -85,7 +87,8 @@
             fileSystemManager = (FileSystemManager)    
createComponent(conf, "file-system-manager",
"org.apache.ftpserver.filesystem.NativeFileSystemManager");
             statistics        = (IFtpStatistics)       
createComponent(conf, "statistics",         
"org.apache.ftpserver.FtpStatisticsImpl");
             commandFactory    = (ICommandFactory)      
createComponent(conf, "command-factory",    
"org.apache.ftpserver.CommandFactory");
-
+            connectionObserver =
(ConnectionObserver)    createInstance(conf, "connection-observer", null);
+
             // create user if necessary
             boolean userCreate = conf.getBoolean("create-default-user",
true);
             if(userCreate) {
@@ -121,6 +124,23 @@
     }

     /**
+     * Create instance.
+     */
+    private Object createInstance(Configuration parentConfig, String
configName, String defaultClass) throws Exception {
+
+        // get configuration subset
+        Configuration conf = parentConfig.subset(configName);
+
+        // create and configure component
+        String className = conf.getString("class", defaultClass);
+        if(className == null)
+               return null;
+
+        Object obj = Class.forName(className).newInstance();
+        return obj;
+    }
+
+    /**
      * Create default users.
      */
     private void createDefaultUsers() throws Exception {
@@ -240,6 +260,13 @@
     }

     /**
+     * Get the ConnectionObserver
+     */
+       public ConnectionObserver getConnectionObserver() {
+               return connectionObserver;
+       }
+
+       /**
      * Get server address.
      */
     public InetAddress getServerAddress() {
Index:
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/interfaces/IFtpConfig.java
===================================================================
---
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/interfaces/IFtpConfig.java
   (revision
471166)
+++
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/interfaces/IFtpConfig.java
   (working
copy)
@@ -65,6 +65,11 @@
      * Get the command factory.
      */
     ICommandFactory getCommandFactory();
+
+    /**
+     * Get the ConnectionObserver
+     */
+    ConnectionObserver getConnectionObserver();

     /**
      * Release all components.
Index:
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/RequestHandler.java
===================================================================
---
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/RequestHandler.java
  (revision
471166)
+++
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/RequestHandler.java
  (working
copy)
@@ -188,7 +188,8 @@
         }
         try {

-            // write log message
+               this.setObserver(fconfig.getConnectionObserver());
+               // write log message
             String hostAddress = clientAddr.getHostAddress();
             log.info("Open connection - " + hostAddress);

Index:
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/util/ConsoleConnectionObserver.java
===================================================================
---
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/util/ConsoleConnectionObserver.java
  (revision
0)
+++
C:/opensource/projects/apache-ftpserver-core/src/java/org/apache/ftpserver/util/ConsoleConnectionObserver.java
  (revision
0)
@@ -0,0 +1,22 @@
+package org.apache.ftpserver.util;
+
+import org.apache.ftpserver.interfaces.ConnectionObserver;
+
+public class ConsoleConnectionObserver implements ConnectionObserver {
+
+       public ConsoleConnectionObserver()
+       {
+               // empty
+       }
+
+       public void request(String msg)
+       {
+               System.out.print("> " + msg);
+       }
+
+       public void response(String msg)
+       {
+               System.out.print("< " + msg);
+       }
+
+}
Index: C:/opensource/projects/apache-ftpserver-core/res/conf/ftpd.properties
===================================================================
---
C:/opensource/projects/apache-ftpserver-core/res/conf/ftpd.properties   
(revision
471166)
+++
C:/opensource/projects/apache-ftpserver-core/res/conf/ftpd.properties   (working
copy)
@@ -67,6 +67,10 @@
 #config.data-connection.ssl.client-authentication=false
 #config.data-connection.ssl.key-password=password

+##------------------------------------------------------------------------------
+## Connection observer
+##------------------------------------------------------------------------------
+config.connection-observer.class=org.apache.ftpserver.util.ConsoleConnectionObserver

 ##-----------------------------------------------------------------------------
 ## Standard users admin and anonymous will be created by default.


Reply via email to