X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FMultiplexer.java;fp=src%2Fdolda%2Fjsvc%2Futil%2FMultiplexer.java;h=dabcb3444e03442afc22e80197105473bf89d3e2;hb=79d2dd644f364a02b3d902c3544dfe275ac6461e;hp=0000000000000000000000000000000000000000;hpb=1c868f4eeb5afebdcf631441985d5ba17fcbd6b2;p=jsvc.git diff --git a/src/dolda/jsvc/util/Multiplexer.java b/src/dolda/jsvc/util/Multiplexer.java new file mode 100644 index 0000000..dabcb34 --- /dev/null +++ b/src/dolda/jsvc/util/Multiplexer.java @@ -0,0 +1,69 @@ +package dolda.jsvc.util; + +import dolda.jsvc.*; +import java.util.*; + +public class Multiplexer implements Responder { + private Responder def; + private Collection subs = new LinkedList(); + + private static interface Sub { + boolean match(Request req); + } + + public Multiplexer(Responder def) { + this.def = def; + } + + public Multiplexer() { + this(new SimpleWriter("html") { + public void respond(Request req, java.io.PrintWriter out) { + req.status(404); + out.println(""); + out.println(""); + out.println(""); + out.println("Resource not found"); + out.println(""); + out.println("

Resource not found

"); + out.println("The resource you requested could not be found on this server."); + out.println(""); + out.println(""); + } + }); + } + + public void file(final String path, final Responder responder) { + subs.add(new Sub() { + public boolean match(Request req) { + if(req.path().equals(path)) { + responder.respond(req); + return(true); + } + return(false); + } + }); + } + + public void dir(String path, final Responder responder) { + final String fp = Misc.stripslashes(path, true, true); + subs.add(new Sub() { + public boolean match(Request req) { + if(req.path().equals(fp)) { + throw(Restarts.redirect(fp + "/")); + } else if(req.path().startsWith(fp + "/")) { + responder.respond(RequestWrap.chpath(req, req.path().substring(fp.length() + 1))); + return(true); + } + return(false); + } + }); + } + + public void respond(Request req) { + for(Sub s : subs) { + if(s.match(req)) + return; + } + def.respond(req); + } +}