You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ba...@apache.org on 2008/08/25 11:48:30 UTC
svn commit: r688688 [1/3] - in /james/server/trunk:
avalon-socket-library/src/main/java/org/apache/james/socket/
nntpserver-function/src/main/java/org/apache/james/nntpserver/
phoenix-deployment/src/java/org/apache/james/experimental/imapserver/
pop3se...
Author: bago
Date: Mon Aug 25 02:48:29 2008
New Revision: 688688
URL: http://svn.apache.org/viewvc?rev=688688&view=rev
Log:
Refactored all of our services/handlers to use delegation.
The interfaces will need much more care, but at least they are now functionally delegated.
As a first step I preferred to keep the diff as short as possible to avoid introducing bugs.
Removed:
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/DelegatingSMTPServer.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPProtocolHandler.java
Modified:
james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractJamesService.java
james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/DelegatingJamesHandler.java
james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandler.java
james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandlerHelper.java
james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPHandler.java
james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPServer.java
james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java
james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapServer.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Server.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManager.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandlerChain.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServer.java
Modified: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractJamesService.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractJamesService.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractJamesService.java (original)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/AbstractJamesService.java Mon Aug 25 02:48:29 2008
@@ -571,14 +571,14 @@
getLogger().info(logString);
if (connectionLimit != null) {
- theHandlerPool = new HardResourceLimitingPool((ObjectFactory) this, 5, connectionLimit.intValue());
+ theHandlerPool = new HardResourceLimitingPool(this, 5, connectionLimit.intValue());
if (getLogger().isDebugEnabled()) {
getLogger().debug("Using a bounded pool for "+getServiceType()+" handlers with upper limit " + connectionLimit.intValue());
}
} else {
// NOTE: The maximum here is not a real maximum. The handler pool will continue to
// provide handlers beyond this value.
- theHandlerPool = new DefaultPool((ObjectFactory) this, null, 5, 30);
+ theHandlerPool = new DefaultPool(this, null, 5, 30);
getLogger().debug("Using an unbounded pool for "+getServiceType()+" handlers.");
}
}
@@ -783,5 +783,22 @@
ContainerUtil.service(conn, componentManager);
return conn;
}
+
+ /**
+ * @see org.apache.avalon.excalibur.pool.ObjectFactory#newInstance()
+ */
+ public Object newInstance() throws Exception {
+ return new DelegatingJamesHandler(newProtocolHandlerInstance());
+ }
+
+ protected abstract ProtocolHandler newProtocolHandlerInstance();
+
+ /**
+ * @see org.apache.avalon.excalibur.pool.ObjectFactory#getCreatedClass()
+ */
+ public Class getCreatedClass() {
+ return DelegatingJamesHandler.class;
+ }
+
}
Modified: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/DelegatingJamesHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/DelegatingJamesHandler.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/DelegatingJamesHandler.java (original)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/DelegatingJamesHandler.java Mon Aug 25 02:48:29 2008
@@ -24,6 +24,9 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
/**
* Common Handler code
@@ -62,6 +65,22 @@
*/
public void resetHandler() {
protocolHandler.resetHandler();
+ remoteHost = null;
+ remoteIP = null;
+ }
+
+ /**
+ * @see org.apache.james.socket.AbstractJamesHandler#errorHandler(java.lang.RuntimeException)
+ */
+ protected void errorHandler(RuntimeException e) {
+ protocolHandler.errorHandler(e);
+ }
+
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#defaultErrorHandler(java.lang.RuntimeException)
+ */
+ public void defaultErrorHandler(RuntimeException e) {
+ super.errorHandler(e);
}
/**
@@ -71,32 +90,60 @@
return remoteIP;
}
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getInputReader()
+ */
public CRLFTerminatedReader getInputReader() {
return inReader;
}
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getInputStream()
+ */
public InputStream getInputStream() {
return in;
}
- public String getRemoteHost() {
- return remoteHost;
- }
-
- public Watchdog getWatchdog() {
- return getWatchdog();
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getOutputStream()
+ */
+ public OutputStream getOutputStream() {
+ return outs;
}
- public void setRemoteHost(String host) {
- remoteHost = host;
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getOutputWriter()
+ */
+ public PrintWriter getOutputWriter() {
+ return out;
}
- public void setRemoteIP(String ip) {
- remoteIP = ip;
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getRemoteHost()
+ */
+ public String getRemoteHost() {
+ return remoteHost;
}
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getAvalonLogger()
+ */
public Logger getAvalonLogger() {
return getLogger();
}
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getWatchdog()
+ */
+ public Watchdog getWatchdog() {
+ return theWatchdog;
+ }
+
+ /**
+ * @see org.apache.james.socket.ProtocolHandlerHelper#getSocket()
+ */
+ public Socket getSocket() {
+ return socket;
+ }
+
}
Modified: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandler.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandler.java (original)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandler.java Mon Aug 25 02:48:29 2008
@@ -44,6 +44,16 @@
public abstract void resetHandler();
+ /**
+ * Injects the ProtocolHandlerHelper service
+ * @param phh service
+ */
public void setProtocolHandlerHelper(ProtocolHandlerHelper phh);
+ /**
+ * Provides errorHandling
+ * @param e exception
+ */
+ public abstract void errorHandler(RuntimeException e);
+
}
\ No newline at end of file
Modified: james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandlerHelper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandlerHelper.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandlerHelper.java (original)
+++ james/server/trunk/avalon-socket-library/src/main/java/org/apache/james/socket/ProtocolHandlerHelper.java Mon Aug 25 02:48:29 2008
@@ -24,27 +24,86 @@
import org.apache.james.util.watchdog.Watchdog;
import java.io.InputStream;
-
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.Socket;
+
+/**
+ * This is the helper interface provided to ProtocolHandlers to let them
+ * communicate with the outside world.
+ */
public interface ProtocolHandlerHelper {
+ /**
+ * Writes a response to the client and flush it.
+ * @param responseString the response string
+ */
public void writeLoggedFlushedResponse(String responseString);
+ /**
+ * Writes a response to the client without flushing.
+ * @param responseString the response string
+ */
public void writeLoggedResponse(String responseString);
+ /**
+ * The watchdog is used to deal with timeouts.
+ * @return the watchdog instance
+ */
public Watchdog getWatchdog();
+ /**
+ * Provides logging facility to the handler.
+ * @return logger instance
+ */
public Logger getAvalonLogger();
- public void setRemoteHost(String host);
-
- public void setRemoteIP(String ip);
-
+ /**
+ * getter for the remote hostname
+ * @return remote hostname
+ */
public String getRemoteHost();
+ /**
+ * getter for the remote ip
+ * @return remote ip
+ */
public String getRemoteIP();
+ /**
+ * Returns a CRLF terminated line reader
+ * @return line reader
+ */
public CRLFTerminatedReader getInputReader();
+ /**
+ * Returns the raw input stream
+ * @return the raw inputstream
+ */
public InputStream getInputStream();
+
+ /**
+ * Returns the raw outputstream
+ * @return outputstream
+ */
+ public OutputStream getOutputStream();
+
+ /**
+ * Returns the printwriter.
+ * @return the output printwriter
+ */
+ public PrintWriter getOutputWriter();
+
+ /**
+ * Provides basic errorhandling cleanup.
+ * @param e the runtimeexception
+ */
+ public void defaultErrorHandler(RuntimeException e);
+
+ /**
+ * Provides access to the socket
+ * @return socket
+ */
+ public Socket getSocket();
}
\ No newline at end of file
Modified: james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPHandler.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPHandler.java (original)
+++ james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPHandler.java Mon Aug 25 02:48:29 2008
@@ -24,7 +24,8 @@
import org.apache.james.core.MailHeaders;
import org.apache.james.nntpserver.repository.NNTPArticle;
import org.apache.james.nntpserver.repository.NNTPGroup;
-import org.apache.james.socket.AbstractJamesHandler;
+import org.apache.james.socket.ProtocolHandler;
+import org.apache.james.socket.ProtocolHandlerHelper;
import org.apache.james.util.stream.CharTerminatedInputStream;
import org.apache.james.util.stream.DotStuffingInputStream;
import org.apache.james.util.stream.ExtraDotOutputStream;
@@ -54,8 +55,9 @@
*
* Common NNTP extensions are in RFC 2980.
*/
-public class NNTPHandler
- extends AbstractJamesHandler {
+public class NNTPHandler implements ProtocolHandler {
+
+ private ProtocolHandlerHelper helper;
/**
* used to calculate DATE from - see 11.3
@@ -263,7 +265,7 @@
/**
* @see org.apache.james.socket.AbstractJamesHandler#handleProtocol()
*/
- protected void handleProtocol() throws IOException {
+ public void handleProtocol() throws IOException {
// section 7.1
if ( theConfigData.getNNTPRepository().isReadOnly() ) {
StringBuffer respBuffer =
@@ -271,35 +273,35 @@
.append("201 ")
.append(theConfigData.getHelloName())
.append(" NNTP Service Ready, posting prohibited");
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
} else {
StringBuffer respBuffer =
new StringBuffer(128)
.append("200 ")
.append(theConfigData.getHelloName())
.append(" NNTP Service Ready, posting permitted");
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
- theWatchdog.start();
- while (parseCommand(inReader.readLine())) {
- theWatchdog.reset();
+ helper.getWatchdog().start();
+ while (parseCommand(helper.getInputReader().readLine())) {
+ helper.getWatchdog().reset();
}
- theWatchdog.stop();
+ helper.getWatchdog().stop();
- getLogger().info("Connection closed");
+ helper.getAvalonLogger().info("Connection closed");
}
/**
* @see org.apache.james.socket.AbstractJamesHandler#errorHandler(java.lang.RuntimeException)
*/
- protected void errorHandler(RuntimeException e) {
- super.errorHandler(e);
+ public void errorHandler(RuntimeException e) {
+ helper.defaultErrorHandler(e);
// If the connection has been idled out, the
// socket will be closed and null. Do NOT
// log the exception or attempt to send the
// closing connection message
- if (socket != null) {
+ if (helper.getSocket() != null) {
try {
doQUIT(null);
} catch (Throwable t) {}
@@ -309,7 +311,7 @@
/**
* @see org.apache.james.socket.AbstractJamesHandler#resetHandler
*/
- protected void resetHandler() {
+ public void resetHandler() {
// Clear the selected group, article info
group = null;
currentArticleNumber = -1;
@@ -339,8 +341,8 @@
if (commandRaw == null) {
return false;
}
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Command received: " + commandRaw);
+ if (helper.getAvalonLogger().isDebugEnabled()) {
+ helper.getAvalonLogger().debug("Command received: " + commandRaw);
}
String command = commandRaw.trim();
@@ -354,8 +356,8 @@
boolean returnValue = true;
if (!isAuthorized(command) ) {
- writeLoggedFlushedResponse("480 User is not authenticated");
- getLogger().debug("Command not allowed.");
+ helper.writeLoggedFlushedResponse("480 User is not authenticated");
+ helper.getAvalonLogger().debug("Command not allowed.");
return returnValue;
}
if ((command.equals(COMMAND_MODE)) && (argument != null)) {
@@ -364,7 +366,7 @@
} else if (argument.toUpperCase(Locale.US).equals(MODE_TYPE_STREAM)) {
doMODESTREAM(argument);
} else {
- writeLoggedFlushedResponse("500 Command not understood");
+ helper.writeLoggedFlushedResponse("500 Command not understood");
}
} else if ( command.equals(COMMAND_LIST)) {
doLIST(argument);
@@ -426,16 +428,16 @@
* @param argument the argument passed in with the command
*/
private void doUnknownCommand(String command, String argument) {
- if (getLogger().isDebugEnabled()) {
+ if (helper.getAvalonLogger().isDebugEnabled()) {
StringBuffer logBuffer =
new StringBuffer(128)
.append("Received unknown command ")
.append(command)
.append(" with argument ")
.append(argument);
- getLogger().debug(logBuffer.toString());
+ helper.getAvalonLogger().debug(logBuffer.toString());
}
- writeLoggedFlushedResponse("500 Unknown command");
+ helper.writeLoggedFlushedResponse("500 Unknown command");
}
/**
@@ -456,29 +458,29 @@
}
}
if (command == null) {
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
command = command.toUpperCase(Locale.US);
if ( command.equals(AUTHINFO_PARAM_USER) ) {
// Reject re-authentication
if ( isAlreadyAuthenticated ) {
- writeLoggedFlushedResponse("482 Already authenticated - rejecting new credentials");
+ helper.writeLoggedFlushedResponse("482 Already authenticated - rejecting new credentials");
}
// Reject doubly sent user
if (user != null) {
user = null;
password = null;
isAlreadyAuthenticated = false;
- writeLoggedFlushedResponse("482 User already specified - rejecting new user");
+ helper.writeLoggedFlushedResponse("482 User already specified - rejecting new user");
return;
}
user = value;
- writeLoggedFlushedResponse("381 More authentication information required");
+ helper.writeLoggedFlushedResponse("381 More authentication information required");
} else if ( command.equals(AUTHINFO_PARAM_PASS) ) {
// Reject password sent before user
if (user == null) {
- writeLoggedFlushedResponse("482 User not yet specified. Rejecting user.");
+ helper.writeLoggedFlushedResponse("482 User not yet specified. Rejecting user.");
return;
}
// Reject doubly sent password
@@ -486,21 +488,21 @@
user = null;
password = null;
isAlreadyAuthenticated = false;
- writeLoggedFlushedResponse("482 Password already specified - rejecting new password");
+ helper.writeLoggedFlushedResponse("482 Password already specified - rejecting new password");
return;
}
password = value;
isAlreadyAuthenticated = isAuthenticated();
if ( isAlreadyAuthenticated ) {
- writeLoggedFlushedResponse("281 Authentication accepted");
+ helper.writeLoggedFlushedResponse("281 Authentication accepted");
} else {
- writeLoggedFlushedResponse("482 Authentication rejected");
+ helper.writeLoggedFlushedResponse("482 Authentication rejected");
// Clear bad authentication
user = null;
password = null;
}
} else {
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
}
@@ -523,13 +525,13 @@
wildmat = argument.substring(0, spaceIndex);
argument = argument.substring(spaceIndex + 1);
} else {
- getLogger().error("NEWNEWS had an invalid argument");
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.getAvalonLogger().error("NEWNEWS had an invalid argument");
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
} else {
- getLogger().error("NEWNEWS had a null argument");
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.getAvalonLogger().error("NEWNEWS had a null argument");
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
@@ -537,12 +539,12 @@
try {
theDate = getDateFrom(argument);
} catch (NNTPException nntpe) {
- getLogger().error("NEWNEWS had an invalid argument", nntpe);
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.getAvalonLogger().error("NEWNEWS had an invalid argument", nntpe);
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
- writeLoggedFlushedResponse("230 list of new articles by message-id follows");
+ helper.writeLoggedFlushedResponse("230 list of new articles by message-id follows");
Iterator groupIter = theConfigData.getNNTPRepository().getMatchedGroups(wildmat);
while ( groupIter.hasNext() ) {
Iterator articleIter = ((NNTPGroup)(groupIter.next())).getArticlesSince(theDate);
@@ -550,10 +552,10 @@
StringBuffer iterBuffer =
new StringBuffer(64)
.append(((NNTPArticle)articleIter.next()).getUniqueID());
- writeLoggedResponse(iterBuffer.toString());
+ helper.writeLoggedResponse(iterBuffer.toString());
}
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -577,12 +579,12 @@
try {
theDate = getDateFrom(argument);
} catch (NNTPException nntpe) {
- getLogger().error("NEWGROUPS had an invalid argument", nntpe);
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.getAvalonLogger().error("NEWGROUPS had an invalid argument", nntpe);
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
Iterator iter = theConfigData.getNNTPRepository().getGroupsSince(theDate);
- writeLoggedFlushedResponse("231 list of new newsgroups follows");
+ helper.writeLoggedFlushedResponse("231 list of new newsgroups follows");
while ( iter.hasNext() ) {
NNTPGroup currentGroup = (NNTPGroup)iter.next();
StringBuffer iterBuffer =
@@ -594,9 +596,9 @@
.append(currentGroup.getFirstArticleNumber())
.append(" ")
.append((currentGroup.isPostAllowed()?"y":"n"));
- writeLoggedResponse(iterBuffer.toString());
+ helper.writeLoggedResponse(iterBuffer.toString());
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -605,8 +607,8 @@
* @param argument the argument passed in with the HELP command.
*/
private void doHELP(String argument) {
- writeLoggedResponse("100 Help text follows");
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedResponse("100 Help text follows");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -616,7 +618,7 @@
* @param argument the argument passed in with the SLAVE command.
*/
private void doSLAVE(String argument) {
- writeLoggedFlushedResponse("202 slave status noted");
+ helper.writeLoggedFlushedResponse("202 slave status noted");
}
/**
@@ -627,7 +629,7 @@
private void doDATE(String argument) {
Date dt = new Date(System.currentTimeMillis()-UTC_OFFSET);
String dtStr = DF_RFC2980.format(new Date(dt.getTime() - UTC_OFFSET));
- writeLoggedFlushedResponse("111 " + dtStr);
+ helper.writeLoggedFlushedResponse("111 " + dtStr);
}
/**
@@ -636,7 +638,7 @@
* @param argument the argument passed in with the QUIT command
*/
private void doQUIT(String argument) {
- writeLoggedFlushedResponse("205 closing connection");
+ helper.writeLoggedFlushedResponse("205 closing connection");
}
/**
@@ -672,33 +674,33 @@
return;
} else if (extension.equals("ACTIVE.TIMES") ) {
// not supported - 9.4.2.1, 9.4.3.1, 9.4.4.1
- writeLoggedFlushedResponse("503 program error, function not performed");
+ helper.writeLoggedFlushedResponse("503 program error, function not performed");
return;
} else if (extension.equals("DISTRIBUTIONS") ) {
// not supported - 9.4.2.1, 9.4.3.1, 9.4.4.1
- writeLoggedFlushedResponse("503 program error, function not performed");
+ helper.writeLoggedFlushedResponse("503 program error, function not performed");
return;
} else if (extension.equals("DISTRIB.PATS") ) {
// not supported - 9.4.2.1, 9.4.3.1, 9.4.4.1
- writeLoggedFlushedResponse("503 program error, function not performed");
+ helper.writeLoggedFlushedResponse("503 program error, function not performed");
return;
} else {
- writeLoggedFlushedResponse("501 Syntax error");
+ helper.writeLoggedFlushedResponse("501 Syntax error");
return;
}
}
Iterator iter = theConfigData.getNNTPRepository().getMatchedGroups(wildmat);
- writeLoggedFlushedResponse("215 list of newsgroups follows");
+ helper.writeLoggedFlushedResponse("215 list of newsgroups follows");
while ( iter.hasNext() ) {
NNTPGroup theGroup = (NNTPGroup)iter.next();
if (isListNewsgroups) {
- writeLoggedResponse(theGroup.getListNewsgroupsFormat());
+ helper.writeLoggedResponse(theGroup.getListNewsgroupsFormat());
} else {
- writeLoggedResponse(theGroup.getListFormat());
+ helper.writeLoggedResponse(theGroup.getListFormat());
}
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -710,21 +712,21 @@
private void doIHAVE(String id) {
// see section 9.3.2.1
if (!isMessageId(id)) {
- writeLoggedFlushedResponse("501 command syntax error");
+ helper.writeLoggedFlushedResponse("501 command syntax error");
return;
}
NNTPArticle article = theConfigData.getNNTPRepository().getArticleFromID(id);
if ( article != null ) {
- writeLoggedFlushedResponse("435 article not wanted - do not send it");
+ helper.writeLoggedFlushedResponse("435 article not wanted - do not send it");
} else {
- writeLoggedFlushedResponse("335 send article to be transferred. End with <CR-LF>.<CR-LF>");
+ helper.writeLoggedFlushedResponse("335 send article to be transferred. End with <CR-LF>.<CR-LF>");
try {
createArticle();
} catch (RuntimeException e) {
- writeLoggedFlushedResponse("436 transfer failed - try again later");
+ helper.writeLoggedFlushedResponse("436 transfer failed - try again later");
throw e;
}
- writeLoggedFlushedResponse("235 article received ok");
+ helper.writeLoggedFlushedResponse("235 article received ok");
}
}
@@ -736,11 +738,11 @@
private void doPOST(String argument) {
// see section 9.3.1.1
if ( argument != null ) {
- writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
+ helper.writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
}
- writeLoggedFlushedResponse("340 send article to be posted. End with <CR-LF>.<CR-LF>");
+ helper.writeLoggedFlushedResponse("340 send article to be posted. End with <CR-LF>.<CR-LF>");
createArticle();
- writeLoggedFlushedResponse("240 article received ok");
+ helper.writeLoggedFlushedResponse("240 article received ok");
}
/**
@@ -758,24 +760,24 @@
if (isMessageId(param)) {
article = theConfigData.getNNTPRepository().getArticleFromID(param);
if ( article == null ) {
- writeLoggedFlushedResponse("430 no such article");
+ helper.writeLoggedFlushedResponse("430 no such article");
return;
} else {
StringBuffer respBuffer =
new StringBuffer(64)
.append("223 0 ")
.append(param);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
} else {
int newArticleNumber = currentArticleNumber;
if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
return;
} else {
if ( param == null ) {
if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article selected");
+ helper.writeLoggedFlushedResponse("420 no current article selected");
return;
} else {
article = group.getArticle(currentArticleNumber);
@@ -786,7 +788,7 @@
article = group.getArticle(newArticleNumber);
}
if ( article == null ) {
- writeLoggedFlushedResponse("423 no such article number in this group");
+ helper.writeLoggedFlushedResponse("423 no such article number in this group");
return;
} else {
currentArticleNumber = newArticleNumber;
@@ -800,7 +802,7 @@
.append(article.getArticleNumber())
.append(" ")
.append(articleID);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
}
@@ -821,24 +823,24 @@
if (isMessageId(param)) {
article = theConfigData.getNNTPRepository().getArticleFromID(param);
if ( article == null ) {
- writeLoggedFlushedResponse("430 no such article");
+ helper.writeLoggedFlushedResponse("430 no such article");
return;
} else {
StringBuffer respBuffer =
new StringBuffer(64)
.append("222 0 ")
.append(param);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
} else {
int newArticleNumber = currentArticleNumber;
if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
return;
} else {
if ( param == null ) {
if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article selected");
+ helper.writeLoggedFlushedResponse("420 no current article selected");
return;
} else {
article = group.getArticle(currentArticleNumber);
@@ -849,7 +851,7 @@
article = group.getArticle(newArticleNumber);
}
if ( article == null ) {
- writeLoggedFlushedResponse("423 no such article number in this group");
+ helper.writeLoggedFlushedResponse("423 no such article number in this group");
return;
} else {
currentArticleNumber = newArticleNumber;
@@ -863,14 +865,14 @@
.append(article.getArticleNumber())
.append(" ")
.append(articleID);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
}
if (article != null) {
- out.flush();
- article.writeBody(new ExtraDotOutputStream(outs));
- writeLoggedFlushedResponse("\r\n.");
+ helper.getOutputWriter().flush();
+ article.writeBody(new ExtraDotOutputStream(helper.getOutputStream()));
+ helper.writeLoggedFlushedResponse("\r\n.");
}
}
@@ -889,24 +891,24 @@
if (isMessageId(param)) {
article = theConfigData.getNNTPRepository().getArticleFromID(param);
if ( article == null ) {
- writeLoggedFlushedResponse("430 no such article");
+ helper.writeLoggedFlushedResponse("430 no such article");
return;
} else {
StringBuffer respBuffer =
new StringBuffer(64)
.append("221 0 ")
.append(param);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
} else {
int newArticleNumber = currentArticleNumber;
if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
return;
} else {
if ( param == null ) {
if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article selected");
+ helper.writeLoggedFlushedResponse("420 no current article selected");
return;
} else {
article = group.getArticle(currentArticleNumber);
@@ -917,7 +919,7 @@
article = group.getArticle(newArticleNumber);
}
if ( article == null ) {
- writeLoggedFlushedResponse("423 no such article number in this group");
+ helper.writeLoggedFlushedResponse("423 no such article number in this group");
return;
} else {
currentArticleNumber = newArticleNumber;
@@ -931,14 +933,14 @@
.append(article.getArticleNumber())
.append(" ")
.append(articleID);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
}
if (article != null) {
- out.flush();
- article.writeHead(new ExtraDotOutputStream(outs));
- writeLoggedFlushedResponse(".");
+ helper.getOutputWriter().flush();
+ article.writeHead(new ExtraDotOutputStream(helper.getOutputStream()));
+ helper.writeLoggedFlushedResponse(".");
}
}
@@ -957,24 +959,24 @@
if (isMessageId(param)) {
article = theConfigData.getNNTPRepository().getArticleFromID(param);
if ( article == null ) {
- writeLoggedFlushedResponse("430 no such article");
+ helper.writeLoggedFlushedResponse("430 no such article");
return;
} else {
StringBuffer respBuffer =
new StringBuffer(64)
.append("220 0 ")
.append(param);
- writeLoggedResponse(respBuffer.toString());
+ helper.writeLoggedResponse(respBuffer.toString());
}
} else {
int newArticleNumber = currentArticleNumber;
if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
return;
} else {
if ( param == null ) {
if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article selected");
+ helper.writeLoggedFlushedResponse("420 no current article selected");
return;
} else {
article = group.getArticle(currentArticleNumber);
@@ -985,7 +987,7 @@
article = group.getArticle(newArticleNumber);
}
if ( article == null ) {
- writeLoggedFlushedResponse("423 no such article number in this group");
+ helper.writeLoggedFlushedResponse("423 no such article number in this group");
return;
} else {
currentArticleNumber = newArticleNumber;
@@ -999,15 +1001,15 @@
.append(article.getArticleNumber())
.append(" ")
.append(articleID);
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
}
if (article != null) {
- out.flush();
- article.writeArticle(new ExtraDotOutputStream(outs));
+ helper.getOutputWriter().flush();
+ article.writeArticle(new ExtraDotOutputStream(helper.getOutputStream()));
// see jira JAMES-311 for an explanation of the "\r\n"
- writeLoggedFlushedResponse("\r\n.");
+ helper.writeLoggedFlushedResponse("\r\n.");
}
}
@@ -1019,13 +1021,13 @@
private void doNEXT(String argument) {
// section 9.1.1.3.1
if ( argument != null ) {
- writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
+ helper.writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
} else if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
} else if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article has been selected");
+ helper.writeLoggedFlushedResponse("420 no current article has been selected");
} else if ( currentArticleNumber >= group.getLastArticleNumber() ) {
- writeLoggedFlushedResponse("421 no next article in this group");
+ helper.writeLoggedFlushedResponse("421 no next article in this group");
} else {
currentArticleNumber++;
NNTPArticle article = group.getArticle(currentArticleNumber);
@@ -1035,7 +1037,7 @@
.append(article.getArticleNumber())
.append(" ")
.append(article.getUniqueID());
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
@@ -1048,13 +1050,13 @@
private void doLAST(String argument) {
// section 9.1.1.2.1
if ( argument != null ) {
- writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
+ helper.writeLoggedFlushedResponse("501 Syntax error - unexpected parameter");
} else if ( group == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
} else if ( currentArticleNumber < 0 ) {
- writeLoggedFlushedResponse("420 no current article has been selected");
+ helper.writeLoggedFlushedResponse("420 no current article has been selected");
} else if ( currentArticleNumber <= group.getFirstArticleNumber() ) {
- writeLoggedFlushedResponse("422 no previous article in this group");
+ helper.writeLoggedFlushedResponse("422 no previous article in this group");
} else {
currentArticleNumber--;
NNTPArticle article = group.getArticle(currentArticleNumber);
@@ -1064,7 +1066,7 @@
.append(article.getArticleNumber())
.append(" ")
.append(article.getUniqueID());
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
@@ -1075,13 +1077,13 @@
*/
private void doGROUP(String groupName) {
if (groupName == null) {
- writeLoggedFlushedResponse("501 Syntax error - missing required parameter");
+ helper.writeLoggedFlushedResponse("501 Syntax error - missing required parameter");
return;
}
NNTPGroup newGroup = theConfigData.getNNTPRepository().getGroup(groupName);
// section 9.1.1.1
if ( newGroup == null ) {
- writeLoggedFlushedResponse("411 no such newsgroup");
+ helper.writeLoggedFlushedResponse("411 no such newsgroup");
} else {
group = newGroup;
// if the number of articles in group == 0
@@ -1112,7 +1114,7 @@
.append(" ")
.append(group.getName())
.append(" group selected");
- writeLoggedFlushedResponse(respBuffer.toString());
+ helper.writeLoggedFlushedResponse(respBuffer.toString());
}
}
@@ -1121,14 +1123,14 @@
*/
private void doLISTEXTENSIONS() {
// 8.1.1
- writeLoggedResponse("202 Extensions supported:");
- writeLoggedResponse("LISTGROUP");
- writeLoggedResponse("AUTHINFO");
- writeLoggedResponse("OVER");
- writeLoggedResponse("XOVER");
- writeLoggedResponse("HDR");
- writeLoggedResponse("XHDR");
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedResponse("202 Extensions supported:");
+ helper.writeLoggedResponse("LISTGROUP");
+ helper.writeLoggedResponse("AUTHINFO");
+ helper.writeLoggedResponse("OVER");
+ helper.writeLoggedResponse("XOVER");
+ helper.writeLoggedResponse("HDR");
+ helper.writeLoggedResponse("XHDR");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -1138,7 +1140,7 @@
*/
private void doMODEREADER(String argument) {
// 7.2
- writeLoggedFlushedResponse(theConfigData.getNNTPRepository().isReadOnly()
+ helper.writeLoggedFlushedResponse(theConfigData.getNNTPRepository().isReadOnly()
? "201 Posting Not Permitted" : "200 Posting Permitted");
}
@@ -1149,7 +1151,7 @@
*/
private void doMODESTREAM(String argument) {
// 7.2
- writeLoggedFlushedResponse("500 Command not understood");
+ helper.writeLoggedFlushedResponse("500 Command not understood");
}
/**
@@ -1162,14 +1164,14 @@
// 9.5.1.1.1
if (groupName==null) {
if ( group == null) {
- writeLoggedFlushedResponse("412 no news group currently selected");
+ helper.writeLoggedFlushedResponse("412 no news group currently selected");
return;
}
}
else {
group = theConfigData.getNNTPRepository().getGroup(groupName);
if ( group == null ) {
- writeLoggedFlushedResponse("411 no such newsgroup");
+ helper.writeLoggedFlushedResponse("411 no such newsgroup");
return;
}
}
@@ -1185,14 +1187,14 @@
currentArticleNumber = -1;
}
- writeLoggedFlushedResponse("211 list of article numbers follow");
+ helper.writeLoggedFlushedResponse("211 list of article numbers follow");
Iterator iter = group.getArticles();
while (iter.hasNext()) {
NNTPArticle article = (NNTPArticle)iter.next();
- writeLoggedResponse(article.getArticleNumber() + "");
+ helper.writeLoggedResponse(article.getArticleNumber() + "");
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
}
@@ -1201,12 +1203,12 @@
*/
private void doLISTOVERVIEWFMT() {
// 9.5.3.1.1
- writeLoggedFlushedResponse("215 Information follows");
+ helper.writeLoggedFlushedResponse("215 Information follows");
String[] overviewHeaders = theConfigData.getNNTPRepository().getOverviewFormat();
for (int i = 0; i < overviewHeaders.length; i++) {
- writeLoggedResponse(overviewHeaders[i]);
+ helper.writeLoggedResponse(overviewHeaders[i]);
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
/**
@@ -1216,7 +1218,7 @@
*/
private void doPAT(String argument) {
// 9.5.3.1.1 in draft-12
- writeLoggedFlushedResponse("500 Command not recognized");
+ helper.writeLoggedFlushedResponse("500 Command not recognized");
}
/**
@@ -1238,7 +1240,7 @@
private void doHDR(String argument) {
// 9.5.3
if (argument == null) {
- writeLoggedFlushedResponse("501 Syntax error - missing required parameter");
+ helper.writeLoggedFlushedResponse("501 Syntax error - missing required parameter");
return;
}
String hdr = argument;
@@ -1249,20 +1251,20 @@
hdr = hdr.substring(0, spaceIndex);
}
if (group == null ) {
- writeLoggedFlushedResponse("412 No news group currently selected.");
+ helper.writeLoggedFlushedResponse("412 No news group currently selected.");
return;
}
if ((range == null) && (currentArticleNumber < 0)) {
- writeLoggedFlushedResponse("420 No current article selected");
+ helper.writeLoggedFlushedResponse("420 No current article selected");
return;
}
NNTPArticle[] article = getRange(range);
if ( article == null ) {
- writeLoggedFlushedResponse("412 no newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 no newsgroup selected");
} else if ( article.length == 0 ) {
- writeLoggedFlushedResponse("430 no such article");
+ helper.writeLoggedFlushedResponse("430 no such article");
} else {
- writeLoggedFlushedResponse("221 Header follows");
+ helper.writeLoggedFlushedResponse("221 Header follows");
for ( int i = 0 ; i < article.length ; i++ ) {
String val = article[i].getHeader(hdr);
if ( val == null ) {
@@ -1273,9 +1275,9 @@
.append(article[i].getArticleNumber())
.append(" ")
.append(val);
- writeLoggedResponse(hdrBuffer.toString());
+ helper.writeLoggedResponse(hdrBuffer.toString());
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
}
@@ -1298,28 +1300,28 @@
private void doOVER(String range) {
// 9.5.2.2.1
if ( group == null ) {
- writeLoggedFlushedResponse("412 No newsgroup selected");
+ helper.writeLoggedFlushedResponse("412 No newsgroup selected");
return;
}
if ((range == null) && (currentArticleNumber < 0)) {
- writeLoggedFlushedResponse("420 No current article selected");
+ helper.writeLoggedFlushedResponse("420 No current article selected");
return;
}
NNTPArticle[] article = getRange(range);
if ( article.length == 0 ) {
- writeLoggedFlushedResponse("420 No article(s) selected");
+ helper.writeLoggedFlushedResponse("420 No article(s) selected");
} else {
- writeLoggedResponse("224 Overview information follows");
+ helper.writeLoggedResponse("224 Overview information follows");
for ( int i = 0 ; i < article.length ; i++ ) {
- article[i].writeOverview(outs);
+ article[i].writeOverview(helper.getOutputStream());
if (i % 100 == 0) {
// Reset the watchdog every hundred headers or so
// to ensure the connection doesn't timeout for slow
// clients
- theWatchdog.reset();
+ helper.getWatchdog().reset();
}
}
- writeLoggedFlushedResponse(".");
+ helper.writeLoggedFlushedResponse(".");
}
}
@@ -1328,7 +1330,7 @@
*/
private void createArticle() {
try {
- InputStream msgIn = new CharTerminatedInputStream(in, NNTPTerminator);
+ InputStream msgIn = new CharTerminatedInputStream(helper.getInputStream(), NNTPTerminator);
// Removes the dot stuffing
msgIn = new DotStuffingInputStream(msgIn);
MailHeaders headers = new MailHeaders(msgIn);
@@ -1515,6 +1517,10 @@
} else {
return false;
}
- }
+ }
+
+ public void setProtocolHandlerHelper(ProtocolHandlerHelper phh) {
+ this.helper = phh;
+ }
}
Modified: james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPServer.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPServer.java (original)
+++ james/server/trunk/nntpserver-function/src/main/java/org/apache/james/nntpserver/NNTPServer.java Mon Aug 25 02:48:29 2008
@@ -29,6 +29,7 @@
import org.apache.james.nntpserver.repository.NNTPRepository;
import org.apache.james.services.MailServer;
import org.apache.james.socket.AbstractJamesService;
+import org.apache.james.socket.ProtocolHandler;
/**
* NNTP Server
@@ -130,23 +131,14 @@
return "NNTP Service";
}
-
/**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#newInstance()
+ * @see org.apache.james.socket.AbstractJamesService#newProtocolHandlerInstance()
*/
- public Object newInstance() throws Exception {
+ public ProtocolHandler newProtocolHandlerInstance() {
return new NNTPHandler();
}
/**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#getCreatedClass()
- */
- public Class getCreatedClass() {
- return NNTPHandler.class;
- }
-
-
- /**
* A class to provide NNTP handler configuration to the handlers
*/
private class NNTPHandlerConfigurationDataImpl
Modified: james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java (original)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java Mon Aug 25 02:48:29 2008
@@ -19,11 +19,8 @@
package org.apache.james.experimental.imapserver;
-import java.io.IOException;
-import java.net.Socket;
-
import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
-import org.apache.avalon.excalibur.pool.Poolable;
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.logger.Logger;
import org.apache.james.Constants;
import org.apache.james.api.imap.ImapConstants;
@@ -34,15 +31,20 @@
import org.apache.james.imapserver.codec.encode.ImapEncoder;
import org.apache.james.imapserver.codec.encode.ImapResponseComposer;
import org.apache.james.imapserver.codec.encode.base.ImapResponseComposerImpl;
-import org.apache.james.socket.AbstractJamesHandler;
+import org.apache.james.socket.ProtocolHandler;
+import org.apache.james.socket.ProtocolHandlerHelper;
+
+import java.io.IOException;
+import java.net.Socket;
/**
* Handles IMAP connections.
*/
-public class ImapHandler
- extends AbstractJamesHandler
- implements ConnectionHandler, Poolable, ImapConstants
+public class ImapHandler implements ProtocolHandler, ImapConstants
{
+
+ private ProtocolHandlerHelper helper;
+
private static final byte[] EMERGENCY_SIGNOFF = {'*',' ', 'B', 'Y', 'E', ' ',
'S', 'e', 'r', 'v', 'e', 'r', ' ', 'f', 'a', 'u', 'l', 't', '\r', '\n'};
@@ -94,8 +96,8 @@
/**
* @see ConnectionHandler#handleConnection(Socket)
*/
- protected void handleProtocol() throws IOException {
- final OutputStreamImapResponseWriter writer = new OutputStreamImapResponseWriter( outs );
+ public void handleProtocol() throws IOException {
+ final OutputStreamImapResponseWriter writer = new OutputStreamImapResponseWriter( helper.getOutputStream() );
ImapResponseComposer response = new ImapResponseComposerImpl( writer);
// Write welcome message
@@ -104,21 +106,22 @@
+ theConfigData.getHelloName() + " is ready.");
session = new ImapSessionImpl();
- setupLogger(session);
+
+ ContainerUtil.enableLogging(session, getLogger());
- theWatchdog.start();
+ helper.getWatchdog().start();
while ( handleRequest() ) {
- theWatchdog.reset();
+ helper.getWatchdog().reset();
}
- theWatchdog.stop();
+ helper.getWatchdog().stop();
getLogger().info(
- "Connection from " + remoteHost + " (" + remoteIP
+ "Connection from " + helper.getRemoteHost() + " (" + helper.getRemoteIP()
+ ") closed.");
}
private boolean handleRequest() {
- final boolean result = requestHandler.handleRequest( in, outs, session );
+ final boolean result = requestHandler.handleRequest( helper.getInputStream(), helper.getOutputStream(), session );
return result;
}
@@ -127,18 +130,22 @@
*
* @param e the RuntimeException
*/
- protected void errorHandler(RuntimeException e) {
+ public void errorHandler(RuntimeException e) {
try {
- outs.write(EMERGENCY_SIGNOFF);
+ helper.getOutputStream().write(EMERGENCY_SIGNOFF);
} catch (Throwable t) {
getLogger().debug("Write emergency signoff failed.", t);
}
- super.errorHandler(e);
+ helper.defaultErrorHandler(e);
+ }
+
+ public Logger getLogger() {
+ return helper.getAvalonLogger();
}
- public void enableLogging(Logger logger) {
- super.enableLogging(logger);
- setupLogger(requestHandler);
+ public void setProtocolHandlerHelper(ProtocolHandlerHelper phh) {
+ this.helper = phh;
}
+
}
Modified: james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapServer.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapServer.java (original)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapServer.java Mon Aug 25 02:48:29 2008
@@ -21,7 +21,6 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.james.api.imap.process.ImapProcessor;
@@ -32,6 +31,7 @@
import org.apache.james.imapserver.codec.encode.ImapEncoderFactory;
import org.apache.james.services.MailServer;
import org.apache.james.socket.AbstractJamesService;
+import org.apache.james.socket.ProtocolHandler;
/**
* TODO: this is a quick cut-and-paste hack from POP3Server. Should probably be
@@ -114,21 +114,11 @@
* Producing handlers.
* @see org.apache.avalon.excalibur.pool.ObjectFactory#newInstance()
*/
- public Object newInstance() throws Exception
+ public ProtocolHandler newProtocolHandlerInstance()
{
final ImapHandler imapHandler = new ImapHandler();
- final Logger logger = getLogger();
- logger.debug("Create handler instance");
- setupLogger(imapHandler);
- return imapHandler;
- }
-
- /**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#getCreatedClass()
- */
- public Class getCreatedClass()
- {
- return ImapHandler.class;
+ getLogger().debug("Create handler instance");
+ return imapHandler;
}
/**
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java Mon Aug 25 02:48:29 2008
@@ -25,8 +25,9 @@
import org.apache.james.Constants;
import org.apache.james.core.MailImpl;
import org.apache.james.services.MailRepository;
-import org.apache.james.socket.AbstractJamesHandler;
import org.apache.james.socket.CRLFTerminatedReader;
+import org.apache.james.socket.ProtocolHandler;
+import org.apache.james.socket.ProtocolHandlerHelper;
import org.apache.james.util.watchdog.Watchdog;
import org.apache.mailet.Mail;
@@ -42,9 +43,10 @@
* The handler class for POP3 connections.
*
*/
-public class POP3Handler
- extends AbstractJamesHandler implements POP3Session {
+public class POP3Handler implements POP3Session, ProtocolHandler {
+ private ProtocolHandlerHelper helper;
+
private final static byte COMMAND_MODE = 1;
private final static byte RESPONSE_MODE = 2;
@@ -169,7 +171,7 @@
/**
* @see org.apache.james.socket.AbstractJamesHandler#handleProtocol()
*/
- protected void handleProtocol() throws IOException {
+ public void handleProtocol() throws IOException {
handlerState = AUTHENTICATION_READY;
authenticatedUser = "unknown";
@@ -185,7 +187,7 @@
.append(POP3Handler.softwaretype)
.append(") ready ");
String responseString = clearResponseBuffer();
- writeLoggedFlushedResponse(responseString);
+ helper.writeLoggedFlushedResponse(responseString);
//Session started - RUN all connect handlers
List connectHandlers = handlerChain.getConnectHandlers();
@@ -200,7 +202,7 @@
}
- theWatchdog.start();
+ helper.getWatchdog().start();
while(!sessionEnded) {
//Reset the current command values
curCommandName = null;
@@ -221,12 +223,12 @@
}
curCommandName = curCommandName.toUpperCase(Locale.US);
- if (getLogger().isDebugEnabled()) {
+ if (helper.getAvalonLogger().isDebugEnabled()) {
// Don't display password in logger
if (!curCommandName.equals("PASS")) {
- getLogger().debug("Command received: " + cmdString);
+ helper.getAvalonLogger().debug("Command received: " + cmdString);
} else {
- getLogger().debug("Command received: PASS <password omitted>");
+ helper.getAvalonLogger().debug("Command received: PASS <password omitted>");
}
}
@@ -239,7 +241,7 @@
int count = commandHandlers.size();
for(int i = 0; i < count; i++) {
((CommandHandler)commandHandlers.get(i)).onCommand(this);
- theWatchdog.reset();
+ helper.getWatchdog().reset();
//if the response is received, stop processing of command handlers
if(mode != COMMAND_MODE) {
break;
@@ -248,29 +250,29 @@
}
}
- theWatchdog.stop();
- if (getLogger().isInfoEnabled()) {
+ helper.getWatchdog().stop();
+ if (helper.getAvalonLogger().isInfoEnabled()) {
StringBuffer logBuffer =
new StringBuffer(128)
.append("Connection for ")
.append(getUser())
.append(" from ")
- .append(remoteHost)
+ .append(helper.getRemoteHost())
.append(" (")
- .append(remoteIP)
+ .append(helper.getRemoteIP())
.append(") closed.");
- getLogger().info(logBuffer.toString());
+ helper.getAvalonLogger().info(logBuffer.toString());
}
}
/**
* @see org.apache.james.socket.AbstractJamesHandler#errorHandler(java.lang.RuntimeException)
*/
- protected void errorHandler(RuntimeException e) {
- super.errorHandler(e);
+ public void errorHandler(RuntimeException e) {
+ helper.defaultErrorHandler(e);
try {
- out.println(ERR_RESPONSE + " Error closing connection.");
- out.flush();
+ helper.getOutputWriter().println(ERR_RESPONSE + " Error closing connection.");
+ helper.getOutputWriter().flush();
} catch (Throwable t) {
}
@@ -279,7 +281,7 @@
/**
* Resets the handler data to a basic state.
*/
- protected void resetHandler() {
+ public void resetHandler() {
// Clear user data
authenticatedUser = null;
userInbox = null;
@@ -313,13 +315,13 @@
*/
public final String readCommandLine() throws IOException {
for (;;) try {
- String commandLine = inReader.readLine();
+ String commandLine = helper.getInputReader().readLine();
if (commandLine != null) {
commandLine = commandLine.trim();
}
return commandLine;
} catch (CRLFTerminatedReader.TerminationException te) {
- writeLoggedFlushedResponse("-ERR Syntax error at character position " + te.position() + ". CR and LF must be CRLF paired. See RFC 1939 #3.");
+ helper.writeLoggedFlushedResponse("-ERR Syntax error at character position " + te.position() + ". CR and LF must be CRLF paired. See RFC 1939 #3.");
}
}
@@ -336,14 +338,14 @@
* @see org.apache.james.pop3server.POP3Session#getRemoteHost()
*/
public String getRemoteHost() {
- return remoteHost;
+ return helper.getRemoteHost();
}
/**
* @see org.apache.james.pop3server.POP3Session#getRemoteIPAddress()
*/
public String getRemoteIPAddress() {
- return remoteIP;
+ return helper.getRemoteIP();
}
/**
@@ -408,7 +410,7 @@
* @see org.apache.james.pop3server.POP3Session#getWatchdog()
*/
public Watchdog getWatchdog() {
- return theWatchdog;
+ return helper.getWatchdog();
}
/**
@@ -424,7 +426,7 @@
* @see org.apache.james.pop3server.POP3Session#writeResponse(java.lang.String)
*/
public void writeResponse(String respString) {
- writeLoggedFlushedResponse(respString);
+ helper.writeLoggedFlushedResponse(respString);
//TODO Explain this well
if(mode == COMMAND_MODE) {
mode = RESPONSE_MODE;
@@ -513,7 +515,14 @@
* @see org.apache.james.pop3server.POP3Session#getOutputStream()
*/
public OutputStream getOutputStream() {
- return outs;
+ return helper.getOutputStream();
+ }
+
+ /**
+ * @see org.apache.james.socket.ProtocolHandler#setProtocolHandlerHelper(org.apache.james.socket.ProtocolHandlerHelper)
+ */
+ public void setProtocolHandlerHelper(ProtocolHandlerHelper phh) {
+ this.helper = phh;
}
}
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Server.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Server.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Server.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Server.java Mon Aug 25 02:48:29 2008
@@ -29,6 +29,7 @@
import org.apache.james.api.user.UsersRepository;
import org.apache.james.services.MailServer;
import org.apache.james.socket.AbstractJamesService;
+import org.apache.james.socket.ProtocolHandler;
/**
* <p>Accepts POP3 connections on a server socket and dispatches them to POP3Handlers.</p>
@@ -136,25 +137,16 @@
/**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#newInstance()
+ * @see org.apache.james.socket.AbstractJamesService#newProtocolHandlerInstance()
*/
- public Object newInstance() throws Exception {
- POP3Handler theHandler = new POP3Handler();
-
+ public ProtocolHandler newProtocolHandlerInstance() {
+ POP3Handler protocolHandler = new POP3Handler();
//pass the handler chain to every POP3handler
- theHandler.setHandlerChain(handlerChain);
-
- return theHandler;
+ protocolHandler.setHandlerChain(handlerChain);
+ return protocolHandler;
}
/**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#getCreatedClass()
- */
- public Class getCreatedClass() {
- return POP3Handler.class;
- }
-
- /**
* A class to provide POP3 handler configuration to the handlers
*/
private class POP3HandlerConfigurationDataImpl
Modified: james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManager.java?rev=688688&r1=688687&r2=688688&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManager.java (original)
+++ james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManager.java Mon Aug 25 02:48:29 2008
@@ -37,6 +37,7 @@
import org.apache.james.management.SpoolManagementService;
import org.apache.james.services.MailServer;
import org.apache.james.socket.AbstractJamesService;
+import org.apache.james.socket.ProtocolHandler;
import java.util.ArrayList;
import java.util.Collection;
@@ -287,18 +288,11 @@
}
/**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#newInstance()
+ * @see org.apache.james.socket.AbstractJamesService#newProtocolHandlerInstance()
*/
- public Object newInstance() throws Exception {
+ public ProtocolHandler newProtocolHandlerInstance() {
return new RemoteManagerHandler();
}
-
- /**
- * @see org.apache.avalon.excalibur.pool.ObjectFactory#getCreatedClass()
- */
- public Class getCreatedClass() {
- return RemoteManagerHandler.class;
- }
/**
* A class to provide RemoteManager handler configuration to the handlers
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org