diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2011-02-06 10:28:43 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2011-02-06 10:28:43 +1300 |
commit | d0c2d9480cdf80c680937c97c790add902f718fa (patch) | |
tree | c4212c65cca8b755009e8bb6355f4270256f1605 /libmproxy/flow.py | |
parent | 2ad4c5adf38e627fc4534548610235ce1c590c66 (diff) | |
download | mitmproxy-d0c2d9480cdf80c680937c97c790add902f718fa.tar.gz mitmproxy-d0c2d9480cdf80c680937c97c790add902f718fa.tar.bz2 mitmproxy-d0c2d9480cdf80c680937c97c790add902f718fa.zip |
Also serialize ClientConnection and flow backups.
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r-- | libmproxy/flow.py | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index e88b8f16..ffcbed63 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -92,21 +92,28 @@ class Flow: ) return bson.dumps(data) - def get_state(self): - return dict( + def get_state(self, nobackup=False): + d = dict( request = self.request.get_state() if self.request else None, response = self.response.get_state() if self.response else None, error = self.error.get_state() if self.error else None, + client_conn = self.client_conn.get_state() ) + if nobackup: + d["backup"] = None + else: + d["backup"] = self._backup + return d def load_state(self, state): + self.client_conn = proxy.ClientConnection.from_state(state["client_conn"]) + self._backup = state["backup"] if state["request"]: - self.request = proxy.Request.from_state(state["request"]) + self.request = proxy.Request.from_state(self.client_conn, state["request"]) if state["response"]: self.response = proxy.Response.from_state(self.request, state["response"]) if state["error"]: self.error = proxy.Error.from_state(state["error"]) - self.client_conn = self.request.client_conn @classmethod def from_state(klass, state): @@ -126,18 +133,11 @@ class Flow: return False def backup(self): - if not self._backup: - self._backup = [ - self.client_conn.copy(), - self.request.copy() if self.request else None, - self.response.copy() if self.response else None, - self.error.copy() if self.error else None, - ] + self._backup = self.get_state(nobackup=True) def revert(self): if self._backup: - restore = [i.copy() if i else None for i in self._backup] - self.client_conn, self.request, self.response, self.error = restore + self.load_state(self._backup) self._backup = None def match(self, pattern): |