HoneyListener.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package de.tudarmstadt.informatik.hostage;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4. import java.util.ArrayList;
  5. import de.tudarmstadt.informatik.hostage.handler.AbstractHandler;
  6. import de.tudarmstadt.informatik.hostage.handler.ByteArrayHandlerImpl;
  7. import de.tudarmstadt.informatik.hostage.handler.StringHandlerImpl;
  8. import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
  9. import de.tudarmstadt.informatik.hostage.protocol.Protocol;
  10. import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
  11. public class HoneyListener implements Runnable {
  12. private ArrayList<AbstractHandler> handlers = new ArrayList<AbstractHandler>();
  13. public int getHandlerCount() {
  14. return handlers.size();
  15. }
  16. private Protocol protocol;
  17. private ServerSocket server;
  18. private Thread thread;
  19. private HoneyService service;
  20. private boolean running = false;
  21. public boolean isRunning() {
  22. return running;
  23. }
  24. public HoneyListener(HoneyService service, Protocol protocol) {
  25. this.service = service;
  26. this.protocol = protocol;
  27. }
  28. @Override
  29. public void run() {
  30. while (!thread.isInterrupted()) {
  31. addHandler();
  32. }
  33. for (AbstractHandler handler : handlers) {
  34. handler.kill();
  35. }
  36. }
  37. public void start() {
  38. try {
  39. server = new MyServerSocketFactory().createServerSocket(protocol
  40. .getPort());
  41. (this.thread = new Thread(this)).start();
  42. running = true;
  43. service.notifyUI();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }
  48. public void stop() {
  49. try {
  50. thread.interrupt();
  51. server.close();
  52. } catch (Exception e) {
  53. e.printStackTrace();
  54. }
  55. running = false;
  56. service.notifyUI();
  57. }
  58. public String getProtocolName() {
  59. return protocol.toString();
  60. }
  61. public void refreshHandlers() {
  62. for (AbstractHandler handler : handlers) {
  63. if (handler.isTerminated()) {
  64. handlers.remove(handler);
  65. }
  66. }
  67. service.notifyUI();
  68. }
  69. private void addHandler() {
  70. try {
  71. Socket client = server.accept();
  72. handlers.add(newInstance(service, this, protocol.getClass()
  73. .newInstance(), client));
  74. service.notifyUI();
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. private AbstractHandler newInstance(HoneyService service,
  80. HoneyListener listener, Protocol protocol, Socket client) {
  81. if (protocol.getType().equals(String.class)) {
  82. return new StringHandlerImpl(service, listener, protocol, client);
  83. } else if (protocol.getType().equals(ByteArray.class)) {
  84. return new ByteArrayHandlerImpl(service, listener, protocol, client);
  85. } else {
  86. return null;
  87. }
  88. }
  89. }