HoneyListener.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package de.tudarmstadt.informatik.hostage;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6. import javax.net.ssl.SSLServerSocket;
  7. import javax.net.ssl.SSLSocket;
  8. import android.content.Context;
  9. import android.content.SharedPreferences;
  10. import android.content.SharedPreferences.Editor;
  11. import de.tudarmstadt.informatik.hostage.handler.AbstractHandler;
  12. import de.tudarmstadt.informatik.hostage.handler.ByteArrayHandlerImpl;
  13. import de.tudarmstadt.informatik.hostage.handler.StringHandlerImpl;
  14. import de.tudarmstadt.informatik.hostage.net.MyServerSocketFactory;
  15. import de.tudarmstadt.informatik.hostage.protocol.Protocol;
  16. import de.tudarmstadt.informatik.hostage.protocol.SSLProtocol;
  17. import de.tudarmstadt.informatik.hostage.ui.MainActivity;
  18. import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
  19. public class HoneyListener implements Runnable {
  20. private ArrayList<AbstractHandler> handlers = new ArrayList<AbstractHandler>();
  21. public int getHandlerCount() {
  22. return handlers.size();
  23. }
  24. private Protocol protocol;
  25. private ServerSocket server;
  26. private Thread thread;
  27. private HoneyService service;
  28. // Shared Preferences
  29. private SharedPreferences pref;
  30. // Editor for Shared preferences
  31. private Editor editor;
  32. private boolean running = false;
  33. public boolean isRunning() {
  34. return running;
  35. }
  36. public HoneyListener(HoneyService service, Protocol protocol) {
  37. this.service = service;
  38. this.protocol = protocol;
  39. pref = service.getApplicationContext().getSharedPreferences(MainActivity.SESSION_DATA, Context.MODE_PRIVATE);
  40. editor = pref.edit();
  41. }
  42. @Override
  43. public void run() {
  44. while (!thread.isInterrupted()) {
  45. addHandler();
  46. }
  47. for (AbstractHandler handler : handlers) {
  48. handler.kill();
  49. }
  50. }
  51. public void start() {
  52. try {
  53. if(protocol.isSecure())
  54. //TODO
  55. // server = new MyServerSocketFactory().createServerSocket(
  56. // protocol.getPort(), ((SSLProtocol) protocol).getSSLContext());
  57. server = (SSLServerSocket) ((SSLProtocol) protocol).getSSLContext().getServerSocketFactory().createServerSocket(protocol.getPort());
  58. else
  59. server = new MyServerSocketFactory().createServerSocket(protocol
  60. .getPort());
  61. (this.thread = new Thread(this)).start();
  62. editor.putBoolean(protocol + MainActivity.LISTENER, true);
  63. editor.commit();
  64. service.notifyUI(protocol.toString(), MainActivity.LISTENER);
  65. running = true;
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. public void stop() {
  71. try {
  72. server.close();
  73. thread.interrupt();
  74. editor.putBoolean(protocol + MainActivity.LISTENER, false);
  75. editor.commit();
  76. service.notifyUI(protocol.toString(), MainActivity.LISTENER);
  77. running = false;
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. public String getProtocolName() {
  83. return protocol.toString();
  84. }
  85. public void refreshHandlers() {
  86. for (Iterator<AbstractHandler> iterator = handlers.iterator(); iterator.hasNext(); ) {
  87. AbstractHandler handler = iterator.next();
  88. if (handler.isTerminated()) {
  89. iterator.remove();
  90. }
  91. }
  92. }
  93. private void addHandler() {
  94. try {
  95. Socket client;
  96. if(protocol.isSecure())
  97. client = (SSLSocket) server.accept();
  98. else
  99. client = server.accept();
  100. handlers.add(newInstance(service, this, protocol.getClass()
  101. .newInstance(), client));
  102. int handlerCount = pref.getInt(protocol + MainActivity.HANDLER_COUNT, 0);
  103. editor.putInt(protocol + MainActivity.HANDLER_COUNT, handlerCount + 1);
  104. editor.commit();
  105. service.notifyUI(protocol.toString(), MainActivity.HANDLER_COUNT);
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. private AbstractHandler newInstance(HoneyService service,
  111. HoneyListener listener, Protocol protocol, Socket client) {
  112. if (protocol.getType().equals(String.class)) {
  113. return new StringHandlerImpl(service, listener, protocol, client);
  114. } else if (protocol.getType().equals(ByteArray.class)) {
  115. return new ByteArrayHandlerImpl(service, listener, protocol, client);
  116. } else {
  117. return null;
  118. }
  119. }
  120. }