package se.chalmers.gdcn.network; import net.tomp2p.p2p.Peer; import net.tomp2p.peers.PeerAddress; import java.io.Serializable; /** * Created by Leif on 2014-03-29. * * Only ONE Passer object may be created for each peer! Handles all messages to and from this Peer. * * FAKE Sybil version of TaskPasser used for DOS attack */ public class TaskPasserDOS extends Passer { private final WorkerID myWorkerID; /** * Message passer for sending messages regarding tasks. OBS! Only ONE Passer may be present for a Peer. * * @param peer This peer */ public TaskPasserDOS(Peer peer) { super(peer); this.myWorkerID = new WorkerID(peer.getPeerBean().getKeyPair().getPublic()); } /** * Debug message. Just sends a request that is answered. * @param otherPeer peer * @param hello String of words */ public void sendHello(PeerAddress otherPeer, String hello){ sendRequest(otherPeer, new TaskMessage(TaskMessageType.HELLO, myWorkerID, hello), new OnReplyCommand() { @Override public void execute(Object replyMessageContent) { TaskMessage taskMessage = TaskMessage.check(replyMessageContent); System.out.println(taskMessage.getActualContent()); } }); } /** * Starts task process working for this peer * @param jobOwner Peer to work for */ public void requestChallenge(final PeerAddress jobOwner, final OnReplyCommand onReplyCommand){ sendRequest(jobOwner, new TaskMessage(TaskMessageType.REQUEST_CHALLENGE, myWorkerID, "S"), onReplyCommand); } /** * {@inheritDoc} */ @Override synchronized protected Serializable handleRequest(PeerAddress sender, Object messageContent) { TaskMessage taskMessage = TaskMessage.check(messageContent); WorkerID workerID = taskMessage.getSenderID(); switch(taskMessage.getType()){ case REQUEST_CHALLENGE: System.out.println("Received request for a Challenge"); return null; case REQUEST_TASK: System.out.println("Received request for a Task"); return null; case HELLO: System.out.println("Received Hello: "+taskMessage.getActualContent().toString()); return new TaskMessage(TaskMessageType.HELLO, myWorkerID, "Hi, I heard you said "+taskMessage.getActualContent()); default: throw new UnsupportedOperationException("Unsupported request: "+taskMessage.getType()); } } /** * {@inheritDoc} */ @Override synchronized protected void handleNoReply(PeerAddress sender, Object messageContent) { TaskMessage taskMessage = TaskMessage.check(messageContent); } }