From c02fdb24639c8c0fe89534205d48933de832287a Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Mon, 2 Apr 2012 13:24:51 +1200 Subject: Refactor proxy.Server to fix a crash when replaying with -n --- libmproxy/console/__init__.py | 8 +++----- libmproxy/controller.py | 4 +--- libmproxy/proxy.py | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) (limited to 'libmproxy') diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index 6940b482..c0700b56 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -150,7 +150,7 @@ class StatusBar(common.WWrap): r.append("[") r.append(("heading_key", "u")) r.append(":%s]"%self.master.stickyauth_txt) - if self.master.server and self.master.server.config.reverse_proxy: + if self.master.server.config.reverse_proxy: r.append("[") r.append(("heading_key", "P")) r.append(":%s]"%utils.unparse_url(*self.master.server.config.reverse_proxy)) @@ -187,7 +187,7 @@ class StatusBar(common.WWrap): t = [ ('heading', ("[%s]"%self.master.state.flow_count()).ljust(7)), ] - if self.master.server: + if self.master.server.bound: boundaddr = "[%s:%s]"%(self.master.server.address or "*", self.master.server.port) else: boundaddr = "" @@ -510,9 +510,7 @@ class ConsoleMaster(flow.FlowMaster): self.view_flowlist() - if self.server: - slave = controller.Slave(self.masterq, self.server) - slave.start() + self.server.start_slave(controller.Slave, self.masterq) if self.options.rfile: ret = self.load_flows(self.options.rfile) diff --git a/libmproxy/controller.py b/libmproxy/controller.py index dac2c82a..174a3c6e 100644 --- a/libmproxy/controller.py +++ b/libmproxy/controller.py @@ -83,9 +83,7 @@ class Master: def run(self): global should_exit should_exit = False - if self.server: - slave = Slave(self.masterq, self.server) - slave.start() + self.server.start_slave(Slave, self.masterq) while not should_exit: self.tick(self.masterq) self.shutdown() diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index 33e50890..c6a68ba3 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -478,6 +478,7 @@ ServerBase.daemon_threads = True # Terminate workers when main thread ter class ProxyServer(ServerBase): request_queue_size = 20 allow_reuse_address = True + bound = True def __init__(self, config, port, address=''): """ Raises ProxyServerError if there's a startup problem. @@ -491,6 +492,10 @@ class ProxyServer(ServerBase): self.certdir = tempfile.mkdtemp(prefix="mitmproxy") config.certdir = self.certdir + def start_slave(self, klass, masterq): + slave = klass(masterq, self) + slave.start() + def set_mqueue(self, q): self.masterq = q @@ -505,6 +510,18 @@ class ProxyServer(ServerBase): pass +class DummyServer: + bound = False + def __init__(self, config): + self.config = config + + def start_slave(self, klass, masterq): + pass + + def shutdown(self): + pass + + # Command-line utils def certificate_option_group(parser): group = optparse.OptionGroup(parser, "SSL") -- cgit v1.2.3