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/13 23:01:58 UTC

cvs commit: jakarta-james/src/org/apache/james/pop3server POP3Handler.java

donaldp     01/03/13 14:01:56

  Modified:    src/org/apache/james/pop3server POP3Handler.java
  Log:
  Fixed: There is a small bug in the POP3Handler where it doesn't quite follow the standard. A deleted message is allowed to be deleted again.
  
  Submitted By: Gautam Mani <g_...@vsnl.com>
  
  Also added in some changes of structure to more align with Phoenix model
  
  Revision  Changes    Path
  1.36      +32 -42    jakarta-james/src/org/apache/james/pop3server/POP3Handler.java
  
  Index: POP3Handler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/src/org/apache/james/pop3server/POP3Handler.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- POP3Handler.java	2001/03/06 01:35:12	1.35
  +++ POP3Handler.java	2001/03/13 22:01:50	1.36
  @@ -21,6 +21,7 @@
   import javax.mail.MessagingException;
   import org.apache.avalon.AbstractLoggable;
   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;
  @@ -47,12 +48,11 @@
    */
   public class POP3Handler 
       extends AbstractLoggable
  -    implements ConnectionHandler, Contextualizable, Composer, Configurable, 
  -    Initializable, Target {
  +    implements ConnectionHandler, Contextualizable, Composer, Configurable, Target {
   
  +    private String softwaretype        = "JAMES POP3 Server " + Constants.SOFTWARE_VERSION;
  +
       private ComponentManager compMgr;
  -    private Configuration conf;
  -    private Context context;
       private MailServer mailServer;
       private MailRepository userInbox;
       private UsersRepository users;
  @@ -66,10 +66,9 @@
       private String remoteHost;
       private String remoteIP;
       private String servername;
  -    private String softwaretype;
       private int state;
       private String user;
  -    private Vector userMailbox;
  +    private Vector userMailbox = new Vector();
       private Vector backupUserMailbox;
       private static final Mail DELETED = new MailImpl();
   
  @@ -80,42 +79,25 @@
       private final static String OK_RESPONSE = "+OK";
       private final static String ERR_RESPONSE = "-ERR";
   
  -    /**
  -     * Constructor has no parameters to allow Class.forName() stuff.
  -     */
  -    public void configure(Configuration conf) throws ConfigurationException {
  -        this.conf = conf;
  -        timeout = conf.getChild("connectiontimeout").getValueAsInt(120000);
  +    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( 120000 );
       }
   
  -    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" );
       }
   
  -    public void init() throws Exception {
  -
  -        try {
  -            mailServer = (MailServer) compMgr.lookup("org.apache.james.services.MailServer");
  -            users = (UsersRepository)compMgr.
  -                lookup("org.apache.james.services.UsersRepository");
  -            scheduler = (TimeScheduler)compMgr.
  -                lookup("org.apache.cornerstone.services.scheduler.TimeScheduler");
  -
  -            softwaretype = "JAMES POP3 Server " + Constants.SOFTWARE_VERSION;
  -            servername = (String) context.get(Constants.HELO_NAME);
  -            userMailbox = new Vector();
  -
  -        } catch (Exception e) {
  -            getLogger().error("Exception initializing a PO3Handler was : " + e);
  -            e.printStackTrace();
  -            throw e;
  -        }
  -    }
  -
       /**
        * Handle a connection.
        * This handler is responsible for processing connections as they occur.
  @@ -135,17 +117,19 @@
               remoteHost = socket.getInetAddress ().getHostName ();
               remoteIP = socket.getInetAddress ().getHostAddress ();
           } catch (Exception e) {
  -            getLogger().error("Cannot open connection from " + remoteHost + " (" + remoteIP + "): " + e.getMessage());
  +            getLogger().error( "Cannot open connection from " + remoteHost + 
  +                               " (" + remoteIP + "): " + e.getMessage(), e );
           }
   
  -        getLogger().info("Connection from " + remoteHost + " (" + remoteIP + ")");
  +        getLogger().info( "Connection from " + remoteHost + " (" + remoteIP + ")" );
   
           try {
               final PeriodicTimeTrigger trigger = new PeriodicTimeTrigger( timeout, -1 );
               scheduler.addTrigger( this.toString(), trigger, this );
               state = AUTHENTICATION_READY;
               user = "unknown";
  -            out.println(OK_RESPONSE + " " + this.servername + " POP3 server (" + this.softwaretype + ") ready ");
  +            out.println( OK_RESPONSE + " " + this.servername + 
  +                         " POP3 server (" + this.softwaretype + ") ready " );
               while (parseCommand(in.readLine())) {
                   scheduler.resetTrigger(this.toString());
               }
  @@ -156,7 +140,8 @@
           } catch (Exception e) {
               out.println(ERR_RESPONSE + " Error closing connection.");
               out.flush();
  -            getLogger().error("Exception during connection from " + remoteHost + " (" + remoteIP + ") : " + e.getMessage());
  +            getLogger().error( "Exception during connection from " + remoteHost + 
  +                               " (" + remoteIP + ") : " + e.getMessage(), e );
               try {
                   socket.close();
               } catch (IOException ioe) {
  @@ -334,8 +319,13 @@
                       return true;
                   }
                   try {
  -                    userMailbox.setElementAt(DELETED, num);
  -                    out.println(OK_RESPONSE + " Message removed");
  +                    MailImpl mc = (MailImpl) userMailbox.elementAt(num);
  +                    if (mc == DELETED) {
  +                         out.println(ERR_RESPONSE + " Message (" + num + ") does not exist.");
  +                    } else {
  +                         userMailbox.setElementAt(DELETED, num);
  +                         out.println(OK_RESPONSE + " Message removed");
  +                    }
                   } catch (ArrayIndexOutOfBoundsException iob) {
                       out.println(ERR_RESPONSE + " Message (" + num + ") does not exist.");
                   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org