package com.netifera.platform.net.internal.services.sniffing; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; import com.netifera.platform.net.services.credentials.Credential; import com.netifera.platform.net.services.sniffing.ICredentialSniffer; import com.netifera.platform.net.services.sniffing.ICredentialSnifferProvider; import com.netifera.platform.net.services.sniffing.ICredentialSnifferService; public class CredentialSnifferService implements ICredentialSnifferService { private final Map<String, ICredentialSniffer> sniffers = new HashMap<String, ICredentialSniffer>(); protected void registerCredentialSniffers(ICredentialSnifferProvider provider) { for (ICredentialSniffer sniffer: provider.getSniffers()) for (String serviceType: sniffer.getServiceTypes()) { sniffers.put(serviceType, sniffer); } } protected void unregisterCredentialSniffers(ICredentialSnifferProvider provider) { // TODO } public Credential sniff(String serviceType, String clientData, String serverData) { ICredentialSniffer sniffer = sniffers.get(serviceType); if (sniffer == null) return null; return sniffer.sniff(clientData, serverData); } public Credential sniff(String serviceType, ByteBuffer clientBuffer, ByteBuffer serverBuffer) { String clientString; String serverString; if (clientBuffer != null && clientBuffer.remaining() > 0) { clientString = stringFromByteBuffer(clientBuffer); } else { clientString = ""; } if (serverBuffer != null && serverBuffer.remaining() > 0) { serverString = stringFromByteBuffer(serverBuffer); } else { serverString = ""; } if (clientString.length() == 0 && serverString.length() == 0) { return null; } return sniff(serviceType, clientString, serverString); } private String stringFromByteBuffer(ByteBuffer buffer) { byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); try { return new String(bytes, "ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); // XXX throw new RuntimeException("Unsupported encoding: ISO-8859-1"); } } }