import java.util.LinkedList; public class ChatProtocol { private LinkedList encryption = new LinkedList(); public static String decrypt(LinkedList enc, String s) { Iterator it = enc.descendingIterator(); while (it.hasNext()) { TransportEncryption e = (TransportEncryption) it.next(); s = e.decrypt(s); } return s; } protected String returnE(String s) { Iterator it = encryption.iterator(); TransportEncryption e = null; for ( ; it.hasNext(); ) { e = (TransportEncryption) it.next(); s = e.encrypt(s); } return s; } protected String handleSpecialAction(String action, String value) { String s = original(action, value); if (s != null) return s; if (action.equals("crypto")) { TransportEncryption e = EncryptionFactory.getFactory().getEncryption(value); if (e != null) { String res = returnE(OK_STRING); if (encryption.contains(e)) { encryption.remove(e); System.out.println("removed crypto " + e.getName()); } else { encryption.add(e); System.out.println("installed crypto " + e.getName()); } return res; } } return null; } public String preProcess(String inputLine) { inputLine = decrypt(encryption, inputLine); return inputLine; } }