Added a "negate result" option
[sfa.git] / sfatables / exec.py
index ef0933d..4afcb48 100644 (file)
@@ -13,9 +13,8 @@ from sfatables.commands.List import *
 from sfatables.xmlrule import *
 
 class SFATablesRules:
-    sorted_rule_list = []
-
     def __init__(self, chain_name):
+        self.sorted_rule_list = []
         chain_dir_path = "%s/%s"%(sfatables_config,chain_name)
         rule_list = List().get_rule_list(chain_dir_path)
         for rule_number in rule_list:
@@ -25,7 +24,7 @@ class SFATablesRules:
     def apply(self, rspec):
         intermediate_rspec = rspec
         for rule in self.sorted_rule_list:
-            intermediate_rspec  = rule.apply(intermediate_rspec)
+            intermediate_rspec  = rule.apply_interpreted(intermediate_rspec)
 
         return intermediate_rspec
 
@@ -33,9 +32,44 @@ def main():
     incoming = SFATablesRules('INCOMING')
     outgoing = SFATablesRules('OUTGOING')
 
+    rspec = """
+<rspec>
+    <request-context>
+        <sfa><user><hrn>plc.princeton.sapan</hrn></user></sfa>
+    </request-context>
+
+    <sfatables-rule>
+            <argument>
+                <name>hrn</name>
+                <value>plc</value>
+            </argument>
+            <argument>
+                <name>whitelist</name>
+                <value>plc.princeton</value>
+            </argument>
+            <argument>
+                <name>blacklist</name>
+                <value>plc.tp</value>
+            </argument>
+    </sfatables-rule>
+    <request>
+        <nodespec>
+            <node name="plc.princeton.planetlab-01"/>
+            <node name="plc.princeton.planetlab-02"/>
+            <node name="plc.princeton.planetlab-03"/>
+            <node name="plc.princeton.planetlab-04"/>
+            <node name="plc.tp.planetlab3"/>
+        </nodespec>
+    </request>
+</rspec>
+    """
+
+    
     print "%d rules loaded for INCOMING chain\n"%len(incoming.sorted_rule_list)
     print "%d rules loaded for OUTGOING chain\n"%len(outgoing.sorted_rule_list)
 
+    newrspec = incoming.apply(rspec)
+    print newrspec
     return
 
 if __name__=="__main__":