package uc.protocols.hub;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ProtocolException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import uc.ConnectionHandler;
import uc.IUser;
import uc.protocols.ADCStatusMessage;
import uc.protocols.CPType;
public class CTM extends AbstractADCHubCommand {
/**
* supported protocols
*/
public static final List<String> SUPP = Arrays.asList(CPType.ADC.toString(),CPType.ADCS.toString());
public CTM() {
// protocol port token
setPattern(getHeader()+" ("+ADCTEXT+") ("+PORT+") ("+ADCTEXT+")",true);
}
//DCTM UVTR WU5G ADCS/0.10 54892 2046781604
public void handle(Hub hub,String command) throws ProtocolException, IOException {
if (hub.getFavHub().isChatOnly()) {
return;
}
IUser other = getOther(hub);
if (other == null) {
return;
}
String protocol = revReplaces(matcher.group(HeaderCapt+1));
InetSocketAddress isa = null;
if (other.getIp() != null) {
isa = new InetSocketAddress(other.getIp(),Integer.valueOf(matcher.group(HeaderCapt+2)));
}
logger.debug("Received ctm: "+command);
String token = revReplaces(matcher.group(HeaderCapt+3));
if (!SUPP.contains(protocol)) {
HashMap<Flag,String> flags = new HashMap<Flag,String>();
flags.put(Flag.TO, token);
flags.put(Flag.PR, protocol);
ADCStatusMessage adcsm= new ADCStatusMessage("Protocol Unsupported "+protocol,
ADCStatusMessage.RECOVERABLE,
ADCStatusMessage.ProtocolTransferProtocolUnsupported,flags);
STA.sendSTAtoUser(hub, other,adcsm);
logger.debug("command: "+command);
} else if (isa != null) {
hub.ctmReceived(isa,other,CPType.fromString(protocol), token);
}
}
public static void sendCTM(Hub hub,IUser target,CPType protocol,String token) {
//protocols ADC/1.0 or ADCS/0.10
ConnectionHandler ch = hub.getIdentity().getConnectionHandler();
IUser self = hub.getSelf();
String ctm = "DCTM "+SIDToStr(self.getSid())+" "+SIDToStr(target.getSid())
+" "+doReplaces(protocol.toString())+" "+ch.getPort(protocol.isEncrypted())
+" "+doReplaces(token)+"\n";
hub.sendUnmodifiedRaw(ctm);
logger.debug("Sending ctm: "+ctm);
}
}