Author: norman
Date: Fri Jan 29 11:48:29 2010
New Revision: 904471

URL: http://svn.apache.org/viewvc?rev=904471&view=rev
Log:
Share some more code / close session on idle

Modified:
    
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractIoHandler.java
    
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/AbstractResponseFilter.java
    
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/mina/filter/POP3ResponseFilter.java
    
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/SMTPResponseFilter.java

Modified: 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractIoHandler.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractIoHandler.java?rev=904471&r1=904470&r2=904471&view=diff
==============================================================================
--- 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractIoHandler.java
 (original)
+++ 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractIoHandler.java
 Fri Jan 29 11:48:29 2010
@@ -28,6 +28,7 @@
 import org.apache.james.api.protocol.ProtocolHandlerChain;
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
 
 /**
@@ -72,6 +73,12 @@
         session.setAttribute(getSessionKey(), createSession(session));
     }
 
+    
+    @Override
+    public void sessionIdle(IoSession session, IdleStatus status) throws 
Exception {
+        session.close(false);
+    }
+
     /**
      * Create a new "protocol" session 
      * 

Modified: 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/AbstractResponseFilter.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/AbstractResponseFilter.java?rev=904471&r1=904470&r2=904471&view=diff
==============================================================================
--- 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/AbstractResponseFilter.java
 (original)
+++ 
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/filter/AbstractResponseFilter.java
 Fri Jan 29 11:48:29 2010
@@ -19,28 +19,50 @@
 
 package org.apache.james.socket.mina.filter;
 
+import org.apache.james.api.protocol.Response;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
 import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.DefaultWriteRequest;
 import org.apache.mina.core.write.WriteRequest;
 
-
 public abstract class AbstractResponseFilter extends IoFilterAdapter {
 
-    protected abstract String getCloseAttribute();
+    public final void filterWrite(NextFilter nextFilter, IoSession session, 
WriteRequest writeRequest) throws Exception {
+        Object obj = writeRequest.getMessage();
+        if (obj != null && obj instanceof Response) {
 
-    /**
-     * @see 
org.apache.mina.core.filterchain.IoFilterAdapter#messageSent(org.apache.mina.core.filterchain.IoFilter.NextFilter,
-     *      org.apache.mina.core.session.IoSession,
-     *      org.apache.mina.core.write.WriteRequest)
-     */
-    public void messageSent(NextFilter nextFilter, IoSession session, 
WriteRequest writeRequest) throws Exception {
-        super.messageSent(nextFilter, session, writeRequest);
-        if (session.containsAttribute(getCloseAttribute())) {
-            // Close the session if no more scheduled writes are there.
-            if (session.getScheduledWriteMessages() == 0) {
-                session.close(true);
+            Response response = (Response) writeRequest.getMessage();
+
+            processResponse(nextFilter, session, response);
+
+            if (response.isEndSession()) {
+                session.close(false);
             }
+
+        } else {
+            super.filterWrite(nextFilter, session, writeRequest);
         }
+
+    }
+
+    /**
+     * Process the response
+     * 
+     * @param nextFilter
+     * @param session
+     * @param response
+     */
+    protected abstract void processResponse(NextFilter nextFilter, IoSession 
session, Response response);
+
+    /**
+     * Write the response to the client
+     * 
+     * @param nextFilter
+     * @param session
+     * @param response
+     */
+    protected void writeResponse(NextFilter nextFilter, IoSession session, 
String response) {
+        nextFilter.filterWrite(session, new DefaultWriteRequest(response));
     }
 
 }

Modified: 
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/mina/filter/POP3ResponseFilter.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/mina/filter/POP3ResponseFilter.java?rev=904471&r1=904470&r2=904471&view=diff
==============================================================================
--- 
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/mina/filter/POP3ResponseFilter.java
 (original)
+++ 
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/mina/filter/POP3ResponseFilter.java
 Fri Jan 29 11:48:29 2010
@@ -19,51 +19,34 @@
 
 package org.apache.james.pop3server.mina.filter;
 
+import org.apache.james.api.protocol.Response;
 import org.apache.james.pop3server.POP3Response;
 import org.apache.james.socket.mina.filter.AbstractResponseFilter;
 import org.apache.mina.core.session.IoSession;
