Example #1
0
    def __init__(self,
                 main_loop_f,
                 port,
                 on_datagram_received_f,
                 task_interval=0.1,
                 floodbarrier_active=True):
        threading.Thread.__init__(self)
        self.daemon = True

        self._lock = threading.RLock()
        self._running = False
        self._call_asap_queue = []
        self._next_main_loop_call_ts = 0  # call immediately

        self._capturing = False
        self._captured = []

        self._main_loop_f = main_loop_f
        self._port = port
        self._on_datagram_received_f = on_datagram_received_f
        self.task_interval = task_interval
        self.floodbarrier_active = floodbarrier_active
        if self.floodbarrier_active:
            self.floodbarrier = FloodBarrier()

        self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.s.settimeout(self.task_interval)
        my_addr = ('', self._port)
        self.s.bind(my_addr)
 def __init__(self, task_interval=0.1, floodbarrier_active=True):
     threading.Thread.__init__(self)
     self.setDaemon(True)
     self.stop_flag = False
     self._lock = threading.RLock()
     self.task_interval = task_interval
     self.floodbarrier_active = floodbarrier_active
     self.tasks = TaskManager()
     if self.floodbarrier_active:
         self.floodbarrier = FloodBarrier()
Example #3
0
 def test(self):
     fb = FloodBarrier(checking_period=.4,
                       max_packets_per_period=4,
                       blocking_period=1)
     for ip in ts.IPS:
         for _ in xrange(4):
             assert not fb.ip_blocked(ip)
     # Every ip is on the limit
     assert fb.ip_blocked(ts.IPS[0])
     assert fb.ip_blocked(ts.IPS[1])
     # 0 and 3 blocked
     time.sleep(.2)
     # Half a period gone
     assert fb.ip_blocked(ts.IPS[0])
     # IP 0 refreshes the blocking (extra .2 seconds)
     time.sleep(.2)
     # The initial floods are forgotten
     # IP 0,1,3 are blocked
     assert fb.ip_blocked(ts.IPS[0])
     # The blocking doesn't get refreshed now (.8 secs to expire)
     assert fb.ip_blocked(ts.IPS[1])
     # The blocking doesn't get refreshed (.6 secs to expire)
     assert not fb.ip_blocked(ts.IPS[2])
     time.sleep(.7)
     # IP 0 is the only one still blocked (it got refreshed)
     assert fb.ip_blocked(ts.IPS[0])
     assert not fb.ip_blocked(ts.IPS[1])
     assert not fb.ip_blocked(ts.IPS[2])
     assert not fb.ip_blocked(ts.IPS[3])
     time.sleep(.4)
     for ip in ts.IPS:
         for _ in xrange(4):
             assert not fb.ip_blocked(ip)
     time.sleep(.4)
     for ip in ts.IPS:
         for _ in xrange(4):
             assert not fb.ip_blocked(ip)