cleanup
[org.ibex.jinetd.git] / src / org / ibex / jinetd / Port.java
index b4d1039..ad0331c 100644 (file)
@@ -10,9 +10,8 @@ import java.util.*;
 import java.net.*;
 import java.util.zip.*;
 
-
 // Feature: port-level redirects
-public class Port extends Loader {
+public class Port extends TreeClassLoader {
 
     final ThreadPool tp;
     final InetAddress bindTo;
@@ -29,25 +28,22 @@ public class Port extends Loader {
     }
 
     void spawn(InetAddress bindTo, int port) { new PortThread(bindTo, port).start(); }
+    private static final ClassLoader parentLoader = Port.class.getClassLoader();
     private Port(String path, InetAddress bindTo, int port, ThreadPool tp) { 
-        super(path); this.bindTo = bindTo; this.port = port; this.tp = tp; }
-
-    public void changed(Watched w) {
-        //Log.warn(this, "Port: noticed change in " + w);
-        super.changed(w);
-    }
+        super(new File(path), parentLoader);
+        this.bindTo = bindTo; this.port = port; this.tp = tp; }
 
     void dispatch(final Connection conn) throws Exception {
         tp.appendTask(new Runnable() { public void run() {
             String local = conn.getLocalAddress() + ":" + conn.getLocalPort();
             String remote = conn.getRemoteHostname() + ":" + conn.getRemotePort();
             try {
-                final ClassLoader cl = getClassLoader();
-                Class c = cl.loadClass("org.ibex.mail.Main");
+                // FIXME FIXME
+                Class c = loadClass("org.ibex.mail.Main");
                 if (c == null) throw new RuntimeException("couldn't find listener");
                 Log.info("["+local+"]", "connection from " + remote + " => " + c.getName());
                 Log.clearnotes();
-                Thread.currentThread().setContextClassLoader(cl);
+                Thread.currentThread().setContextClassLoader(Port.this);
                 Listener l = (Listener)c.newInstance();
                 l.accept(conn);
             } catch (org.ibex.io.Stream.EOF eof) {
@@ -68,17 +64,16 @@ public class Port extends Loader {
         public PortThread(InetAddress bindTo, int port) { this.bindTo = bindTo; this.port = port; }
         public void run() {
             try {
-                Log.warn(this, "Now listening on address " + (bindTo == null ? "all interfaces" : bindTo.toString()) +
-                         ", port " + port);
+                Log.warn(this, "Now listening on address " + (bindTo==null?"all interfaces":bindTo.toString()) + ", port " + port);
                 ServerSocket ss = bindTo == null ? new ServerSocket(port) : new ServerSocket(port, 0, bindTo);
                 for(Socket s = ss.accept(); ; s = ss.accept()) try {
-                    dispatch(new Connection(s, "megacz.com"));
+                    dispatch(new Connection(s, Main.defaultDomain));
                 } catch (Exception e) { Log.warn(Port.class, e); }
             } catch (Exception e) { Log.error(Port.class, e);
             } catch (Throwable t) {
                 Log.error(this, "serious error, aborting VM");
                 Log.error(this, t);
-                Root.reboot();
+                Main.reboot();
             }
         }
     }