diff options
Diffstat (limited to 'libmproxy')
-rw-r--r-- | libmproxy/console.py | 3 | ||||
-rw-r--r-- | libmproxy/dump.py | 30 | ||||
-rw-r--r-- | libmproxy/flow.py | 3 |
3 files changed, 27 insertions, 9 deletions
diff --git a/libmproxy/console.py b/libmproxy/console.py index c14f1aef..895974d2 100644 --- a/libmproxy/console.py +++ b/libmproxy/console.py @@ -549,7 +549,7 @@ class ConnectionView(WWrap): path = os.path.expanduser(path) self.state.last_script = path try: - newflow, serr = self.flow.run_script(path) + serr = self.flow.run_script(path) except flow.RunException, e: if e.errout: serr = "Script error code: %s\n\n"%e.returncode + e.errout @@ -559,7 +559,6 @@ class ConnectionView(WWrap): if serr: serr = "Script output:\n\n" + serr self.master.spawn_external_viewer(serr, None) - self.flow.load_state(newflow.get_state()) self.master.refresh_connection(self.flow) diff --git a/libmproxy/dump.py b/libmproxy/dump.py index 6b8c886d..372e6ef6 100644 --- a/libmproxy/dump.py +++ b/libmproxy/dump.py @@ -8,6 +8,8 @@ class Options(object): __slots__ = [ "verbosity", "wfile", + "request_script", + "response_script", ] def __init__(self, **kwargs): for k, v in kwargs.items(): @@ -44,8 +46,24 @@ class DumpMaster(flow.FlowMaster): flow.FlowMaster.handle_error(self, r) r.ack() + def _runscript(self, f, script): + try: + ret = f.run_script(script) + if self.o.verbosity > 0: + print >> self.outfile, ret + except flow.RunException, e: + if e.errout: + eout = "Script output:\n" + self.indent(4, e.errout) + "\n" + else: + eout = "" + raise DumpError( + "%s: %s\n%s"%(script, e.args[0], eout) + ) + def handle_request(self, r): - flow.FlowMaster.handle_request(self, r) + f = flow.FlowMaster.handle_request(self, r) + if self.o.request_script: + self._runscript(f, self.o.request_script) r.ack() def indent(self, n, t): @@ -55,6 +73,8 @@ class DumpMaster(flow.FlowMaster): def handle_response(self, msg): f = flow.FlowMaster.handle_response(self, msg) if f: + if self.o.response_script: + self._runscript(f, self.o.response_script) msg.ack() if self.filt and not f.match(self.filt): return @@ -96,8 +116,6 @@ class DumpMaster(flow.FlowMaster): def run(self): try: return flow.FlowMaster.run(self) - except KeyboardInterrupt: - pass - except Exception, v: - traceback.print_exc() - self.shutdown() + except BaseException, v: + self.shutdown() + raise diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 63da0230..cea0ca1c 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -82,7 +82,8 @@ class Flow: p.returncode, se ) - return f, se + self.load_state(f.get_state()) + return se def get_state(self, nobackup=False): d = dict( |