package org.torproject.jtor.control.commands;
import org.torproject.jtor.control.ControlConnectionHandler;
import org.torproject.jtor.control.KeyNotFoundException;
import org.torproject.jtor.directory.Directory;
public class ControlCommandSetEvents {
public static void handleSetEvent(ControlConnectionHandler cch, String in) throws KeyNotFoundException {
String[] eventtypes = in.toLowerCase().split(" ");
if (eventtypes[0].equals("extended")) {
String[] temp = new String[eventtypes.length-1];
System.arraycopy(eventtypes, 1, temp, 0, temp.length);
eventtypes = temp;
}
for (String event : eventtypes) {
if (!verifyEvent(event)) {
throw new KeyNotFoundException();
}
}
final Directory directory = cch.getControlServer().getDirectory();
cch.getEventQueue().resetAllHandlers(directory);
for (String event : eventtypes) {
if (event.equals("newconsensus")) {
cch.getEventQueue().addNewConsensusHandler(directory);
}
}
}
public static String[] supportedEvents = {
"CIRC" , "STREAM" , "ORCONN" , "BW" , "DEBUG" ,
"INFO" , "NOTICE" , "WARN" , "ERR" , "NEWDESC" , "ADDRMAP" ,
"AUTHDIR_NEWDESCS" , "DESCCHANGED" , "STATUS_GENERAL" ,
"STATUS_CLIENT" , "STATUS_SERVER" , "GUARD" , "NS" , "STREAM_BW" ,
"CLIENTS_SEEN" , "NEWCONSENSUS"
};
private static boolean verifyEvent (String event) {
for (String sup : supportedEvents) {
if (event.equalsIgnoreCase(sup)) {
return true;
}
}
return false;
}
}