diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2016-10-19 13:22:50 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2016-10-19 13:22:50 +1300 |
commit | bce387a5a0d52f682f479b11cb40ae0918e070c0 (patch) | |
tree | 4b96065dc5f7c7e904a731002a184ae890de4802 /mitmproxy/controller.py | |
parent | 264a09e7789500673282075b2f5b9956268f0cea (diff) | |
download | mitmproxy-bce387a5a0d52f682f479b11cb40ae0918e070c0.tar.gz mitmproxy-bce387a5a0d52f682f479b11cb40ae0918e070c0.tar.bz2 mitmproxy-bce387a5a0d52f682f479b11cb40ae0918e070c0.zip |
Kill flow.master - create master.Master
Also extract events into .events
Diffstat (limited to 'mitmproxy/controller.py')
-rw-r--r-- | mitmproxy/controller.py | 136 |
1 files changed, 1 insertions, 135 deletions
diff --git a/mitmproxy/controller.py b/mitmproxy/controller.py index a88500a8..27fb4a0c 100644 --- a/mitmproxy/controller.py +++ b/mitmproxy/controller.py @@ -1,45 +1,6 @@ import functools -import threading -import contextlib import queue - -from mitmproxy import addons -from mitmproxy import options -from . import ctx as mitmproxy_ctx -from netlib import basethread -from . import exceptions - - -Events = frozenset([ - "clientconnect", - "clientdisconnect", - "serverconnect", - "serverdisconnect", - - "tcp_start", - "tcp_message", - "tcp_error", - "tcp_end", - - "request", - "requestheaders", - "response", - "responseheaders", - "error", - - "intercept", - "resume", - - "websocket_handshake", - - "next_layer", - - "configure", - "done", - "log", - "start", - "tick", -]) +from mitmproxy import exceptions class LogEntry: @@ -83,101 +44,6 @@ class Log: self.master.add_log(text, level) -class Master: - """ - The master handles mitmproxy's main event loop. - """ - def __init__(self, opts, server): - self.options = opts or options.Options() - self.addons = addons.Addons(self) - self.event_queue = queue.Queue() - self.should_exit = threading.Event() - self.server = server - channel = Channel(self.event_queue, self.should_exit) - server.set_channel(channel) - - @contextlib.contextmanager - def handlecontext(self): - # Handlecontexts also have to nest - leave cleanup to the outermost - if mitmproxy_ctx.master: - yield - return - mitmproxy_ctx.master = self - mitmproxy_ctx.log = Log(self) - try: - yield - finally: - mitmproxy_ctx.master = None - mitmproxy_ctx.log = None - - def tell(self, mtype, m): - m.reply = DummyReply() - self.event_queue.put((mtype, m)) - - def add_log(self, e, level): - """ - level: debug, info, warn, error - """ - with self.handlecontext(): - self.addons("log", LogEntry(e, level)) - - def start(self): - self.should_exit.clear() - ServerThread(self.server).start() - - def run(self): - self.start() - try: - while not self.should_exit.is_set(): - # Don't choose a very small timeout in Python 2: - # https://github.com/mitmproxy/mitmproxy/issues/443 - # TODO: Lower the timeout value if we move to Python 3. - self.tick(0.1) - finally: - self.shutdown() - - def tick(self, timeout): - with self.handlecontext(): - self.addons("tick") - changed = False - try: - mtype, obj = self.event_queue.get(timeout=timeout) - if mtype not in Events: - raise exceptions.ControlException("Unknown event %s" % repr(mtype)) - handle_func = getattr(self, mtype) - if not callable(handle_func): - raise exceptions.ControlException("Handler %s not callable" % mtype) - if not handle_func.__dict__.get("__handler"): - raise exceptions.ControlException( - "Handler function %s is not decorated with controller.handler" % ( - handle_func - ) - ) - handle_func(obj) - self.event_queue.task_done() - changed = True - except queue.Empty: - pass - return changed - - def shutdown(self): - self.server.shutdown() - self.should_exit.set() - self.addons.done() - - -class ServerThread(basethread.BaseThread): - def __init__(self, server): - self.server = server - address = getattr(self.server, "address", None) - super().__init__( - "ServerThread ({})".format(repr(address)) - ) - - def run(self): - self.server.serve_forever() - - class Channel: """ The only way for the proxy server to communicate with the master |