/* ************************************************************************
#
# DivConq
#
# http://divconq.com/
#
# Copyright:
# Copyright 2014 eTimeline, LLC. All rights reserved.
#
# License:
# See the license.txt file in the project's top-level directory for details.
#
# Authors:
# * Andy White
#
************************************************************************ */
package divconq.net.acl;
import divconq.net.Subnet;
import divconq.xml.XElement;
public class AclRule {
protected Subnet subnet = null;
private AclKind kind = AclKind.Deny;
public AclKind check(byte[] address) {
if ((this.subnet == null) || this.subnet.match(address))
return this.kind;
// does not match filter, go to next rule
return AclKind.Unknown;
}
public boolean appliesTo(byte[] address) {
return (this.check(address) != AclKind.Unknown);
}
public void loadConfig(XElement rule) {
if ("Allow".equals(rule.getAttribute("Kind")))
this.kind = AclKind.Allow;
if (rule.hasAttribute("Cidr"))
try {
this.subnet = new Subnet(rule.getAttribute("Cidr"));
}
catch (Exception x) {
// TODO log bad rule
}
}
public void setSubnet(Subnet sn) {
this.subnet = sn;
}
public Subnet getSubnet() {
return this.subnet;
}
public void setKind(AclKind kind) {
this.kind = kind;
}
public AclKind getKind() {
return this.kind;
}
}