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]