1 // Copyright 2000-2005 the Contributors, as shown in the revision logs.
2 // Licensed under the Apache Public Source License 2.0 ("the License").
3 // You may not use this file except in compliance with the License.
6 import org.ibex.mail.target.*;
7 import org.ibex.mail.protocol.*;
8 import org.ibex.util.*;
9 import org.ibex.jinetd.*;
10 import org.ibex.jetty.*;
15 import org.ibex.crypto.*;
16 import org.ibex.jetty.*;
18 public class Main implements Listener {
20 public static void main(String[] s) throws Exception {
24 public void main() throws Exception {
25 ServerSocket sock143 = new ServerSocket(143);
26 ServerSocket sock119 = new ServerSocket(119);
27 ServerSocket sock25 = new ServerSocket(25);
28 new Acceptor(sock143).start();
29 new Acceptor(sock119).start();
30 new Acceptor(sock25).start();
33 private class Acceptor extends Thread {
34 private ServerSocket ss;
35 public Acceptor(ServerSocket ss) { this.ss = ss; }
39 final Socket s = ss.accept();
44 accept(new Connection(s, "megacz.com"));
45 } catch (Exception e) { Log.error(Main.class, e); }
48 } catch (Exception e) { Log.error(Main.class, e); }
50 } catch (Exception e) { Log.error(Main.class, e); }
54 public boolean accept(Connection conn) {
56 if (conn.getLocalPort() == 143) new IMAP.Listener(auth).handleRequest(conn);
57 else if (conn.getLocalPort() == 119) new NNTP.Listener(auth).handleRequest(conn);
58 else if (conn.getLocalPort() == 25) new SMTP.Server().handleRequest(conn);
59 //else if (conn.getLocalPort() == 110) new POP3.Listener(auth).handleRequest(conn);
60 //else if (conn.getLocalPort() == 8099) GMail.handleRequest(conn);
68 private static final Auth auth = new Auth();
69 private static class Auth implements Login {
70 public Account anonymous() {
73 FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/list", false);
74 if (root==null) return null;
75 return new Account("anonymous", null, root){
76 public Mailbox getMailbox(Class protocol) {
77 return super.getMailbox(protocol);
80 } catch (Exception e) { throw new RuntimeException(e); }
82 public Object login(String user, String pass, Class protocol) { return login(user, pass); }
83 public Account login(String user, String pass) {
84 if (!EtcPasswd.verify(user, pass)) return null;
86 FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/user", true);
87 return new Account(user, null, root.slash(user, true)){
88 public Mailbox getMailbox(Class protocol) {
89 return super.getMailbox(protocol);