/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.configuration;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* A {@link ConnectionFilter} that filters against a provided list of whitelisted IPs.
*
* @author Robert Mischke
*/
public class IPWhitelistConnectionFilter implements ConnectionFilter {
private Set<String> acceptedIps = new HashSet<String>();
@Override
public synchronized boolean isIpAllowedToConnect(String ip) {
return (acceptedIps == null) || acceptedIps.contains(ip);
}
/**
* Changes the configuration of this filter. This method is synchronized against concurrent queries. Using null as a parameter sets the
* filter into "allow all" mode.
*
* @param newAcceptedIps a collection of IPs to whitelist/accept/allow (the collection will be copied, not used); pass null to
* deactivate filtering (allow all)
*/
public synchronized void configure(Collection<String> newAcceptedIps) {
if (newAcceptedIps != null) {
this.acceptedIps = new HashSet<String>(newAcceptedIps);
} else {
this.acceptedIps = null;
}
}
/**
* @return a detached copy of the current list of whitelisted IPs, or "null" if the filter is in "allow all" mode
*/
public synchronized Set<String> getAcceptedIps() {
if (acceptedIps == null) {
return null;
}
return new HashSet<String>(acceptedIps);
}
}