import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.security.KeyStore; import java.util.logging.Level; import java.util.logging.Logger; import javax.net.ssl.*; static class MyHTTPD extends NanoHTTPD { public MyHTTPD(int port) { super(port); } public Response serve(String uri, Method method, Map header, Map parms, Map files) { S remoteAddr = header.get("remote-addr"); print(formatDateAndTime() + " Serving URI: " + quote(uri) + " to: " + remoteAddr); /*if (nempty(remoteAddr) && isTrue(callOpt(mc(), "isBlockedIP", remoteAddr))) { print("BLOCKED IP."); ret serve404(); }*/ try { Response response = cast callOpt(getMainClass(), "serve", uri, method, header, parms, files); if (response != null) ret response; S html = callHtmlMethod(getMainClass(), uri, parms); if (html != null) ret serveHTML(html); ret serve404(); } catch (Throwable e) { printStackTrace(e); ret serveHTML("ERROR."); } } } static MyHTTPD serveHttp_server; static int serveHttp_port = 8888; static new TreeSet serveHttp_peers; static int serveHttp(int port) ctex { serveHttp_port = port; serveHttp_server = new MyHTTPD(port); serveHttp_server.start(); ret serveHttp_port(); } // serve on random port, return port number used static int serveHttp() { serveHttp(0); ret serveHttp_port(); } static int serveHttp_port() { ret serveHttp_server == null ? 0 : serveHttp_server.getListeningPort(); } static void cleanMeUp_serveHttp() { if (serveHttp_server != null) { serveHttp_server.stop(); serveHttp_server = null; } }