ByteArrayHandlerImpl.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. public class ByteArrayHandlerImpl extends AbstractHandler {
  19. private int SLEEPTIME;
  20. public ByteArrayHandlerImpl(HoneyService service, HoneyListener listener,
  21. Protocol protocol, Socket client) {
  22. super(service, listener, protocol, client);
  23. SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(service);
  24. SLEEPTIME = pref.getInt("sleeptime", 500);
  25. }
  26. @Override
  27. protected void talkToClient(InputStream in, OutputStream out)
  28. throws IOException {
  29. ReaderWriter<ByteArray> stream = new ByteArrayReaderWriter(in, out, SLEEPTIME);
  30. ByteArray inputLine;
  31. List<ByteArray> outputLine;
  32. if (protocol.whoTalksFirst() == TALK_FIRST.SERVER) {
  33. outputLine = protocol.processMessage(null);
  34. stream.write(outputLine);
  35. for (ByteArray s : outputLine) {
  36. log.write(createRecord(TYPE.SEND, s.toString()));
  37. }
  38. }
  39. while (!thread.isInterrupted() && (inputLine = stream.read()) != null) {
  40. outputLine = protocol.processMessage(inputLine);
  41. log.write(createRecord(TYPE.RECEIVE, HelperUtils.byteToHexString(inputLine.get())));
  42. if (outputLine != null) {
  43. stream.write(outputLine);
  44. for (ByteArray s : outputLine) {
  45. log.write(createRecord(TYPE.SEND, HelperUtils.byteToHexString(s.get())));
  46. }
  47. }
  48. if (protocol.isClosed()) {
  49. break;
  50. }
  51. }
  52. }
  53. }