X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fjinetd%2FPort.java;h=200ce2c34e9fccbc7e775795588b9b088489386d;hb=HEAD;hp=b4d103905265c09aa362a952f3c8118bb15b4cc9;hpb=df13dadbee1a679518ccebbf417a11ec17c77aec;p=org.ibex.jinetd.git diff --git a/src/org/ibex/jinetd/Port.java b/src/org/ibex/jinetd/Port.java index b4d1039..200ce2c 100644 --- a/src/org/ibex/jinetd/Port.java +++ b/src/org/ibex/jinetd/Port.java @@ -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 = Main.getRootClassLoader(); 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.info("["+local+"]", "connection from " + remote + " => " + c.getName() + ":"+conn.getLocalPort()); 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(); } } }