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 do...@apache.org on 2001/03/07 04:37:15 UTC
cvs commit: jakarta-james/src/org/apache/james/imapserver IMAPServer.java SingleThreadedConnectionHandler.java ConnectionHandler.java
donaldp 01/03/06 19:37:15
Modified: src/org/apache/james James.java
src/org/apache/james/imapserver IMAPServer.java
SingleThreadedConnectionHandler.java
Removed: src/org/apache/james/imapserver ConnectionHandler.java
Log:
Updated IMAP to use non-deprecated blocks.
Revision Changes Path
1.27 +16 -18 jakarta-james/src/org/apache/james/James.java
Index: James.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/org/apache/james/James.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- James.java 2001/03/05 15:42:15 1.26
+++ James.java 2001/03/07 03:37:11 1.27
@@ -1,19 +1,27 @@
-/*****************************************************************************
- * Copyright (C) The Apache Software Foundation. All rights reserved. *
- * ------------------------------------------------------------------------- *
- * This software is published under the terms of the Apache Software License *
- * version 1.1, a copy of which has been included with this distribution in *
- * the LICENSE file. *
- *****************************************************************************/
-
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
+ */
package org.apache.james;
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import javax.mail.Address;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.*;
+import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Context;
import org.apache.avalon.Contextualizable;
+import org.apache.avalon.Contextualizable;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.DefaultContext;
import org.apache.avalon.Initializable;
@@ -21,15 +29,6 @@
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
import org.apache.avalon.configuration.DefaultConfiguration;
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import javax.mail.Address;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.internet.*;
-import org.apache.avalon.AbstractLoggable;
-import org.apache.avalon.Contextualizable;
import org.apache.avalon.util.thread.ThreadPool;
import org.apache.james.core.*;
import org.apache.james.dnsserver.*;
@@ -636,7 +635,6 @@
* @param password String plaintext password
* @returns boolean true if user added succesfully, else false.
*/
-
public boolean addUser(String userName, String password) {
localusers.addUser(userName, password);
if (useIMAPstorage) {
1.8 +30 -63 jakarta-james/src/org/apache/james/imapserver/IMAPServer.java
Index: IMAPServer.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/org/apache/james/imapserver/IMAPServer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- IMAPServer.java 2001/03/06 07:39:07 1.7
+++ IMAPServer.java 2001/03/07 03:37:13 1.8
@@ -7,22 +7,14 @@
*/
package org.apache.james.imapserver;
-import java.net.*;
-import java.util.Date;
-import org.apache.avalon.AbstractLoggable;
-import org.apache.avalon.Component;
-import org.apache.avalon.ComponentManager;
-import org.apache.avalon.Composer;
-import org.apache.avalon.Context;
-import org.apache.avalon.Contextualizable;
-import org.apache.avalon.Loggable;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
-import org.apache.avalon.util.lang.*;
-import org.apache.avalon.util.thread.ThreadPool;
-import org.apache.cornerstone.services.SocketServer;
-import org.apache.james.*;
+import org.apache.cornerstone.services.connection.AbstractService;
+import org.apache.cornerstone.services.connection.ConnectionHandlerFactory;
+import org.apache.cornerstone.services.connection.DefaultHandlerFactory;
/**
* The Server listens on a specified port and passes connections to a
@@ -34,68 +26,43 @@
* @author <a href="mailto:charles@benett1.demon.co.uk">Charles Benett</a>
*/
public class IMAPServer
- extends AbstractLoggable
- implements SocketServer.SocketHandler, Component, Configurable, Composer, Contextualizable {
+ extends AbstractService {
- private Context context;
- private Configuration conf;
- private ComponentManager compMgr;
- private ThreadPool threadPool;
-
- public void configure(Configuration conf) throws ConfigurationException {
- this.conf = conf;
- }
-
- public void contextualize(Context context) {
- this.context = context;
- }
-
- public void compose(ComponentManager comp) {
- compMgr = comp;
+ protected ConnectionHandlerFactory createFactory()
+ {
+ return new DefaultHandlerFactory( SingleThreadedConnectionHandler.class );
}
- public void init() throws Exception {
+ public void configure( final Configuration configuration )
+ throws ConfigurationException {
- getLogger().info("IMAPServer init...");
+ m_port = configuration.getChild( "port" ).getValueAsInt( 143 );
- threadPool = ThreadManager.getWorkerPool("whateverNameYouFancy");
- SocketServer socketServer = (SocketServer) compMgr.lookup("org.apache.cornerstone.services.SocketServer");
- int port = conf.getChild("port").getValueAsInt(143);
-
- InetAddress bind = null;
- try {
- String bindTo = conf.getChild("bind").getValue();
- if (bindTo.length() > 0) {
- bind = InetAddress.getByName(bindTo);
+ try
+ {
+ final String bindAddress = configuration.getChild( "bind" ).getValue( null );
+ if( null != bindAddress )
+ {
+ m_bindTo = InetAddress.getByName( bindAddress );
}
- } catch (ConfigurationException e) {
}
-
- String type = SocketServer.DEFAULT;
- try {
- if (conf.getChild("useTLS").getValue().equals("TRUE")) type = SocketServer.TLS;
- } catch (ConfigurationException e) {
+ catch( final UnknownHostException unhe )
+ {
+ throw new ConfigurationException( "Malformed bind parameter", unhe );
}
- getLogger().info("IMAPListener using " + type + " on port " + port);
- socketServer.openListener("IMAPListener", type, port, bind, this);
- getLogger().info("IMAPServer ...init end");
+ final String useTLS = configuration.getChild("useTLS").getValue( "" );
+ if( useTLS.equals( "TRUE" ) ) m_serverSocketType = "ssl";
+
+ super.configure( configuration.getChild( "pop3handler" ) );
}
- public void parseRequest(Socket s) {
+ public void init() throws Exception {
- try {
- ConnectionHandler handler = new SingleThreadedConnectionHandler();
- ((Loggable)handler).setLogger( getLogger() );
- handler.configure(conf.getChild("imaphandler"));
- handler.contextualize(context);
- handler.compose(compMgr);
- handler.init();
- handler.parseRequest(s);
- threadPool.execute((Runnable) handler);
- } catch (Exception e) {
- getLogger().error("IMAPServer: Cannot parse request on socket " + s + " : " + e.getMessage());
- }
+ getLogger().info( "IMAPServer init..." );
+ getLogger().info( "IMAPListener using " + m_serverSocketType + " on port " + m_port );
+ super.init();
+ getLogger().info("IMAPServer ...init end");
}
}
1.9 +57 -54 jakarta-james/src/org/apache/james/imapserver/SingleThreadedConnectionHandler.java
Index: SingleThreadedConnectionHandler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/org/apache/james/imapserver/SingleThreadedConnectionHandler.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SingleThreadedConnectionHandler.java 2001/03/06 07:39:14 1.8
+++ SingleThreadedConnectionHandler.java 2001/03/07 03:37:14 1.9
@@ -11,24 +11,29 @@
import java.net.*;
import java.text.*;
import java.util.*;
-import javax.mail.MessagingException;
-import javax.mail.Session;
import javax.mail.internet.*;
import org.apache.avalon.ComponentManager;
+import org.apache.avalon.ComponentManagerException;
+import org.apache.avalon.Composer;
import org.apache.avalon.Context;
+import org.apache.avalon.Contextualizable;
+import org.apache.avalon.Initializable;
+import org.apache.avalon.Stoppable;
+import org.apache.avalon.configuration.Configurable;
import org.apache.avalon.configuration.Configuration;
import org.apache.avalon.configuration.ConfigurationException;
-import org.apache.cornerstone.services.Scheduler;
+import org.apache.cornerstone.services.connection.ConnectionHandler;
+import org.apache.cornerstone.services.scheduler.PeriodicTimeTrigger;
+import org.apache.cornerstone.services.scheduler.Target;
+import org.apache.cornerstone.services.scheduler.TimeScheduler;
import org.apache.james.AccessControlException;
import org.apache.james.AuthenticationException;
import org.apache.james.AuthorizationException;
import org.apache.james.Constants;
-import org.apache.james.core.EnhancedMimeMessage;
import org.apache.james.services.*;
import org.apache.james.util.InternetPrintWriter;
import org.apache.log.LogKit;
import org.apache.log.Logger;
-import org.apache.mailet.Mail;
/**
* An IMAP Handler handles one IMAP connection. TBC - it may spawn worker
@@ -41,7 +46,8 @@
*/
public class SingleThreadedConnectionHandler
extends BaseCommand
- implements ConnectionHandler {
+ implements ConnectionHandler, Contextualizable, Composer, Configurable,
+ Initializable, Stoppable, Target, MailboxEventListener {
//mainly to switch on stack traces and catch responses;
private static final boolean DEEP_DEBUG = true;
@@ -89,14 +95,11 @@
private static final String NO_NOTLOCAL_MSG
= "NO Mailbox does not exist on this server";
- private ComponentManager compMgr;
- private Configuration conf;
- private Context context;
- private Logger securityLogger = LogKit.getLoggerFor("james.Security") ;
+ private Logger securityLogger = LogKit.getLoggerFor("james.Security");
private MailServer mailServer;
private UsersRepository users;
- private Scheduler scheduler;
- private long timeout;
+ private TimeScheduler scheduler;
+ private int timeout;
private Socket socket;
private BufferedReader in;
@@ -105,7 +108,7 @@
private String remoteHost;
private String remoteIP;
private String servername;
- private String softwaretype;
+ private String softwaretype = "JAMES IMAP4rev1 Server " + Constants.SOFTWARE_VERSION;
private int state;
private String user;
@@ -127,50 +130,50 @@
private int exists;
private int recent;
private List sequence;
-
- /**
- * Constructor has no parameters to allow Class.forName() stuff.
- */
- public void configure(Configuration conf) throws ConfigurationException {
- this.conf = conf;
- timeout = conf.getChild("connectiontimeout").getValueAsLong();
- }
- public void compose(ComponentManager comp) {
- compMgr = comp;
+ public void compose( final ComponentManager componentManager )
+ throws ComponentManagerException {
+
+ mailServer = (MailServer)componentManager.
+ lookup("org.apache.james.services.MailServer");
+ users = (UsersRepository)componentManager.
+ lookup("org.apache.james.services.UsersRepository");
+ scheduler = (TimeScheduler)componentManager.
+ lookup("org.apache.cornerstone.services.scheduler.TimeScheduler");
+ imapSystem = (IMAPSystem)componentManager.
+ lookup("org.apache.james.imapserver.IMAPSystem");
+ imapHost = (Host)componentManager.
+ lookup("org.apache.james.imapserver.Host");
+ }
+
+ public void contextualize( final Context context ) {
+ servername = (String)context.get( Constants.HELO_NAME );
}
- public void contextualize(Context context) {
- this.context = context;
+ public void configure( final Configuration configuration )
+ throws ConfigurationException {
+ timeout = configuration.getChild( "connectiontimeout" ).getValueAsInt( 1800000 );
}
public void init() throws Exception {
- try {
- logger.info("SingleThreadedConnectionHandler starting ...");
- this.mailServer = (MailServer)
- compMgr.lookup("org.apache.james.services.MailServer");
- users = (UsersRepository) compMgr.lookup("org.apache.james.services.UsersRepository");
- scheduler = (Scheduler) compMgr.lookup("org.apache.cornerstone.services.Scheduler");
- softwaretype = "JAMES IMAP4rev1 Server "
- + Constants.SOFTWARE_VERSION;
- servername = (String) context.get(Constants.HELO_NAME);
- imapSystem = (IMAPSystem)
- compMgr.lookup("org.apache.james.imapserver.IMAPSystem");
- imapHost = (Host) compMgr.lookup("org.apache.james.imapserver.Host");
- namespaceToken = imapSystem.getNamespaceToken();
- logger.info("SingleThreadedConnectionHandler initialized");
- } catch (Exception e) {
- logger.error("Exception initialising SingleThreadedConnectionHandler : " + e);
- logger.error("Exception message is: " + e.getMessage());
- e.printStackTrace();
- throw e;
- }
+ logger.info("SingleThreadedConnectionHandler starting ...");
+ namespaceToken = imapSystem.getNamespaceToken();
+ logger.info("SingleThreadedConnectionHandler initialized");
}
- public void parseRequest(Socket socket) {
+ /**
+ * Handle a connection.
+ * This handler is responsible for processing connections as they occur.
+ *
+ * @param connection the connection
+ * @exception IOException if an error reading from socket occurs
+ * @exception ProtocolException if an error handling connection occurs
+ */
+ public void handleConnection( final Socket connection )
+ throws IOException {
try {
- this.socket = socket;
+ this.socket = connection;
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
outs = socket.getOutputStream();
@@ -182,12 +185,10 @@
+ remoteIP + "): " + e.getMessage());
}
logger.info("Connection from " + remoteHost + " (" + remoteIP + ")");
- }
- public void run() {
-
try {
- scheduler.setAlarm(this.toString(), new Scheduler.Alarm(timeout), this);
+ final PeriodicTimeTrigger trigger = new PeriodicTimeTrigger( timeout, -1 );
+ scheduler.addTrigger( this.toString(), trigger, this );
if (false) { // arbitrary rejection of connection
// could screen connections by IP or host or implement
@@ -215,7 +216,7 @@
+ ") received by SingleThreadedConnectionHandler");
}
while (parseCommand(in.readLine())) {
- scheduler.resetAlarm(this.toString());
+ scheduler.resetTrigger(this.toString());
}
}
@@ -233,9 +234,11 @@
connectionClosed = closeConnection(UNTAGGED_BYE,
"Error processing command.", "");
}
+
+ scheduler.removeTrigger(this.toString());
}
- public void wake( String name, Scheduler.Event event ) {
+ public void targetTriggered( final String triggerName ) {
logger.info("Connection timeout on socket");
connectionClosed = closeConnection(UNTAGGED_BYE,
"Autologout. Idle too long.", "");
@@ -244,7 +247,7 @@
private boolean closeConnection( int exitStatus,
String message1,
String message2 ) {
- scheduler.removeAlarm(this.toString());
+ scheduler.removeTrigger(this.toString());
if (state == SELECTED) {
currentMailbox.removeMailboxEventListener(this);
imapHost.releaseMailbox(user, currentMailbox);