diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2011-02-16 16:03:22 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2011-02-16 16:03:22 +1300 |
commit | 27f0765cdd6bb29fe1dd00aaa24b17ae50888368 (patch) | |
tree | ba7c7303d0397e6c315786c71f6fcb5f46082bf2 /libmproxy/flow.py | |
parent | 33dac700fa5bc1779699d3d8f751e2e337f6f31a (diff) | |
download | mitmproxy-27f0765cdd6bb29fe1dd00aaa24b17ae50888368.tar.gz mitmproxy-27f0765cdd6bb29fe1dd00aaa24b17ae50888368.tar.bz2 mitmproxy-27f0765cdd6bb29fe1dd00aaa24b17ae50888368.zip |
Extract flow-specific Master operations into FlowMaster.
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r-- | libmproxy/flow.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 921abe1d..e791055f 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -4,6 +4,7 @@ """ import subprocess, base64, sys, json import proxy, threading, netstring +import controller class RunException(Exception): def __init__(self, msg, returncode, errout): @@ -286,6 +287,41 @@ class State: #end nocover +class FlowMaster(controller.Master): + def __init__(self, server, state): + controller.Master.__init__(self, server) + self.state = state + + # Handlers + def handle_clientconnection(self, r): + f = Flow(r) + self.state.add_browserconnect(f) + r.ack() + return f + + def handle_error(self, r): + f = self.state.add_error(r) + if not f: + r.ack() + return f + + def handle_request(self, r): + f = self.state.add_request(r) + if not f: + r.ack() + return f + + def handle_response(self, r): + f = self.state.add_response(r) + if not f: + r.ack() + else: + if f.match(self.stickycookie): + hid = (f.request.host, f.request.port) + if f.response.headers.has_key("set-cookie"): + self.stickyhosts[hid] = f.response.headers["set-cookie"] + self.process_flow(f, r) + class FlowWriter: def __init__(self, fo): |