From 40e9067b831641820019ea808d6c0099a668a03c Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 12 Mar 2011 13:47:37 +1300 Subject: Handle invalid bind address specifications gracefully. --- libmproxy/console.py | 2 -- libmproxy/flow.py | 2 ++ libmproxy/proxy.py | 10 +++++++++- mitmdump | 7 ++++++- mitmproxy | 6 +++++- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/libmproxy/console.py b/libmproxy/console.py index f63115aa..e9992a0f 100644 --- a/libmproxy/console.py +++ b/libmproxy/console.py @@ -75,8 +75,6 @@ def format_flow(f, focus, extended=False, padding=2): txt.append(("method", "[replay] ")) elif f.modified(): txt.append(("method", "[edited] ")) - if not (f.response or f.error): - txt.append(("text", "waiting for response...")) if f.response: txt.append( diff --git a/libmproxy/flow.py b/libmproxy/flow.py index d555c926..4bcbbb97 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -560,11 +560,13 @@ class FlowWriter: s = json.dumps(d) self.ns.write(s) + class FlowReadError(Exception): @property def strerror(self): return self.args[0] + class FlowReader: def __init__(self, fo): self.fo = fo diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index bff67000..8c9302fe 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -726,14 +726,22 @@ class ProxyHandler(SocketServer.StreamRequestHandler): pass +class ProxyServerError(Exception): pass + ServerBase = SocketServer.ThreadingTCPServer ServerBase.daemon_threads = True # Terminate workers when main thread terminates class ProxyServer(ServerBase): request_queue_size = 20 allow_reuse_address = True def __init__(self, config, port, address=''): + """ + Raises ProxyServerError if there's a startup problem. + """ self.config, self.port, self.address = config, port, address - ServerBase.__init__(self, (address, port), ProxyHandler) + try: + ServerBase.__init__(self, (address, port), ProxyHandler) + except socket.error, v: + raise ProxyServerError('Error starting proxy server: ' + v.strerror) self.masterq = None self.certdir = tempfile.mkdtemp(prefix="mitmproxy") config.certdir = self.certdir diff --git a/mitmdump b/mitmdump index 881f99c2..598faac0 100755 --- a/mitmdump +++ b/mitmdump @@ -130,7 +130,12 @@ if __name__ == '__main__': stickycookie = stickycookie_filt config = proxy.process_certificate_option_group(parser, options) - server = proxy.ProxyServer(config, options.port, options.addr) + try: + server = proxy.ProxyServer(config, options.port, options.addr) + except proxy.ProxyServerError, v: + print >> sys.stderr, "mitmdump:", v.args[0] + sys.exit(1) + dumpopts = dump.Options( verbosity = options.verbose, wfile = options.wfile, diff --git a/mitmproxy b/mitmproxy index acc7a2ba..0b0cd336 100755 --- a/mitmproxy +++ b/mitmproxy @@ -71,7 +71,11 @@ if __name__ == '__main__': config = proxy.process_certificate_option_group(parser, options) - server = proxy.ProxyServer(config, options.port, options.addr) + try: + server = proxy.ProxyServer(config, options.port, options.addr) + except proxy.ProxyServerError, v: + print >> sys.stderr, "mitmproxy:", v.args[0] + sys.exit(1) m = console.ConsoleMaster(server, options) for i in args: -- cgit v1.2.3