diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2014-01-05 10:58:53 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2014-01-05 10:58:53 +1300 |
commit | a2261e3cf01121fb466bc91cd4117204187ba059 (patch) | |
tree | 02815dbb096ef29247fa82ea9cfee7dec039ac97 /libmproxy/flow.py | |
parent | 45eab17e0c35b9527dd8f68364fa577c61f33551 (diff) | |
download | mitmproxy-a2261e3cf01121fb466bc91cd4117204187ba059.tar.gz mitmproxy-a2261e3cf01121fb466bc91cd4117204187ba059.tar.bz2 mitmproxy-a2261e3cf01121fb466bc91cd4117204187ba059.zip |
Introduce file descriptor decorators for Request objects
Which lets us enable the apps again, now running from flow.py
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r-- | libmproxy/flow.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 59d8bde4..f5985197 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -331,6 +331,15 @@ class Request(HTTPMsg): self.stickycookie = False self.stickyauth = False + # Live attributes - not serialized + self.wfile, self.rfile = None, None + + def set_live(self, rfile, wfile): + self.wfile, self.rfile = wfile, rfile + + def is_live(self): + return bool(self.wfile) + def anticache(self): """ Modifies this request to remove headers that might produce a cached @@ -1397,7 +1406,6 @@ class FlowMaster(controller.Master): self.setheaders = SetHeaders() self.stream = None - app.mapp.config["PMASTER"] = self self.apps = AppRegistry() def start_app(self, host, port, external): @@ -1632,19 +1640,20 @@ class FlowMaster(controller.Master): return f def handle_request(self, r): - app = self.apps.get(r) - if app: - r.reply() - #err = app.serve(r, self.wfile) - #if err: - # self.add_event("Error in wsgi app. %s"%err, "error") - else: - f = self.state.add_request(r) - self.replacehooks.run(f) - self.setheaders.run(f) - self.run_script_hook("request", f) - self.process_new_request(f) - return f + if r.is_live(): + app = self.apps.get(r) + if app: + err = app.serve(r, r.wfile, **{"mitmproxy.master": self}) + if err: + self.add_event("Error in wsgi app. %s"%err, "error") + r.reply(proxy.KILL) + return + f = self.state.add_request(r) + self.replacehooks.run(f) + self.setheaders.run(f) + self.run_script_hook("request", f) + self.process_new_request(f) + return f def handle_response(self, r): f = self.state.add_response(r) |