From fddf65730d4796f2d46c6487df9dfe6c6181802a Mon Sep 17 00:00:00 2001 From: gpotter2 <gabriel@potter.fr> Date: Thu, 23 Mar 2017 21:35:03 +0100 Subject: [PATCH] Fix automaton tests --- scapy/automaton.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/scapy/automaton.py b/scapy/automaton.py index 69b28324..b39e08b3 100644 --- a/scapy/automaton.py +++ b/scapy/automaton.py @@ -26,14 +26,14 @@ class ObjectPipe: def fileno(self): return self.rd def checkRecv(self): - return len(self.queue) != 0 + return len(self.queue) > 0 def send(self, obj): self.queue.append(obj) os.write(self.wr,"X") def write(self, obj): self.send(obj) def recv(self, n=0): - os.read(self.rd,1) + os.read(self.rd, 1) return self.queue.popleft() def read(self, n=0): return self.recv(n) @@ -53,7 +53,6 @@ class _instance_state: self.im_class = instance.im_class def __getattr__(self, attr): return getattr(self.im_func, attr) - def __call__(self, *args, **kargs): return self.im_func(self.im_self, *args, **kargs) def breaks(self): @@ -328,15 +327,20 @@ class Automaton_metaclass(type): def select_objects(inputs, remain): if WINDOWS: r = [] + def look_for_select(): + for fd in inputs: + if isinstance(fd, ObjectPipe) or isinstance(fd, Automaton._IO_fdwrapper): + if fd.checkRecv(): + r.append(fd) + else: + raise OSError("Not supported type of socket:" + str(type(fd))) + break def search_select(): while len(r) == 0: - for fd in inputs: - if isinstance(fd, ObjectPipe) or isinstance(fd, Automaton._IO_fdwrapper): - if fd.checkRecv(): - r.append(fd) - else: - raise OSError("Not supported type of socket:" + str(type(fd))) - break + look_for_select() + if remain == 0: + look_for_select() + return r t_select = threading.Thread(target=search_select) t_select.start() t_select.join(remain) @@ -750,7 +754,7 @@ class Automaton: with self.started: # Flush command pipes while True: - r = select_objects([self.cmdin, self.cmdout],0) + r = select_objects([self.cmdin, self.cmdout], 0) if not r: break for fd in r: -- GitLab