package com.fourinone; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.util.Iterator; import java.util.List; import java.util.Set; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.util.concurrent.Executors; import java.io.File; import java.io.FileInputStream; import java.net.HttpURLConnection; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.Compilable; import com.fourinone.FttpAdapter.FileProperty; public class ParkInetServer//not public { static void start(String i, int p, int q){ try{ HttpServer hs = HttpServer.create(new InetSocketAddress(i,p),q); hs.createContext(ConfigContext.getProp("REQROOT"), new HandlerAll()); //hs.createContext(ConfigContext.getProp("REQECHO"), new HandlerEcho()); hs.createContext(ConfigContext.getProp("REQRES"), new HandlerRes()); hs.createContext(ConfigContext.getProp("REQADMIN"), new HandlerAuth()); hs.setExecutor(Executors.newCachedThreadPool());//PoolExector hs.start(); //hs.stop(); LogUtil.info("", "", "startWebapp("+i+":"+p+")"); }catch(IOException e) { LogUtil.info("[InetServer]", "[StartError]", e.getMessage()); } } public static void main(String[] args) { /*try{ String fttps = ConfigContext.getRequest("/WEB-INFO/fttp.js"); System.out.println(fttps); ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); int treenum = 2; String[] fttproot=null,fttprootcode=null; FileProperty[] fttpchild = null; if(treenum==0){ fttproot = FttpAdapter.fttpRoots(); fttprootcode = FttpAdapter.fttpRootsPathEncode(fttproot); }else if(treenum==1){ FttpAdapter fa = new FttpAdapter("fttp://localhost"); //rootlist = fa.listRoots(); fttpchild = fa.getChildProperty(); }else if(treenum>1){ FttpAdapter fa = new FttpAdapter("fttp://localhost/d:/"); fttpchild = fa.getChildProperty(); } engine.put("$treenum", treenum); engine.put("$fttproot", fttproot); engine.put("$fttprootcode", fttprootcode); engine.put("$fttpchild", fttpchild); //if(engine instanceof Invocable){ if(engine instanceof Compilable){ Compilable ce = (Compilable)engine; ce.compile(fttps).eval(); } //System.out.println(o); String result = (String)engine.get("result"); System.out.println("result:"+result); }catch(Exception e){ System.out.println(e); } try{ //System.out.println(new File("/C:/Program Files").isHidden()); //System.out.println(new File("/C:/Program Files").listFiles()); //System.out.println(new File("/C:/Program Files").listFiles().length); //FttpAdapter fa = new FttpAdapter("fttp://a.b.c///d/\\out\\aa\\bb/% [d]*?<>|^&#$@!+-=,;:'\"()~.htm");// //FttpAdapter fa = new FttpAdapter("fttp://a.b.c/d:\\.htm"); FttpAdapter fa = new FttpAdapter("fttp://localhost/C:/Program Files"); FileProperty[] fttpchild = fa.getChildProperty(); System.out.println("fttpchild................"+fttpchild); System.out.println("fttpchild................"+fttpchild.length); }catch(Exception e){ System.out.println(e); }*/ start(args[0], 8888, 0); } } class HandlerAll implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { /*InputStream is = t.getRequestBody(); String response = "response ok"; t.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); */ Headers responseHeaders = exchange.getResponseHeaders(); responseHeaders.set("Content-Type", "text/html"); String response = ConfigContext.getRequest(ConfigContext.getProp("RSPE404")); exchange.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, response.length()); OutputStream os = exchange.getResponseBody(); os.write(response.getBytes()); os.close(); } } class HandlerEcho implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { String requestMethod = exchange.getRequestMethod(); if(requestMethod.equalsIgnoreCase("GET")) { Headers responseHeaders = exchange.getResponseHeaders(); responseHeaders.set("Content-Type", "text/plain"); exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0); OutputStream responseBody = exchange.getResponseBody(); Headers requestHeaders = exchange.getRequestHeaders(); Set<String> keySet = requestHeaders.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()){ String key = iter.next(); List values = requestHeaders.get(key); String s = key + " = " + values.toString() + "\n"; responseBody.write(s.getBytes()); } responseBody.close(); } } } class HandlerRes implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { String uri = exchange.getRequestURI().getPath().substring(5); //System.out.println(exchange.getRemoteAddress()+" getPath:"+uri); File fl = new File(uri); //System.out.println(fl); //System.out.println(fl.exists()); String requestMethod = exchange.getRequestMethod(); if(requestMethod.equalsIgnoreCase("GET")) { Headers responseHeaders = exchange.getResponseHeaders(); responseHeaders.set("Content-Type", "application/x-download"); //responseHeaders.set("Content-Disposition", "attachment; filename=abcd.bat"); exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, fl.length());//HttpURLConnection.HTTP_OK,responseMsg.length(); OutputStream responseBody = exchange.getResponseBody(); FileAdapter fa = new FileAdapter(fl.getPath()); byte[] bts = null; long begin=0,every=FileAdapter.k(512); while((bts=fa.getReader(begin, every).readAll())!=null){ responseBody.write(bts); begin+=bts.length; } fa.close(); responseBody.close(); } } } class HandlerAuth implements HttpHandler { String getResponse(String treeId, int treenum, String eid){ String result = ""; try{ String fttps = ConfigContext.getRequest(ConfigContext.getProp("RSPFTTPJS")); //System.out.println(fttps); ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); String[] fttproot=null,fttprootcode=null; FileProperty[] fttpchild = null; if(treenum==0){ fttproot = FttpAdapter.fttpRoots(); //for(int i=0;i<fttproot.length;i++)System.out.println("fttproot:"+fttproot[i]); fttprootcode = FttpAdapter.fttpRootsPathEncode(fttproot); }else if(treenum>0){ //System.out.println("getResponse treeId................"+treeId); FttpAdapter fa = new FttpAdapter(treeId);//ObjectBytes.getViewUtf8UrlString(treeId)getViewUrlStringdecodeReplace"fttp://localhost" //rootlist = fa.listRoots(); fttpchild = fa.getChildProperty(); /*System.out.println("getResponse fttpchild................"+fttpchild); if(fttpchild!=null) System.out.println("getResponse fttpchild length................"+fttpchild.length);*/ } engine.put("$treenum", treenum); engine.put("$fttproot", fttproot); engine.put("$fttprootcode", fttprootcode); engine.put("$fttpchild", fttpchild); //if(engine instanceof Invocable){ if(engine instanceof Compilable){ Compilable ce = (Compilable)engine; ce.compile(fttps).eval(); } //System.out.println(o); result = (String)engine.get("result"); //result = new String(result.getBytes("iso-8859-1"),"utf-8"); //System.out.println("result:"+result); }catch(Exception e){ //System.out.println(e); LogUtil.info("[getResponse]", "[HandlerAuth]", e); } return "<script>parent."+eid+".innerHTML=\""+result+"\";</script>"; } public void handle(HttpExchange exchange) throws IOException { try{ boolean authflag = false; Headers hds = exchange.getRequestHeaders(); List<String> auth = hds.get("Authorization"); String requesturi = exchange.getRequestURI().getPath(); String requestparam = exchange.getRequestURI().getQuery(); //System.out.println(requesturi+",param:"+requestparam);//new String(.getBytes("UTF-8")) if(auth!=null){ String authstr = new String(ObjectBytes.decode(auth.get(0).split("\u0020")[1].toCharArray())); //System.out.println("Authorization:"+authstr); //System.out.println(ObjectBytes.encodeurl("root")); //System.out.println(ObjectBytes.decodeurl("cm9vdA%3D%3D")); if(authstr!=null){ String[] autharr = authstr.split("\u003A"); //System.out.println("autharr.length:"+autharr.length); if(autharr.length==2){ String authpwd = ConfigContext.getUsersConfig().getString(autharr[0]); if(authpwd!=null&&authpwd.equals(autharr[1])) authflag = true; } } //System.out.println("authflag:"+authflag); } Headers responseHeaders = exchange.getResponseHeaders(); responseHeaders.set("Content-Type", "text/html;charset=UTF-8"); String response = ""; if(authflag){ if(requesturi.equals(ConfigContext.getProp("REQFTTP"))) response = ConfigContext.getRequest(ConfigContext.getProp("RSPFTTPJSP")); else if(requesturi.equals(ConfigContext.getProp("REQGETFTTP"))&&requestparam!=null){ String[] rqsarrstr = requestparam.split("&"); String rqtid = rqsarrstr[0].replaceAll("tid=",""); String tid = ObjectBytes.getViewUtf8UrlString(rqtid);//getViewUrlString ObjectBytes.decodeReplace(tid); //System.out.println("requesttreeId:"+rqtid); //System.out.println("treeId:"+tid); int tn = Integer.parseInt(rqsarrstr[1].replaceAll("tn=","")); //System.out.println("tn:"+tn); String eid = rqsarrstr[2].replaceAll("eid=",""); response = getResponse(tid, tn, eid); } exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0); }else{ response = ConfigContext.getRequest(ConfigContext.getProp("RSPE401")); responseHeaders.set("WWW-Authenticate", "Basic realm='Fttp Admin'"); exchange.sendResponseHeaders(HttpURLConnection.HTTP_UNAUTHORIZED, response.length()); } OutputStream os = exchange.getResponseBody(); os.write(response.getBytes("UTF-8")); os.close(); }catch(Exception e){ LogUtil.info("[InetServer]", "[HandlerAuth]", e.getMessage()); throw new IOException(e); } } }