HTTP.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package de.tudarmstadt.informatik.hostage.protocol;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.regex.Pattern;
  5. public final class HTTP implements Protocol<String> {
  6. @Override
  7. public int getPort() {
  8. return 80;
  9. }
  10. @Override
  11. public TALK_FIRST whoTalksFirst() {
  12. return TALK_FIRST.CLIENT;
  13. }
  14. @Override
  15. public List<String> processMessage(String message) {
  16. List<String> response = new ArrayList<String>();
  17. if (Pattern.matches("^HEAD\\s?", message)) {
  18. response.add(buildHeader());
  19. } else if (Pattern.matches("^GET\\s?", message)) {
  20. response.add((buildHeader() + buildPage()));
  21. } else {
  22. response.add("HTTP/1.1 501 Not Implemented");
  23. }
  24. return response;
  25. }
  26. @Override
  27. public boolean isClosed() {
  28. return false;
  29. }
  30. @Override
  31. public boolean isSecure() {
  32. return false;
  33. }
  34. @Override
  35. public Class<String> getType() {
  36. return String.class;
  37. }
  38. @Override
  39. public String toString() {
  40. return "HTTP";
  41. }
  42. private String buildHeader() {
  43. StringBuilder builder = new StringBuilder();
  44. builder.append("HTTP/1.1 200 OK\r\n");
  45. builder.append("Server: Apache/2.4.6 (Unix) PHP/5.5.2\r\n");
  46. builder.append("Content-Length: 148\r\n");
  47. builder.append("Content-Language: en\r\n");
  48. builder.append("Connection: close\r\n");
  49. builder.append("Content-Type: text/html\r\n");
  50. builder.append("\r\n");
  51. return builder.toString();
  52. }
  53. private String buildPage() {
  54. StringBuilder builder = new StringBuilder();
  55. builder.append("<html>");
  56. builder.append("<head>");
  57. builder.append("<title>hostage</title>");
  58. builder.append("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />");
  59. builder.append("</head>");
  60. builder.append("<body>");
  61. builder.append("<p>Hello there!</p>");
  62. builder.append("</body>");
  63. builder.append("</html>");
  64. return builder.toString();
  65. }
  66. }