From 9219699b69ebb0c743d55862de0e43d43d270f49 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 13 Jul 2004 01:01:00 +0000 Subject: [PATCH] import darcs-hash:20040713010100-5007d-2256c9d3b25e7f77c4e19cd66fa94da7e00b3ff4.gz --- Makefile | 4 + src/org/ibex/jinetd/Host.java | 26 +++++ src/org/ibex/jinetd/Listener.java | 15 +++ src/org/ibex/jinetd/Loader.java | 192 +++++++++++++++++++++++++++++++++++++ src/org/ibex/jinetd/Main.java | 18 ++++ src/org/ibex/jinetd/Port.java | 104 ++++++++++++++++++++ src/org/ibex/jinetd/Root.java | 62 ++++++++++++ src/org/ibex/jinetd/Watched.java | 54 +++++++++++ src/org/ibex/jinetd/Watcher.java | 10 ++ src/org/ibex/jinetd/Worker.java | 15 +++ 10 files changed, 500 insertions(+) create mode 100644 Makefile create mode 100644 src/org/ibex/jinetd/Host.java create mode 100644 src/org/ibex/jinetd/Listener.java create mode 100644 src/org/ibex/jinetd/Loader.java create mode 100644 src/org/ibex/jinetd/Main.java create mode 100644 src/org/ibex/jinetd/Port.java create mode 100644 src/org/ibex/jinetd/Root.java create mode 100644 src/org/ibex/jinetd/Watched.java create mode 100644 src/org/ibex/jinetd/Watcher.java create mode 100644 src/org/ibex/jinetd/Worker.java diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d743c38 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +$(eval $(shell test -e Makefile.common || curl -O http://core.ibex.org/Makefile.common)) +include Makefile.common + + diff --git a/src/org/ibex/jinetd/Host.java b/src/org/ibex/jinetd/Host.java new file mode 100644 index 0000000..ade17d3 --- /dev/null +++ b/src/org/ibex/jinetd/Host.java @@ -0,0 +1,26 @@ +package org.ibex.jinetd; +import org.ibex.util.*; +import java.io.*; +import java.util.*; +import java.lang.reflect.*; + +public class Host extends Loader { + + final String hostname; + public Host(String path, String hostname) { super(path); this.hostname = hostname; } + + public void changed(Watched w) { + super.changed(w); + Log.error(this, "changed(" + w + ")"); + 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, "nope"); + } + } +} diff --git a/src/org/ibex/jinetd/Listener.java b/src/org/ibex/jinetd/Listener.java new file mode 100644 index 0000000..dfc5136 --- /dev/null +++ b/src/org/ibex/jinetd/Listener.java @@ -0,0 +1,15 @@ +package org.ibex.jinetd; +import java.net.*; +import org.ibex.net.*; +import org.ibex.io.*; + +/** + * jinetd will scan /jinetd/port//*.jar for a + * class implementing this interface; instances must + * have public constructors + */ +public interface Listener { + + public void accept(Connection c); + +} diff --git a/src/org/ibex/jinetd/Loader.java b/src/org/ibex/jinetd/Loader.java new file mode 100644 index 0000000..5c933c7 --- /dev/null +++ b/src/org/ibex/jinetd/Loader.java @@ -0,0 +1,192 @@ +package org.ibex.jinetd; +import org.ibex.util.*; +import java.io.*; +import java.util.*; +import java.util.zip.*; + +/** represents a file or directory which is scanned for updates */ +public class Loader extends Watcher { + + public Loader(String path) { super(path); } + + private TreeClassLoader classloader = new TreeClassLoader(); + public ClassLoader getClassLoader() { + ClassLoader classloader = this.classloader; + if (classloader == null) { + classloader = this.classloader = new TreeClassLoader(); + Log.warn(this, "getting classloader..."); + try { + compileSource(); + } catch (Exception e) { + Log.error(this, e); + } + } + return classloader; + } + + private void fill(Vec vec, File dir) { + if (!dir.exists()) return; + if (!dir.isDirectory()) { + if (!dir.getPath().endsWith(".java")) return; + vec.addElement(dir.getAbsolutePath()); + } else { + String[] list = dir.list(); + for(int i=0; i