aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/console.py3
-rw-r--r--libmproxy/dump.py30
-rw-r--r--libmproxy/flow.py3
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(