HoneyListener.java 2.5 KB

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