Your goal in this project is to build a multi-threaded web proxy server usable by common web browsers to access remote hosts anonymously. Your proxy need only respond to GET and POST requests.
This project is all about the low level HTTP protocol commands and so you can only use the low level Java socket and I/O libraries. That means you cannot use any of the URL/HTTP support objects like URL and URLConnection.
You will create a jar file called proxy.jar containing *.class files and place it in a directory called proxy/dist under your cs680 dir:
Pur your source Java code in wc/src:
To jar your stuff up, you will "cd" to the directory containing your source code (perhaps wc/src) and create the jar in the wc dir:
All classes must be in the default package!
To learn more about submitting your project with svn, see Resources.
You must submit your source code for credit.
You must also leave a copy of your proxy.jar file in the root's home directory on your Amazon machine: /root. Here is how you will login:
Using scp to copy your jar up there is fairly similar.
Note that ssh/scp will not allow you to login using that key file if it is visible to other users read on UNIX, I set the permissions like this:
I will use your proxy at Amazon with my firefox browser to test your software. I will set my proxy to your machine name and port 8080. Because your software might crash, I need the ability to restart it. Please leave a copy of your proxy.jar in the root home directory on your Amazon machine. Your project must start up exactly like this:
You may discuss this project in its generality with anybody you want and may look at any code on the internet except for a classmate's code. You should physically code this project completely yourself but can use all the help you find other than cutting-n-pasting or looking at code from a classmate or other Human being. There is a lot of sample code out there for implementing Java proxies, but they all are these massive programs that use lots of helper objects. For example, my program doesn't use any helper classes except for the Runnable client handler. I've looked at most of these solutions on the web and I will be very suspicious if I see a similar coding pattern. You must implement this yourself.
I will deduct 10% if your program is not executable exactly in the fashion mentioned in the project; that is, class name, methods, lack-of-package, and jar must be exactly right. For you PC folks, note that case is significant for class names and file names on unix! All projects must run properly under linux at amazon.