12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package de.tudarmstadt.informatik.hostage.protocol;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.IOException;
- import java.net.Socket;
- import java.util.ArrayList;
- import java.util.List;
- import de.tudarmstadt.informatik.hostage.wrapper.Packet;
- public class GhostProtocol implements Protocol {
-
- private boolean isClosed = false;
- @Override
- public int getDefaultPort() {
- return 5050;
- }
- @Override
- public TALK_FIRST whoTalksFirst() {
- return TALK_FIRST.CLIENT;
- }
- @Override
- public List<Packet> processMessage(Packet packet) {
- List<Packet> response = new ArrayList<Packet>();
- try {
- if(attacker == null) {
- attacker = new Socket("127.0.0.1", 5050);
- in = new BufferedInputStream(attacker.getInputStream());
- out = new BufferedOutputStream(attacker.getOutputStream());
- }
- if(attacker.isInputShutdown() || attacker.isOutputShutdown()) {
- in.close();
- out.close();
- attacker.close();
- isClosed = true;
- }
-
- out.write(packet.getMessage());
- out.flush();
-
- int availableBytes;
- while((availableBytes = in.available()) <= 0) {
- try {
- Thread.sleep(1);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- byte[] answer = new byte[availableBytes];
- in.read(answer);
- response.add(new Packet(answer));
- } catch (IOException e) {
- e.printStackTrace();
- }
- return response;
- }
- @Override
- public boolean isClosed() {
- return isClosed;
- }
- @Override
- public boolean isSecure() {
- return false;
- }
- @Override
- public Class<byte[]> getType() {
- return byte[].class;
- }
-
- @Override
- public String toString() {
- return "GhostProtocol";
- }
-
- Socket attacker;
- BufferedInputStream in;
- BufferedOutputStream out;
- }
|