if (!challengeManager.hasBeenChallenged(packet)) {
Packet challenge = challengeManager.createChallenge(packet, session);
route(challenge);
challengeManager.appendPacket(packet);
throw new PacketRejectedException("Robot Olympics: Must meet challenge.");
}
if (challengeManager.isChallengeResponse(packet)) {
if (challengeManager.checkResponse(packet, session)) {
String challengeId = challengeManager.makeChallengeId(packet);
for(Packet packetToSend : challengeManager.getPackets(challengeId)) {
route(packetToSend);
}
challengeManager.clearPackets(challengeId);
Message successMessage = new Message();
successMessage.setTo( packet.getFrom() );
successMessage.setFrom( packet.getTo() );
successMessage.setBody( "Anti-Spim Device: Thank you. Your messages have been forwarded.");
route(successMessage);
throw new PacketRejectedException("Robot Olympics: Passed challenge; discarding.");
} else {
Message failureMessage = new Message();
failureMessage.setTo( packet.getFrom() );
failureMessage.setFrom( packet.getTo() );
PacketError error = new PacketError(PacketError.Condition.not_acceptable,
PacketError.Type.cancel,
"Anti-Spim Device: Failed, but you can keep trying.");
failureMessage.setError(error);
route(failureMessage);
}
} else {
Message failureMessage = new Message();
failureMessage.setTo( packet.getFrom() );
failureMessage.setFrom( packet.getTo() );
failureMessage.setBody( "Anti-Spim Device: Please complete the robot challenge.");
route(failureMessage);
challengeManager.appendPacket(packet);
throw new PacketRejectedException("Robot Olympics: Must meet challenge.");
}
}
}