]> git.ipfire.org Git - oddments/cappie.git/blobdiff - cappie/__init__.py
Merge branch 'master' of ssh://git.ipfire.org/pub/git/oddments/cappie
[oddments/cappie.git] / cappie / __init__.py
index e760f4ad6a5259cf8d7643c8edaf41ff4c13bddf..fcabae4564094ed8567be56a5f55b4e0c822e083 100644 (file)
@@ -32,6 +32,7 @@ import queue
 import util
 
 from errors import *
+from events import *
 
 def getAllInterfaces():
        filters = ("lo", "any")
@@ -93,12 +94,12 @@ class Cappie(object):
                        iface.start()
 
                while True:
-                       if not self.queue.is_alive():
+                       if not self.queue.isAlive():
                                self.log.critical("Queue thread died unexpectedly.")
                                return
 
                        for iface in self.__interfaces:
-                               if not iface.is_alive():
+                               if not iface.isAlive():
                                        self.log.critical("Thread died unexpectedly. %s" % iface.dev)
                                        return
                                time.sleep(60)
@@ -126,6 +127,10 @@ class Cappie(object):
 
                self.queue.shutdown()
 
+       @property
+       def db(self):
+               return self.queue.db
+
 
 class Interface(Thread):
        heartbeat = 0.1
@@ -140,8 +145,6 @@ class Interface(Thread):
                self.promisc = promisc
                self.queue = self.cappie.queue
 
-               self.db = Database(self)
-
                self.log.debug("Created new interface %s" % self.dev)
                
                self.__running = True
@@ -161,16 +164,13 @@ class Interface(Thread):
                for key, val in p.items():
                        self.log.debug("  %s: %s" % (key, val))
 
-               if not self.db.has(p["source_address"]):
-                       self.db.put(p["source_address"], "SOURCE_IP_ADDRESS", p["source_ip_address"])
+               self._handlePacket(p)
 
        def run(self):
                self.log.info("Starting interface %s" % self.dev)
 
                util.setprocname("interface %s" % self.dev)
 
-               self.db.open()
-
                p = pcapy.open_live(self.dev, self.mtu, self.promisc, 0)
                p.setfilter(self.filter)
                #p.loop(0, self._callback)
@@ -178,7 +178,6 @@ class Interface(Thread):
                p.setnonblock(1)
                while True:
                        if not self.__running:
-                               self.db.close()
                                return
                        
                        if p.dispatch(1, self._callback):
@@ -197,33 +196,13 @@ class Interface(Thread):
        def filter(self):
                return "arp or rarp"
 
+       def addEvent(self, event):
+               return self.cappie.queue.add(event)
 
-class Database(object):
-       def __init__(self, interface):
-               self.interface = interface
-               self.dev = self.interface.dev
-               self.log = self.interface.log
-
-               self.__data = {}
-
-       def open(self):
-               self.log.debug("Opened database for %s" % self.dev)
-
-       def close(self):
-               self.log.debug("Closing database for %s" % self.dev)
-               print self.__data
-
-       def get(self, mac):
-               if self.has(mac):
-                       return self.__data[mac]
-
-       def has(self, mac):
-               return self.__data.has_key(mac)
-
-       def put(self, mac, key, val):
-               if not self.has(mac):
-                       self.__data[mac] = {}
-
-               # TODO Check key for sanity
+       def _handlePacket(self, packet):
+               if packet.operation == OPERATION_RESPONSE:
+                       self.addEvent(EventResponseTrigger(self, packet))
+                       #self.addEvent(EventCheckDuplicate(self, packet))
 
-               self.__data[mac][key] = val
+               elif packet.operation == OPERATION_REQUEST:
+                       self.addEvent(EventRequestTrigger(self, packet))