package com.mckay.proxy; /* Servlet stuff */ import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.ResourceBundle; import java.util.Locale; import java.util.StringTokenizer; import java.util.ArrayList; import java.util.List; import java.util.Hashtable; import java.net.*; import java.io.*; public class HttpTunnelServlet extends HttpServlet { ServletContext ctx = null; public void init(ServletConfig config) { // init hook System.out.println("Started HttpTunnelServlet"); ctx = config.getServletContext(); } public void destroy() { // shutdown } public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { // service GET or POST request System.out.println("Attempting to process tunnel request"); HttpSession mysession = req.getSession(true); // get or create session //ctx.setAttribute(mysession.getId(), if (req.getMethod().equals("POST")) { System.out.println("Servicing POST"); Socket myConn = (Socket)ctx.getAttribute(mysession.getId()); OutputStream out = myConn.getOutputStream(); InputStream in = req.getInputStream(); byte[] bytes = new byte[1500]; int i = 0; while ((i = in.read(bytes))>0) { out.write(bytes,0,i); out.flush(); } } else { System.out.println("Servicing GET"); String host = req.getParameter("host"); String port = req.getParameter("port"); Socket myConn = null; OutputStream out = res.getOutputStream(); out.flush(); // force out HTTP headers first try { myConn = new Socket(host,new Integer(port)); } catch (Exception e) { e.printStackTrace(); } if (myConn!=null) { ctx.setAttribute(mysession.getId(), myConn); } InputStream in = myConn.getInputStream(); byte[] bytes = new byte[1500]; int i = 0; while ((i = in.read(bytes))>0) { out.write(bytes,0,i); out.flush(); } } } }