diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py index 185944da4..e45cc54c2 100644 --- a/libmproxy/cmdline.py +++ b/libmproxy/cmdline.py @@ -418,14 +418,14 @@ def common_options(parser): group = parser.add_argument_group("Client Replay") group.add_argument( "-c", "--client-replay", - action="store", dest="client_replay", default=None, metavar="PATH", + action="append", dest="client_replay", default=None, metavar="PATH", help="Replay client requests from a saved file." ) group = parser.add_argument_group("Server Replay") group.add_argument( "-S", "--server-replay", - action="store", dest="server_replay", default=None, metavar="PATH", + action="append", dest="server_replay", default=None, metavar="PATH", help="Replay server responses from a saved file." ) group.add_argument( diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index dc20d21fa..6aabf5ed5 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -498,11 +498,13 @@ class ConsoleMaster(flow.FlowMaster): self.eventlog = not self.eventlog self.view_flowlist() - def _readflow(self, path): - path = os.path.expanduser(path) + def _readflow(self, paths): try: - f = file(path, "rb") - flows = list(flow.FlowReader(f).stream()) + flows = [] + for path in paths: + path = os.path.expanduser(path) + with file(path, "rb") as f: + flows.extend(list(flow.FlowReader(f).stream())) except (IOError, flow.FlowReadError), v: return True, v.strerror return False, flows diff --git a/libmproxy/dump.py b/libmproxy/dump.py index 91ccb42b4..70f175f6a 100644 --- a/libmproxy/dump.py +++ b/libmproxy/dump.py @@ -143,11 +143,13 @@ class DumpMaster(flow.FlowMaster): if self.o.app: self.start_app(self.o.app_host, self.o.app_port) - def _readflow(self, path): - path = os.path.expanduser(path) + def _readflow(self, paths): try: - f = file(path, "rb") - flows = list(flow.FlowReader(f).stream()) + flows = [] + for path in paths: + path = os.path.expanduser(path) + with file(path, "rb") as f: + flows.extend(list(flow.FlowReader(f).stream())) except (IOError, flow.FlowReadError), v: raise DumpError(v.strerror) return flows diff --git a/test/test_dump.py b/test/test_dump.py index 927b5b505..69df912f5 100644 --- a/test/test_dump.py +++ b/test/test_dump.py @@ -82,17 +82,17 @@ class TestDumpMaster: p = os.path.join(t, "rep") self._flowfile(p) - o = dump.Options(server_replay=p, kill=True) + o = dump.Options(server_replay=[p], kill=True) m = dump.DumpMaster(None, o, outfile=cs) self._cycle(m, "content") self._cycle(m, "content") - o = dump.Options(server_replay=p, kill=False) + o = dump.Options(server_replay=[p], kill=False) m = dump.DumpMaster(None, o, outfile=cs) self._cycle(m, "nonexistent") - o = dump.Options(client_replay=p, kill=False) + o = dump.Options(client_replay=[p], kill=False) m = dump.DumpMaster(None, o, outfile=cs) def test_read(self):