GhostProtocol.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package de.tudarmstadt.informatik.hostage.protocol;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.IOException;
  5. import java.net.Socket;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import de.tudarmstadt.informatik.hostage.wrapper.Packet;
  9. public class GhostProtocol implements Protocol {
  10. private boolean isClosed = false;
  11. @Override
  12. public int getDefaultPort() {
  13. return 5050;
  14. }
  15. @Override
  16. public TALK_FIRST whoTalksFirst() {
  17. return TALK_FIRST.CLIENT;
  18. }
  19. @Override
  20. public List<Packet> processMessage(Packet packet) {
  21. List<Packet> response = new ArrayList<Packet>();
  22. try {
  23. if(attacker == null) {
  24. attacker = new Socket("127.0.0.1", 5050);
  25. in = new BufferedInputStream(attacker.getInputStream());
  26. out = new BufferedOutputStream(attacker.getOutputStream());
  27. }
  28. if(attacker.isInputShutdown() || attacker.isOutputShutdown()) {
  29. in.close();
  30. out.close();
  31. attacker.close();
  32. isClosed = true;
  33. }
  34. out.write(packet.getMessage());
  35. out.flush();
  36. int availableBytes;
  37. while((availableBytes = in.available()) <= 0) {
  38. try {
  39. Thread.sleep(1);
  40. } catch (InterruptedException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. byte[] answer = new byte[availableBytes];
  45. in.read(answer);
  46. response.add(new Packet(answer));
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. return response;
  51. }
  52. @Override
  53. public boolean isClosed() {
  54. return isClosed;
  55. }
  56. @Override
  57. public boolean isSecure() {
  58. return false;
  59. }
  60. @Override
  61. public Class<byte[]> getType() {
  62. return byte[].class;
  63. }
  64. @Override
  65. public String toString() {
  66. return "GhostProtocol";
  67. }
  68. Socket attacker;
  69. BufferedInputStream in;
  70. BufferedOutputStream out;
  71. }