diff --git a/scapy.py b/scapy.py index fcd12087b0b6d9ccc28f6aa8c7b56ba7b9326f94..2bd48f7ba40fd0874a35e942920a4326a3c825e9 100755 --- a/scapy.py +++ b/scapy.py @@ -11396,16 +11396,18 @@ class Automaton: elif m.atmt_type == ATMT.TIMEOUT: self.timeout[m.atmt_state].append((m.atmt_timeout, m)) elif m.atmt_type == ATMT.ACTION: - self.actions[m.atmt_condname].append(m) + for c in m.atmt_cond: + self.actions[c].append(m) for v in self.timeout.itervalues(): v.sort(lambda (t1,f1),(t2,f2): cmp(t1,t2)) v.append((None, None)) for v in itertools.chain(self.conditions.itervalues(), - self.recv_conditions.itervalues(), - self.actions.itervalues()): + self.recv_conditions.itervalues()): v.sort(lambda c1,c2: cmp(c1.atmt_prio,c2.atmt_prio)) + for condname,actlst in self.actions.iteritems(): + actlst.sort(lambda c1,c2: cmp(c1.atmt_cond[condname], c2.atmt_cond[condname])) def get_members(self): members = {} @@ -11619,9 +11621,10 @@ class ATMT: @staticmethod def action(cond, prio=0): def deco(f,cond=cond): + if not hasattr(f,"atmt_type"): + f.atmt_cond = {} f.atmt_type = ATMT.ACTION - f.atmt_condname = cond.atmt_condname - f.atmt_prio = prio + f.atmt_cond[cond.atmt_condname] = prio return f return deco @staticmethod