123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package de.tudarmstadt.informatik.hostage.protocol;
- import java.util.ArrayList;
- import java.util.List;
- public final class HTTP implements Protocol<String> {
-
- private enum STATE {
- NONE, CLOSED
- }
- private STATE state = STATE.NONE;
-
- @Override
- public int getPort() {
- return 80;
- }
- @Override
- public TALK_FIRST whoTalksFirst() {
- return TALK_FIRST.CLIENT;
- }
- @Override
- public List<String> processMessage(String message) {
- List<String> response = new ArrayList<String>();
- request = message + request;
- System.out.println(request);
-
- switch(state) {
- case NONE:
- if(!message.contains(version)){
- response.add(buildPacket(versionUnsupported, ""));
- } else if(message.contains(get)) {
- response.add(buildPacket(ok, get));
- } else if(message.contains(head)) {
- response.add(buildPacket(ok, head));
- } else if(message.contains(trace)){
- response.add(buildPacket(ok, trace));
- } else if(message.contains(options)){
- response.add(buildPacket(methodNotAllowed, options));
- } else if(message.contains(post)){
- response.add(buildPacket(methodNotAllowed, post));
- } else if(message.contains(put)){
- response.add(buildPacket(methodNotAllowed, put));
- } else if(message.contains(delete)){
- response.add(buildPacket(methodNotAllowed, delete));
- } else if(message.contains(connect)){
- response.add(buildPacket(methodNotAllowed, connect));
- } else {
- response.add(buildPacket(badRequest, ""));
- }
- state = STATE.CLOSED;
- default:
- state = STATE.CLOSED;
- }
- return response;
- }
- @Override
- public boolean isClosed() {
- return state == STATE.CLOSED;
- }
- @Override
- public boolean isSecure() {
- return false;
- }
- @Override
- public Class<String> getType() {
- return String.class;
- }
- @Override
- public String toString() {
- return "HTTP";
- }
-
- private String buildPacket(String code, String type) {
- String doc = "";
- if(type.equals(get)) doc = htmlDoc;
- else if(type.equals(head)) doc = "";
- else if(type.equals(trace)) doc = request;
- else doc = errorHtmlPrefix + code + errorHtmlSuffix;
-
- return version + code + headerPrefix + doc.length() + headerSuffix + doc;
- }
- private String request = "";
- private String version = "HTTP/1.1";
-
- private String options = "OPTIONS";
- private String get = "GET";
- private String head = "HEAD";
- private String post = "POST";
- private String put = "PUT";
- private String delete = "DELETE";
- private String trace = "TRACE";
- private String connect = "CONNECT";
-
- private String ok = " 200 OK\r\n";
- private String badRequest = " 400 Bad Request\r\n";
- private String methodNotAllowed = " 405 Method Not Allowed\r\n";
- private String versionUnsupported = " 505 HTTP Version not supported\r\n";
-
-
- private String headerPrefix =
- "Date: Mon, 01 Jul 2013 18:27:55 GMT\r\n" +
- "Server: Apache/2.2.22 (Debian)\r\n" +
- "Vary: Accept-Encoding\r\n" +
- "Content-Length: ";
- private String headerSuffix =
- "\r\n" +
- "Keep-Alive: timeout=5, max=100\r\n" +
- "Connection: Keep-Alive\r\n" +
- "Content-Type: text/html\r\n" +
- "\r\n";
- private String htmlDoc =
- "<!doctype html>\n" +
- "<html lang=\"en\">\n" +
- "<head>\n" +
- "<meta charset=\"UTF-8\">\n" +
- "<title>Test successful</title>\n" +
- "</head>\n" +
- "<body>\n" +
- "<h1>Test successful</h1>\n" +
- "<p>Congratulations.</p>\n" +
- "</body>\n" +
- "</html>";
-
- private String errorHtmlPrefix =
- "<!doctype html>\n" +
- "<html lang=\"en\">\n" +
- "<head>\n" +
- "<meta charset=\"UTF-8\">\n" +
- "<title>";
- private String errorHtmlSuffix =
- "</title>\n" +
- "</head>\n" +
- "<body>\n" +
- "</body>\n" +
- "</html>";
- }
|