diff options
-rw-r--r-- | libmproxy/console/flowlist.py | 5 | ||||
-rw-r--r-- | libmproxy/console/flowview.py | 6 | ||||
-rw-r--r-- | libmproxy/flow.py | 13 |
3 files changed, 16 insertions, 8 deletions
diff --git a/libmproxy/console/flowlist.py b/libmproxy/console/flowlist.py index 412a4ec2..e4c73740 100644 --- a/libmproxy/console/flowlist.py +++ b/libmproxy/console/flowlist.py @@ -125,13 +125,18 @@ class ConnectionItem(common.WWrap): self.master.currentflow = f self.master.focus_current() elif key == "r": + self.flow.backup() r = self.master.replay_request(self.flow) if r: self.master.statusbar.message(r) self.master.sync_list_view() elif key == "V": + if not self.flow.modified(): + self.master.statusbar.message("Flow not modified.") + return self.state.revert(self.flow) self.master.sync_list_view() + self.master.statusbar.message("Reverted.") elif key == "w": self.master.path_prompt( "Save flows: ", diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py index 1ec410ed..024a7ee1 100644 --- a/libmproxy/console/flowview.py +++ b/libmproxy/console/flowview.py @@ -460,13 +460,18 @@ class FlowView(common.WWrap): elif key == "p": self.view_prev_flow(self.flow) elif key == "r": + self.flow.backup() r = self.master.replay_request(self.flow) if r: self.master.statusbar.message(r) self.master.refresh_flow(self.flow) elif key == "V": + if not self.flow.modified(): + self.master.statusbar.message("Flow not modified.") + return self.state.revert(self.flow) self.master.refresh_flow(self.flow) + self.master.statusbar.message("Reverted.") elif key == "W": self.master.path_prompt( "Save this flow: ", @@ -502,6 +507,7 @@ class FlowView(common.WWrap): self.master.view_flowdetails(self.flow) elif key == "z": if conn: + self.flow.backup() e = conn.headers["content-encoding"] or ["identity"] if e[0] != "identity": conn.decode() diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 6444fb7e..571da836 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -760,6 +760,7 @@ class ClientConnect(controller.Msg): return self._get_state() == other._get_state() def _load_state(self, state): + self.close = True self.requestcount = state["requestcount"] def _get_state(self): @@ -1047,21 +1048,16 @@ class Flow: f._load_state(state) return f - def _get_state(self, nobackup=False): + def _get_state(self): 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, version = version.IVERSION ) - if nobackup: - d["backup"] = None - else: - d["backup"] = self._backup return d def _load_state(self, state): - self._backup = state["backup"] if self.request: self.request._load_state(state["request"]) else: @@ -1094,12 +1090,13 @@ class Flow: else: return False - def backup(self): + def backup(self, force=False): """ Save a backup of this Flow, which can be reverted to using a call to .revert(). """ - self._backup = self._get_state(nobackup=True) + if not self._backup: + self._backup = self._get_state() def revert(self): """ |