-import org.apache.mina.core.write.DefaultWriteRequest;
-import org.apache.mina.core.write.WriteRequest;
 
 public class POP3ResponseFilter extends AbstractResponseFilter {
+    
+    public final static String NAME = "pop3ResponseFilter";
 
-    private static final String SCHEDULE_CLOSE_ATTRIBUTE = 
POP3ResponseFilter.class.getName() + ".closeAttribute";
-
-    @Override
-    protected String getCloseAttribute() {
-        return SCHEDULE_CLOSE_ATTRIBUTE;
-    }
-
-    /**
-     * @see 
org.apache.mina.core.filterchain.IoFilterAdapter#filterWrite(org.apache.mina.core.filterchain.IoFilter.NextFilter,
-     *      org.apache.mina.core.session.IoSession,
-     *      org.apache.mina.core.write.WriteRequest)
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.socket.mina.filter.AbstractResponseFilter#processResponse(org.apache.mina.core.filterchain.IoFilter.NextFilter,
 org.apache.mina.core.session.IoSession, org.apache.james.api.protocol.Response)
      */
-    public void filterWrite(NextFilter nextFilter, IoSession session, 
WriteRequest writeRequest) throws Exception {
+    protected void processResponse(NextFilter nextFilter, IoSession session, 
Response rawresponse) {
+        POP3Response response = (POP3Response) rawresponse;
+        for (int k = 0; k < response.getLines().size(); k++) {
+            StringBuffer respBuff = new StringBuffer(256);
+            if (k == 0) {
+                respBuff.append(response.getRetCode());
+                respBuff.append(" ");
+                respBuff.append(response.getLines().get(k));
 
-        if (writeRequest.getMessage() instanceof POP3Response) {
-            POP3Response response = (POP3Response) writeRequest.getMessage();
-            if (response != null) {
-                for (int k = 0; k < response.getLines().size(); k++) {
-                    StringBuffer respBuff = new StringBuffer(256);
-                    if (k == 0) {
-                        respBuff.append(response.getRetCode());
-                        respBuff.append(" ");
-                        respBuff.append(response.getLines().get(k));
-
-                    } else {
-                        respBuff.append(response.getLines().get(k));
-                    }
-                    nextFilter.filterWrite(session, new 
DefaultWriteRequest(respBuff.toString()));
-                }
-
-                if (response.isEndSession()) {
-                    session.setAttribute(getCloseAttribute());
-                }
+            } else {
+                respBuff.append(response.getLines().get(k));
             }
-        } else {
-            super.filterWrite(nextFilter, session, writeRequest);
+            writeResponse(nextFilter, session, respBuff.toString());
         }
 
     }
+
 }

Modified: 
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/SMTPResponseFilter.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/SMTPResponseFilter.java?rev=904471&r1=904470&r2=904471&view=diff
==============================================================================
--- 
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/SMTPResponseFilter.java
 (original)
+++ 
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/filter/SMTPResponseFilter.java
 Fri Jan 29 11:48:29 2010
@@ -18,61 +18,39 @@
  ****************************************************************/
 package org.apache.james.smtpserver.mina.filter;
 
+import org.apache.james.api.protocol.Response;
 import org.apache.james.smtpserver.protocol.SMTPResponse;
 import org.apache.james.socket.mina.filter.AbstractResponseFilter;
 import org.apache.mina.core.session.IoSession;
-import org.apache.mina.core.write.DefaultWriteRequest;
-import org.apache.mina.core.write.WriteRequest;
-
 
 /**
- * Filter to convert SMTPResponse to String Objects
+ * Filter to convert SMTPResponse to String Objects and write them 
  * 
  */
 public class SMTPResponseFilter extends AbstractResponseFilter {
-   
-    private static final String SCHEDULE_CLOSE_ATTRIBUTE = 
SMTPResponseFilter.class.getName() + ".closeAttribute";
 
     public final static String NAME = "smtpResponseFilter";
 
-    /**
-     * @see 
org.apache.mina.core.filterchain.IoFilterAdapter#filterWrite(org.apache.mina.core.filterchain.IoFilter.NextFilter,
 org.apache.mina.core.session.IoSession, 
org.apache.mina.core.write.WriteRequest)
+    /*
+     * (non-Javadoc)
+     * @see 
org.apache.james.socket.mina.filter.AbstractResponseFilter#processResponse(org.apache.mina.core.filterchain.IoFilter.NextFilter,
 org.apache.mina.core.session.IoSession, org.apache.james.api.protocol.Response)
      */
-    public void filterWrite(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
+    protected void processResponse(NextFilter nextFilter, IoSession session, 
Response rawResponse) {
+        SMTPResponse response = (SMTPResponse) rawResponse;
+        for (int k = 0; k < response.getLines().size(); k++) {
+            StringBuffer respBuff = new StringBuffer(256);
+            respBuff.append(response.getRetCode());
+            if (k == response.getLines().size() - 1) {
+                respBuff.append(" ");
+                respBuff.append(response.getLines().get(k));
+
+            } else {
+                respBuff.append("-");
+                respBuff.append(response.getLines().get(k));
 
-        if (writeRequest.getMessage() instanceof SMTPResponse) {
-            SMTPResponse response = (SMTPResponse) writeRequest.getMessage();
-            if (response != null) {
-                for (int k = 0; k < response.getLines().size(); k++) {
-                    StringBuffer respBuff = new StringBuffer(256);
-                    respBuff.append(response.getRetCode());
-                    if (k == response.getLines().size() - 1) {
-                        respBuff.append(" ");
-                        respBuff.append(response.getLines().get(k));
-                        nextFilter.filterWrite(session,
-                                new DefaultWriteRequest(respBuff.toString()));
-                    } else {
-                        respBuff.append("-");
-                        respBuff.append(response.getLines().get(k));
-                        nextFilter.filterWrite(session,
-                                new DefaultWriteRequest(respBuff.toString()));
-                    }
-                }
-
-                if (response.isEndSession()) {
-                    session.setAttribute(getCloseAttribute());
-                }
             }
-        } else {
-            super.filterWrite(nextFilter, session, writeRequest);
+            writeResponse(nextFilter, session, respBuff.toString());
         }
-
     }
 
-       @Override
-       protected String getCloseAttribute() {
-               return SCHEDULE_CLOSE_ATTRIBUTE;
-       }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to