aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/script.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/script.py')
-rw-r--r--libmproxy/script.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/libmproxy/script.py b/libmproxy/script.py
index 623f2b92..d1b714db 100644
--- a/libmproxy/script.py
+++ b/libmproxy/script.py
@@ -1,4 +1,5 @@
-import os, traceback
+import os, traceback, threading
+import controller
class ScriptError(Exception):
pass
@@ -59,3 +60,26 @@ class Script:
return (False, (v, traceback.format_exc(v)))
else:
return (False, None)
+
+
+def _handle_concurrent_reply(fn, o, args=[], kwargs={}):
+ reply = o.reply
+ o.reply = controller.DummyReply()
+
+ def run():
+ fn(*args, **kwargs)
+ reply(o)
+ threading.Thread(target=run).start()
+
+
+def concurrent(fn):
+ if fn.func_name in ["request", "response", "error"]:
+ def _concurrent(ctx, flow):
+ r = getattr(flow, fn.func_name)
+ _handle_concurrent_reply(fn, r, [ctx, flow])
+ return _concurrent
+ elif fn.func_name in ["clientconnect", "clientdisconnect", "serverconnect"]:
+ def _concurrent(ctx, conn):
+ _handle_concurrent_reply(fn, conn, [ctx, conn])
+ return _concurrent
+ raise NotImplementedError("Concurrent decorator not supported for this method.") \ No newline at end of file