Author: norman
Date: Mon Aug 10 19:38:31 2009
New Revision: 802913
URL: http://svn.apache.org/viewvc?rev=802913&view=rev
Log:
start to fix listener bindings
Modified:
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
Modified:
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
---
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
(original)
+++
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
Mon Aug 10 19:38:31 2009
@@ -30,6 +30,8 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.james.smtpserver.core.CoreCmdHandlerLoader;
+import org.apache.james.smtpserver.core.HeloCmdHandler;
+import org.apache.james.smtpserver.core.PostHeloListener;
import org.apache.james.smtpserver.core.SendMailHandler;
import org.apache.james.smtpserver.core.UnknownCmdHandler;
@@ -52,6 +54,7 @@
private HashMap commandHandlerMap = new HashMap();
private ArrayList messageHandlers = new ArrayList();
private ArrayList connectHandlers = new ArrayList();
+ private ArrayList listeners = new ArrayList();
private final CommandHandler unknownHandler = new UnknownCmdHandler();
private ServiceManager serviceManager;
@@ -119,6 +122,30 @@
addHandler(null, SendMailHandler.class.getName()));
}
}
+
+ if (configuration != null) {
+ Configuration[] children = configuration.getChildren("listener");
+ ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
+
+
+ // load the configured listener
+ if (children != null) {
+ for (int i = 0; i < children.length; i++) {
+ String className = children[i].getAttribute("class");
+ if (className != null) {
+ // load the listener
+ loadClass(classLoader, className, children[i]);
+
+ }
+ }
+
+ // load the BaseCmdHandler and SendMailHandler
+ loadClass(classLoader, CoreCmdHandlerLoader.class.getName(),
+ addHandler(null,
CoreCmdHandlerLoader.class.getName()));
+ loadClass(classLoader, SendMailHandler.class.getName(),
+ addHandler(null, SendMailHandler.class.getName()));
+ }
+ }
// the size must be greater than 1 because we added UnknownCmdHandler
to
// the map
@@ -173,6 +200,7 @@
ContainerUtil.initialize(h2.next());
}
}
+ bindListeners();
}
/**
@@ -261,6 +289,13 @@
getLogger().info("Added MessageHandler: " + className);
}
}
+
+ if (handler instanceof PostHeloListener) {
+ listeners.add(handler);
+ if (getLogger().isInfoEnabled()) {
+ getLogger().info("Added PostHeloListener: " + className);
+ }
+ }
} catch (ClassNotFoundException ex) {
if (getLogger().isErrorEnabled()) {
getLogger().error("Failed to add Commandhandler: " + className,
@@ -291,6 +326,27 @@
+ className, e);
}
}
+
+ private void bindListeners() {
+ Iterator it = commandHandlerMap.entrySet().iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ Iterator listenerIt = listeners.iterator();
+
+ if (obj instanceof HeloCmdHandler) {
+ while (listenerIt.hasNext()) {
+ Object listener = listenerIt.next();
+ if (listener instanceof PostHeloListener) {
+ ((HeloCmdHandler)
obj).addListener((PostHeloListener) listener);
+ if (getLogger().isInfoEnabled()) {
+ getLogger().info("Bind
PostHeloListener " + listener.getClass().getName() + " to handler " +
obj.getClass().getName());
+ }
+
+ }
+ }
+ }
+ }
+ }
/**
* Return a DefaultConfiguration build on the given command name and
classname
@@ -306,6 +362,7 @@
return cmdConf;
}
+
/**
* Add it to map (key as command name, value is an array list of
commandhandlers)
*
Modified:
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
---
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
(original)
+++
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/AbstractCmdHandler.java
Mon Aug 10 19:38:31 2009
@@ -13,8 +13,12 @@
}
public void setListener(List<Listener> listeners) {
- listeners.addAll(this.listeners);
this.listeners = listeners;
+ listeners.add(getLastListener());
+ }
+
+ public void addListener(Listener listener) {
+ listeners.add(listeners.size() -1,listener);
}
protected abstract Listener getLastListener();
Modified:
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
---
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
(original)
+++
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/main/java/org/apache/james/smtpserver/core/SendMailHandler.java
Mon Aug 10 19:38:31 2009
@@ -77,8 +77,7 @@
@Override
protected PostDataListener getLastListener() {
- // TODO Auto-generated method stub
- return null;
+ return this;
}
public String onData(SMTPSession session, Mail mail) {
Modified:
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java?rev=802913&r1=802912&r2=802913&view=diff
==============================================================================
---
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
(original)
+++
james/server/sandbox/active/smtp_refactor/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
Mon Aug 10 19:38:31 2009
@@ -184,9 +184,7 @@
if (m_heloResolv || m_ehloResolv) {
- DefaultConfiguration d = createHandler(
- ResolvableEhloHeloHandler.class.getName(), null);
- d.setAttribute("command", "EHLO,HELO,RCPT");
+ DefaultConfiguration d =
createListener(ResolvableEhloHeloHandler.class.getName());
d.addChild(Util.getValuedConfiguration("checkAuthNetworks",
m_checkAuthNetworks + ""));
config.addChild(d);
@@ -232,5 +230,11 @@
d.setAttribute("class", className);
return d;
}
-
+
+ private DefaultConfiguration createListener(String className) {
+ DefaultConfiguration d = new DefaultConfiguration("handler");
+
+ d.setAttribute("class", className);
+ return d;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]