package com.limegroup.gnutella.filters;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.limewire.core.settings.FilterSettings;
import org.limewire.io.IP;
import org.limewire.io.NetworkInstanceUtils;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class HostileFilter extends AbstractIPFilter {
private static final Log LOG = LogFactory.getLog(HostileFilter.class);
private volatile IPList hostileHosts = new IPList();
private final NetworkInstanceUtils networkInstanceUtils;
@Inject
public HostileFilter(NetworkInstanceUtils networkInstanceUtils) {
this.networkInstanceUtils = networkInstanceUtils;
}
/**
* Refresh the IPFilter's instance.
*/
@Override
public void refreshHosts(LoadCallback callback) {
refreshHosts();
callback.spamFilterLoaded();
}
@Override
public void refreshHosts() {
LOG.debug("Refreshing hostile IP filter");
IPList newHostile = new IPList();
if(!FilterSettings.USE_NETWORK_FILTER.getValue()) {
hostileHosts = newHostile;
return;
}
// Load hostile IPs from setting, making sure the list is valid
String [] allHosts = FilterSettings.HOSTILE_IPS.get();
try {
for(String ip : allHosts)
newHostile.add(new IP(ip));
if(newHostile.isValidFilter(false, networkInstanceUtils)) {
LOG.debug("Filter was valid");
hostileHosts = newHostile;
} else {
LOG.debug("Filter was invalid");
}
} catch(IllegalArgumentException badSimpp){
LOG.debug("SIMPP was invalid", badSimpp);
}
}
@Override
public boolean hasBlacklistedHosts() {
return !hostileHosts.isEmpty();
}
@Override
protected boolean allowImpl(IP ip) {
return !hostileHosts.contains(ip);
}
}