diff --git a/scapy/automaton.py b/scapy/automaton.py index 3c500131c28d78456188c54659e4b27646c8740f..84b1ff5b442f13e65a09f8d3be1a1e6c67e44dc7 100644 --- a/scapy/automaton.py +++ b/scapy/automaton.py @@ -36,6 +36,21 @@ class Message: for (k,v) in self.__dict__.iteritems() if not k.startswith("_")) +class instance_state: + def __init__(self, instance): + self.im_self = instance.im_self + self.im_func = instance.im_func + 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): + return self.im_self.add_breakpoints(self.im_func) + def intercepts(self): + return self.im_self.add_interception_points(self.im_func) + ############## ## Automata ## @@ -370,6 +385,12 @@ class Automaton: ioout.ioname = n setattr(self.io, n, self._IO_mixer(ioout,ioin)) setattr(self.oi, n, self._IO_mixer(ioin,ioout)) + + + for stname in self.states: + setattr(self, stname, + instance_state(getattr(self, stname))) + self.parse_args(*args, **kargs)