package com.netifera.platform.demo.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.netifera.platform.net.services.detection.INetworkServiceDetector;
import com.netifera.platform.net.services.detection.INetworkServiceDetectorProvider;
import com.netifera.platform.net.services.detection.INetworkServiceTrigger;
import com.netifera.platform.util.PortSet;
import com.netifera.platform.util.patternmatching.ISessionPattern;
import com.netifera.platform.util.patternmatching.Regex;
import com.netifera.platform.util.patternmatching.SessionPattern;
public class ServiceDetectorProvider implements INetworkServiceDetectorProvider {
private INetworkServiceDetector newDetector(final String protocol, final PortSet ports, final ISessionPattern pattern) {
return new INetworkServiceDetector() {
public Map<String, String> detect(String clientData,
String serverData) {
return pattern.match(clientData, serverData);
}
public PortSet getPorts() {
return ports;
}
public String getProtocol() {
return protocol;
}
@Override
public String toString() {
return ports.toString() + "/" + protocol + "\n" + pattern.toString();
}
};
}
private INetworkServiceDetector newDetector(String protocol, PortSet ports, String triggerPattern, String responsePattern, String serviceType, String product, Object versionGroup, Object os) {
Regex triggerRegex = new Regex(triggerPattern);
Regex responseRegex = new Regex(responsePattern);
responseRegex.add("serviceType", serviceType);
responseRegex.add("product", product);
if (os instanceof String) {
responseRegex.add("os", (String)os);
if (((String) os).matches(".*indow.*"))
responseRegex.add("arch", "i386"); // FIXME x86_64
} else if (os instanceof Integer) {
responseRegex.add((Integer)os, "os");
}
if (versionGroup != null) {
if (versionGroup instanceof String) {
responseRegex.add("version", (String)versionGroup);
} else if (versionGroup instanceof Integer) {
responseRegex.add((Integer)versionGroup, "version");
}
}
return newDetector(protocol,ports,new SessionPattern(triggerRegex, responseRegex));
}
public List<INetworkServiceDetector> getClientDetectors() {
return Collections.emptyList();
}
@SuppressWarnings("boxing")
public List<INetworkServiceDetector> getServerDetectors() {
List<INetworkServiceDetector> answer = new ArrayList<INetworkServiceDetector>();
answer.add(newDetector("tcp", new PortSet("1234"),
".*", "Netifera Test Service.*", "TEST", "Netifera Test Service", null, null));
return answer;
}
public List<INetworkServiceTrigger> getTriggers() {
return Collections.emptyList();
}
}