aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/flow.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2011-02-21 09:54:39 +1300
committerAldo Cortesi <aldo@nullcube.com>2011-02-21 09:54:39 +1300
commitfd4dd8cb6b9e4e2a0afe0ecbf1bff52c66ce4dba (patch)
tree47213a766006fdeb644d5225e6e0289980566bc6 /libmproxy/flow.py
parentdeb79a9c5a1794ffa5f67fdefdfe24b42eeef9f4 (diff)
downloadmitmproxy-fd4dd8cb6b9e4e2a0afe0ecbf1bff52c66ce4dba.tar.gz
mitmproxy-fd4dd8cb6b9e4e2a0afe0ecbf1bff52c66ce4dba.tar.bz2
mitmproxy-fd4dd8cb6b9e4e2a0afe0ecbf1bff52c66ce4dba.zip
First pass of playback function for mitmdump.
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r--libmproxy/flow.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 16a2714c..4025a30d 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -328,6 +328,27 @@ class FlowMaster(controller.Master):
def __init__(self, server, state):
controller.Master.__init__(self, server)
self.state = state
+ self._playback_state = None
+
+ def start_playback(self, flows):
+ self._playback_state = ServerPlaybackState()
+ self._playback_state.load(flows)
+
+ def 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_state:
+ rflow = self._playback_state.next_flow(flow)
+ if not rflow:
+ return None
+ response = proxy.Response.from_state(flow.request, rflow.response.get_state())
+ response.set_replay()
+ flow.response = response
+ flow.request.ack(response)
+ return True
+ return None
def handle_clientconnect(self, r):
self.state.clientconnect(r)