Author: norman
Date: Mon Nov 28 08:04:03 2011
New Revision: 1207004
URL: http://svn.apache.org/viewvc?rev=1207004&view=rev
Log:
Allow to override logic for request parsing
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java?rev=1207004&r1=1207003&r2=1207004&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
Mon Nov 28 08:04:03 2011
@@ -19,7 +19,6 @@
package org.apache.james.protocols.api.handler;
-import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -31,6 +30,7 @@ import java.util.Locale;
import org.apache.james.protocols.api.BaseRequest;
import org.apache.james.protocols.api.FutureResponse;
import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -127,27 +127,16 @@ public abstract class AbstractCommandDis
* @see
org.apache.james.protocols.api.handler.LineHandler#onLine(ProtocolSession,
byte[])
*/
public Response onLine(final Session session, byte[] line) {
- String curCommandName = null;
- String curCommandArgument = null;
- String cmdString;
+
try {
- cmdString = new String(line, getLineDecodingCharset()).trim();
- int spaceIndex = cmdString.indexOf(" ");
- if (spaceIndex > 0) {
- curCommandName = cmdString.substring(0, spaceIndex);
- curCommandArgument = cmdString.substring(spaceIndex + 1);
- } else {
- curCommandName = cmdString;
- }
- curCommandName = curCommandName.toUpperCase(Locale.US);
-
+
+ Request request = parseRequest(session, line);
if (session.getLogger().isDebugEnabled()) {
- session.getLogger().debug(getClass().getName() + " received: "
+ cmdString);
+ session.getLogger().debug(getClass().getName() + " received: "
+ request.getCommand());
}
- List<CommandHandler<Session>> commandHandlers =
getCommandHandlers(curCommandName, session);
+ List<CommandHandler<Session>> commandHandlers =
getCommandHandlers(request.getCommand(), session);
// fetch the command handlers registered to the command
- BaseRequest request = new BaseRequest(curCommandName,
curCommandArgument);
Iterator<CommandHandler<Session>> handlers =
commandHandlers.iterator();
while (handlers.hasNext()) {
@@ -172,15 +161,46 @@ public abstract class AbstractCommandDis
}
}
- } catch (UnsupportedEncodingException e) {
- // Should never happen !
- e.printStackTrace();
+ return null;
+ } catch (Exception e) {
+ session.getLogger().debug("Unable to parse request", e);
+ return session.newFatalErrorResponse();
}
- return null;
}
+ /**
+ * Parse the line into a {@link Request}
+ *
+ * @param session
+ * @param line
+ * @return request
+ * @throws Exception
+ */
+ protected Request parseRequest(Session session, byte[] line) throws
Exception {
+ String curCommandName = null;
+ String curCommandArgument = null;
+ String cmdString = new String(line, getLineDecodingCharset()).trim();
+ int spaceIndex = cmdString.indexOf(" ");
+ if (spaceIndex > 0) {
+ curCommandName = cmdString.substring(0, spaceIndex);
+ curCommandArgument = cmdString.substring(spaceIndex + 1);
+ } else {
+ curCommandName = cmdString;
+ }
+ curCommandName = curCommandName.toUpperCase(Locale.US);
+
+ if (session.getLogger().isDebugEnabled()) {
+ session.getLogger().debug(getClass().getName() + " received: " +
cmdString);
+ }
+
+ BaseRequest request = new BaseRequest(curCommandName,
curCommandArgument);
+ return request;
+
+ }
+
+
protected String getLineDecodingCharset() {
return "US-ASCII";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]