package sun.rmi.transport.proxy; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Hashtable; public final class CGIHandler { static int ContentLength; static String QueryString; static String RequestMethod; static String ServerName; static int ServerPort; private static CGICommandHandler[] commands; private static Hashtable commandLookup; private CGIHandler() { } public static void main(String[] array) { try { int index = CGIHandler.QueryString.indexOf("="); String key; String substring; if (index == -1) { key = CGIHandler.QueryString; substring = ""; } else { key = CGIHandler.QueryString.substring(0, index); substring = CGIHandler.QueryString.substring(index + 1); } CGICommandHandler cgiCommandHandler = (CGICommandHandler)CGIHandler.commandLookup.get(key); if (cgiCommandHandler != null) { try { cgiCommandHandler.execute(substring); } catch (CGIClientException ex) { ex.printStackTrace(); returnClientError(ex.getMessage()); } catch (CGIServerException ex2) { ex2.printStackTrace(); returnServerError(ex2.getMessage()); } } else { returnClientError("invalid command."); } } catch (Exception ex3) { ex3.printStackTrace(); returnServerError("internal error: " + ex3.getMessage()); } System.exit(0); } private static void returnClientError(String s) { System.out.println("Status: 400 Bad Request: " + s); System.out.println("Content-type: text/html"); System.out.println(""); System.out.println("Java RMI Client Error"); System.out.println("

Java RMI Client Error

"); System.out.println(""); System.out.println(s); System.out.println(""); System.exit(1); } private static void returnServerError(String s) { System.out.println("Status: 500 Server Error: " + s); System.out.println("Content-type: text/html"); System.out.println(""); System.out.println("Java RMI Server Error"); System.out.println("

Java RMI Server Error

"); System.out.println(""); System.out.println(s); System.out.println(""); System.exit(1); } static { AccessController.doPrivileged(new PrivilegedAction() { @Override public Void run() { CGIHandler.ContentLength = (int)Integer.getInteger("CONTENT_LENGTH", 0); CGIHandler.QueryString = System.getProperty("QUERY_STRING", ""); CGIHandler.RequestMethod = System.getProperty("REQUEST_METHOD", ""); CGIHandler.ServerName = System.getProperty("SERVER_NAME", ""); CGIHandler.ServerPort = (int)Integer.getInteger("SERVER_PORT", 0); return null; } }); CGIHandler.commands = new CGICommandHandler[] { new CGIForwardCommand(), new CGIGethostnameCommand(), new CGIPingCommand(), new CGITryHostnameCommand() }; CGIHandler.commandLookup = new Hashtable(); for (int i = 0; i < CGIHandler.commands.length; ++i) { CGIHandler.commandLookup.put(CGIHandler.commands[i].getName(), CGIHandler.commands[i]); } } }