ByteArrayHandler.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package de.tudarmstadt.informatik.hostage.handler;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.Socket;
  6. import java.util.List;
  7. import android.content.SharedPreferences;
  8. import android.preference.PreferenceManager;
  9. import de.tudarmstadt.informatik.hostage.HoneyListener;
  10. import de.tudarmstadt.informatik.hostage.HoneyService;
  11. import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
  12. import de.tudarmstadt.informatik.hostage.io.ByteArrayReaderWriter;
  13. import de.tudarmstadt.informatik.hostage.io.ReaderWriter;
  14. import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
  15. import de.tudarmstadt.informatik.hostage.protocol.Protocol;
  16. import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
  17. import de.tudarmstadt.informatik.hostage.wrapper.ByteArray;
  18. /**
  19. * Handles the socket connections for byte arrays.
  20. * @author Mihai Plasoianu
  21. */
  22. public class ByteArrayHandler extends AbstractHandler {
  23. /** Defined time until timeout */
  24. private int SLEEPTIME;
  25. public ByteArrayHandler(HoneyService service, HoneyListener listener,
  26. Protocol<?> protocol, Socket client) {
  27. super(service, listener, protocol, client);
  28. SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(service);
  29. SLEEPTIME = pref.getInt("sleeptime", 500);
  30. }
  31. @Override
  32. protected void talkToClient(InputStream in, OutputStream out)
  33. throws IOException {
  34. ReaderWriter<ByteArray> stream = new ByteArrayReaderWriter(in, out, SLEEPTIME);
  35. ByteArray inputLine;
  36. List<ByteArray> outputLine;
  37. if (protocol.whoTalksFirst() == TALK_FIRST.SERVER) {
  38. outputLine = protocol.processMessage(null);
  39. stream.write(outputLine);
  40. for (ByteArray s : outputLine) {
  41. log.write(createRecord(TYPE.SEND, HelperUtils.bytesToHexString(s.get())));
  42. }
  43. }
  44. while (!thread.isInterrupted() && (inputLine = stream.read()) != null) {
  45. outputLine = protocol.processMessage(inputLine);
  46. log.write(createRecord(TYPE.RECEIVE, HelperUtils.bytesToHexString(inputLine.get())));
  47. if (outputLine != null) {
  48. stream.write(outputLine);
  49. for (ByteArray s : outputLine) {
  50. log.write(createRecord(TYPE.SEND, HelperUtils.bytesToHexString(s.get())));
  51. }
  52. }
  53. if (protocol.isClosed()) {
  54. break;
  55. }
  56. }
  57. }
  58. }