123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- package de.tudarmstadt.informatik.hostage.protocol;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * HTTP protocol
- * @author Wulf Pfeiffer
- */
- public final class HTTP implements Protocol<String> {
-
- @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;
- if(!message.contains(version)){
- response.add(buildPacket(c505, ""));
- } else if(message.contains(get)) {
- response.add(buildPacket(c200, get));
- } else if(message.contains(head)) {
- response.add(buildPacket(c200, head));
- } else if(message.contains(trace)){
- response.add(buildPacket(c200, trace));
- } else if(message.contains(options)){
- response.add(buildPacket(c400, options));
- } else if(message.contains(post)){
- response.add(buildPacket(c400, post));
- } else if(message.contains(put)){
- response.add(buildPacket(c400, put));
- } else if(message.contains(delete)){
- response.add(buildPacket(c400, delete));
- } else if(message.contains(connect)){
- response.add(buildPacket(c400, connect));
- } else {
- response.add(buildPacket(c400, ""));
- }
- return response;
- }
- @Override
- public boolean isClosed() {
- return true;
- }
- @Override
- public boolean isSecure() {
- return false;
- }
- @Override
- public Class<String> getType() {
- return String.class;
- }
- @Override
- public String toString() {
- return "HTTP";
- }
- /**
- * Builds a html response that can be sent
- * @param code response code that was determined
- * @param type request type that was sent by the client
- * @return the html response
- */
- 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;
- }
- /** Whole request that was sent by the client */
- private String request = "";
- private String version = "HTTP/1.1";
- //request codes
- 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";
- //response codes
- private String c200 = " 200 OK\r\n";
- private String c400 = " 400 Bad Request\r\n";
- private String c505 = " 505 HTTP Version not supported\r\n";
-
- //html header pre and suffix
- 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";
- //html website
- 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>";
- //html error pre and suffix
- 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>";
- }
|