import org.ibex.util.*;
import java.io.*;
import java.util.*;
+import java.net.*;
import java.lang.reflect.*;
-public class Host extends File {
+public class Host extends TreeClassLoader {
- final String hostname;
- public Host(String path, String hostname) { super(path); this.hostname = hostname; }
+ public final String hostname;
+ public final String path;
- public void changed(File f) { }
- /*
- super.changed(w);
- Log.debug(this, "changed(" + w + ")");
+ private static final Hashtable hosts = new Hashtable();
+ private static boolean initted = false;
+
+ public static Host getHost(String hostname) { return (Host)hosts.get(hostname); }
+ public static Enumeration enumerateHosts() { return hosts.elements(); }
+
+ public Host(String path, String hostname, ClassLoader pcl) {
+ super(new File(path + File.separatorChar + "WEB-INF"), pcl);
+ this.hostname = hostname;
+ this.path = path;
+ }
+
+ public static void init() {
+ if (initted) return;
+ initted = true;
+ init(org.ibex.jinetd.Main.ROOT + "/host", "", 0, Main.getRootClassLoader());
+ }
+ public static void init(String path, String host, int depth, ClassLoader pcl) {
+ if (!new File(path).exists() || !new File(path).isDirectory()) return;
try {
- ClassLoader cl = getClassLoader();
- if (cl == null) return;
- Class c = cl.loadClass("Main");
- if (c == null) return;
- Method m = c.getMethod("main", new Class[] { });
- m.invoke(null, new Object[] { });
- } catch (Exception e) {
- Log.warn(this, e);
+ InetAddress.getByName(host);
+ String pad = "";
+ while(pad.length() + host.length() < 30) pad += " ";
+ Log.info(Main.class, pad + host + " => " + path);
+ hosts.put(host, pcl = new Host(path, host, pcl));
+ } catch (UnknownHostException e) {
+ if (depth >= 3) return;
}
- */
+ String[] subdirs = new File(path).list();
+ if (subdirs != null)
+ for(int i=0; i<subdirs.length; i++)
+ init(path + File.separatorChar + subdirs[i], host.equals("") ? subdirs[i] : subdirs[i]+"."+host, depth+1, pcl);
+ }
+
}