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.