aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/flow.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2011-03-05 13:03:26 +1300
committerAldo Cortesi <aldo@nullcube.com>2011-03-05 13:03:26 +1300
commit5da4099ddfee61b717c23a8c4227947ecc2f6c53 (patch)
treebca7946d9fc0a95474a91764f5d84d741317ca08 /libmproxy/flow.py
parent96471fde1d8e860264d2b774775ca2a999d63eb8 (diff)
downloadmitmproxy-5da4099ddfee61b717c23a8c4227947ecc2f6c53.tar.gz
mitmproxy-5da4099ddfee61b717c23a8c4227947ecc2f6c53.tar.bz2
mitmproxy-5da4099ddfee61b717c23a8c4227947ecc2f6c53.zip
Massage namespace to make room for client replay.
Mostly replay -> server_replay
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r--libmproxy/flow.py32
1 files changed, 24 insertions, 8 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index a4e0a79c..2e734500 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -409,7 +409,8 @@ class FlowMaster(controller.Master):
def __init__(self, server, state):
controller.Master.__init__(self, server)
self.state = state
- self.playback = None
+ self.server_playback = None
+ self.client_playback = None
self.scripts = {}
self.kill_nonreplay = False
self.stickycookie_state = False
@@ -434,21 +435,27 @@ class FlowMaster(controller.Master):
else:
self.stickycookie_state = None
- def start_playback(self, flows, kill, headers):
+ def start_client_playback(self, flows):
+ """
+ flows: A list of flows.
+ """
+ self.client_playback = ClientPlaybackState(flows)
+
+ def start_server_playback(self, flows, kill, headers):
"""
flows: A list of flows.
kill: Boolean, should we kill requests not part of the replay?
"""
- self.playback = ServerPlaybackState(headers, flows)
+ self.server_playback = ServerPlaybackState(headers, flows)
self.kill_nonreplay = kill
- def do_playback(self, flow):
+ def do_server_playback(self, flow):
"""
This method should be called by child classes in the handle_request
handler. Returns True if playback has taken place, None if not.
"""
- if self.playback:
- rflow = self.playback.next_flow(flow)
+ if self.server_playback:
+ rflow = self.server_playback.next_flow(flow)
if not rflow:
return None
response = proxy.Response.from_state(flow.request, rflow.response.get_state())
@@ -458,6 +465,11 @@ class FlowMaster(controller.Master):
return True
return None
+ def tick(self, q):
+ if self.client_playback:
+ self.client_playback.tick()
+ controller.Master.tick(self, q)
+
def handle_clientconnect(self, r):
self.state.clientconnect(r)
r.ack()
@@ -468,6 +480,8 @@ class FlowMaster(controller.Master):
def handle_error(self, r):
f = self.state.add_error(r)
+ if self.client_playback:
+ self.client_playback.clear(f)
r.ack()
return f
@@ -477,8 +491,8 @@ class FlowMaster(controller.Master):
self.stickycookie_state.handle_request(f)
if "request" in self.scripts:
self._runscript(f, self.scripts["request"])
- if self.playback:
- pb = self.do_playback(f)
+ if self.server_playback:
+ pb = self.do_server_playback(f)
if not pb:
if self.kill_nonreplay:
self.state.kill_flow(f)
@@ -488,6 +502,8 @@ class FlowMaster(controller.Master):
def handle_response(self, r):
f = self.state.add_response(r)
+ if self.client_playback:
+ self.client_playback.clear(f)
if not f:
r.ack()
if self.stickycookie_state: