aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2012-04-02 13:24:51 +1200
committerAldo Cortesi <aldo@nullcube.com>2012-04-02 13:24:51 +1200
commitc02fdb24639c8c0fe89534205d48933de832287a (patch)
tree0a8574f469e995fd2993d6ebabcb5557fea94511 /libmproxy
parentf13e2213eaeb464b0adfef2b560bdee926f2b8db (diff)
downloadmitmproxy-c02fdb24639c8c0fe89534205d48933de832287a.tar.gz
mitmproxy-c02fdb24639c8c0fe89534205d48933de832287a.tar.bz2
mitmproxy-c02fdb24639c8c0fe89534205d48933de832287a.zip
Refactor proxy.Server to fix a crash when replaying with -n
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/console/__init__.py8
-rw-r--r--libmproxy/controller.py4
-rw-r--r--libmproxy/proxy.py17
3 files changed, 21 insertions, 8 deletions
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")