package de.tudarmstadt.informatik.hostage.handler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.List; import android.content.SharedPreferences; import android.preference.PreferenceManager; import de.tudarmstadt.informatik.hostage.HoneyListener; import de.tudarmstadt.informatik.hostage.HoneyService; import de.tudarmstadt.informatik.hostage.commons.HelperUtils; import de.tudarmstadt.informatik.hostage.io.ByteArrayReaderWriter; import de.tudarmstadt.informatik.hostage.io.ReaderWriter; import de.tudarmstadt.informatik.hostage.logging.Record.TYPE; import de.tudarmstadt.informatik.hostage.protocol.Protocol; import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST; import de.tudarmstadt.informatik.hostage.wrapper.ByteArray; /** * Handles the socket connections for byte arrays. * @author Mihai Plasoianu */ public class ByteArrayHandler extends AbstractHandler { /** Defined time until timeout */ private int SLEEPTIME; public ByteArrayHandler(HoneyService service, HoneyListener listener, Protocol protocol, Socket client) { super(service, listener, protocol, client); SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(service); SLEEPTIME = pref.getInt("sleeptime", 500); } @Override protected void talkToClient(InputStream in, OutputStream out) throws IOException { ReaderWriter stream = new ByteArrayReaderWriter(in, out, SLEEPTIME); ByteArray inputLine; List outputLine; if (protocol.whoTalksFirst() == TALK_FIRST.SERVER) { outputLine = protocol.processMessage(null); stream.write(outputLine); for (ByteArray s : outputLine) { log.write(createRecord(TYPE.SEND, HelperUtils.bytesToHexString(s.get()))); } } while (!thread.isInterrupted() && (inputLine = stream.read()) != null) { outputLine = protocol.processMessage(inputLine); log.write(createRecord(TYPE.RECEIVE, HelperUtils.bytesToHexString(inputLine.get()))); if (outputLine != null) { stream.write(outputLine); for (ByteArray s : outputLine) { log.write(createRecord(TYPE.SEND, HelperUtils.bytesToHexString(s.get()))); } } if (protocol.isClosed()) { break; } } } }