package com.xrtb.tools; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import javax.servlet.MultipartConfigElement; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.server.session.SessionHandler; import com.xrtb.bidder.CustomListener; /** * Creates the HTTP handler for the Minimal server. Whatever it gets, it dumps to stdout * @author Ben M. Faul. * */ public class Zippy implements Runnable { /** The thread the server runs on */ Thread me; // The port I listen on int port; // The base directory static String base = null; /** * Creates the default Server * * @param args * . String[]. Args[0] contains the name of the users file, if * not, presume "users.json" * @throws Exception * on network or JSON parsing errors. */ public static void main(String[] args) throws Exception { int port = 9999; if (args.length != 0) { int i = 0; while(i< args.length) { switch(args[i]) { case "-h": System.out.println("Web listener"); System.out.println("-h [Prints this message ]"); System.out.println("-p portnum [Port number to listen to ]"); System.out.println("-b dir [Base directory when -s is used ]"); System.out.println("-s [Save to file (based off of base directory / uri), default is stdout]"); return; case "-p": port = Integer.parseInt(args[i]); i+=2; break; case "-b": base = args[i]; i+=2; break; } } if (args[0].equals("-h")) { System.out.println("Web listener\nDefaults to port 9999, or use port number you desire as first argument"); } port = Integer.parseInt(args[0]); } new Zippy(port); } /** * Creates the instance and starts it. T * * @param port * int. The port to listen on. * @throws Exception * or network errors. */ public Zippy(int port) throws Exception { this.port = port; me = new Thread(this); me.start(); } /** * Starts the JETTY server */ public void run() { Server server = new Server(port); Handler handler = new Handler(); try { SessionHandler sh = new SessionHandler(); // org.eclipse.jetty.server.session.SessionHandler sh.addEventListener(new CustomListener()); sh.setHandler(handler); server.setHandler(sh); server.start(); server.join(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * The class that handles HTTP calls for Skrambler actions. * * @author Ben M. Faul * */ @MultipartConfig class Handler extends AbstractHandler { public static long count = 0; /** * The property for temp files. */ private static final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement( System.getProperty("java.io.tmpdir")); private NashHorn scripter; @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.addHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Cache-Control","max-age=86400"); response.setHeader("Cache-Control","must-revalidate"); response.setContentType("text/html;charset=utf-8"); String url = request.getQueryString(); StringBuilder output = new StringBuilder(target); InputStream body = request.getInputStream(); output.append(url); output.append("\n"); if (body != null) { final int bufferSize = 1024; final char[] buffer = new char[bufferSize]; final StringBuilder out = new StringBuilder(); Reader in = new InputStreamReader(body, "UTF-8"); for (; ; ) { int rsz = in.read(buffer, 0, buffer.length); if (rsz < 0) break; out.append(buffer, 0, rsz); } String data = out.toString(); String [] x = data.split("\n"); count += x.length; output.append(data); } System.out.println(output.toString()); System.out.println("------------- " + count + " ----------------"); baseRequest.setHandled(true); response.setStatus(200); } /** * Return the IP address of this * * @param request * HttpServletRequest. The web browser's request object. * @return String the ip:remote-port of this browswer's connection. */ public String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } ip += ":" + request.getRemotePort(); return ip; } }