aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2015-06-02 12:09:07 +1200
committerAldo Cortesi <aldo@nullcube.com>2015-06-02 13:45:19 +1200
commit57a61ae8fd420744d616765d13ad93dec3b3aa52 (patch)
tree06006819f9cb7f67f2f1772fc2c6c6458c1baa35 /libmproxy
parent776f0a96693165896bee6251ede42ed642d064bb (diff)
downloadmitmproxy-57a61ae8fd420744d616765d13ad93dec3b3aa52.tar.gz
mitmproxy-57a61ae8fd420744d616765d13ad93dec3b3aa52.tar.bz2
mitmproxy-57a61ae8fd420744d616765d13ad93dec3b3aa52.zip
console: convert add_event to a signal.
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/console/__init__.py42
-rw-r--r--libmproxy/console/common.py1
-rw-r--r--libmproxy/console/contentview.py6
-rw-r--r--libmproxy/console/flowview.py1
-rw-r--r--libmproxy/console/signals.py9
-rw-r--r--libmproxy/console/tabs.py1
6 files changed, 36 insertions, 24 deletions
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index 7d4a1164..052ac7dd 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -220,11 +220,29 @@ class ConsoleMaster(flow.FlowMaster):
signals.call_in.connect(self.sig_call_in)
signals.pop_view_state.connect(self.sig_pop_view_state)
signals.push_view_state.connect(self.sig_push_view_state)
+ signals.sig_add_event.connect(self.sig_add_event)
def __setattr__(self, name, value):
self.__dict__[name] = value
signals.update_settings.send(self)
+ def sig_add_event(self, sender, e, level):
+ needed = dict(error=0, info=1, debug=2).get(level, 1)
+ if self.options.verbosity < needed:
+ return
+
+ if level == "error":
+ e = urwid.Text(("error", str(e)))
+ else:
+ e = urwid.Text(str(e))
+ self.eventlist.append(e)
+ if len(self.eventlist) > EVENTLOG_SIZE:
+ self.eventlist.pop(0)
+ self.eventlist.set_focus(len(self.eventlist) - 1)
+
+ def add_event(self, e, level):
+ signals.add_event(e, level)
+
def sig_call_in(self, sender, seconds, callback, args=()):
def cb(*_):
return callback(*args)
@@ -263,16 +281,16 @@ class ConsoleMaster(flow.FlowMaster):
status, val = s.run(method, f)
if val:
if status:
- self.add_event("Method %s return: %s" % (method, val), "debug")
+ signals.add_event("Method %s return: %s" % (method, val), "debug")
else:
- self.add_event(
+ signals.add_event(
"Method %s error: %s" %
(method, val[1]), "error")
def run_script_once(self, command, f):
if not command:
return
- self.add_event("Running script on flow: %s" % command, "debug")
+ signals.add_event("Running script on flow: %s" % command, "debug")
try:
s = script.Script(command, self)
@@ -280,7 +298,7 @@ class ConsoleMaster(flow.FlowMaster):
signals.status_message.send(
message = "Error loading script."
)
- self.add_event("Error loading script:\n%s" % v.args[0], "error")
+ signals.add_event("Error loading script:\n%s" % v.args[0], "error")
return
if f.request:
@@ -432,7 +450,7 @@ class ConsoleMaster(flow.FlowMaster):
if self.options.rfile:
ret = self.load_flows_path(self.options.rfile)
if ret and self.state.flow_count():
- self.add_event(
+ signals.add_event(
"File truncated or corrupted. "
"Loaded as many flows as possible.",
"error"
@@ -666,20 +684,6 @@ class ConsoleMaster(flow.FlowMaster):
def clear_events(self):
self.eventlist[:] = []
- def add_event(self, e, level="info"):
- needed = dict(error=0, info=1, debug=2).get(level, 1)
- if self.options.verbosity < needed:
- return
-
- if level == "error":
- e = urwid.Text(("error", str(e)))
- else:
- e = urwid.Text(str(e))
- self.eventlist.append(e)
- if len(self.eventlist) > EVENTLOG_SIZE:
- self.eventlist.pop(0)
- self.eventlist.set_focus(len(self.eventlist) - 1)
-
# Handlers
def handle_error(self, f):
f = flow.FlowMaster.handle_error(self, f)
diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py
index 683faf8e..57d4c994 100644
--- a/libmproxy/console/common.py
+++ b/libmproxy/console/common.py
@@ -285,7 +285,6 @@ def copy_flow(part, scope, flow, master, state):
return
try:
- master.add_event(str(len(data)))
pyperclip.copy(data)
except (RuntimeError, UnicodeDecodeError, AttributeError):
def save(k):
diff --git a/libmproxy/console/contentview.py b/libmproxy/console/contentview.py
index 2b3c6def..fd28a83a 100644
--- a/libmproxy/console/contentview.py
+++ b/libmproxy/console/contentview.py
@@ -13,7 +13,7 @@ import urwid
import netlib.utils
from netlib import odict
-from . import common
+from . import common, signals
from .. import utils, encoding
from ..contrib import jsbeautifier, html2text
from ..contrib.wbxml.ASCommandResponse import ASCommandResponse
@@ -507,7 +507,7 @@ def get(name):
return i
-def get_content_view(viewmode, hdrItems, content, limit, logfunc, is_request):
+def get_content_view(viewmode, hdrItems, content, limit, is_request):
"""
Returns a (msg, body) tuple.
"""
@@ -532,7 +532,7 @@ def get_content_view(viewmode, hdrItems, content, limit, logfunc, is_request):
except Exception:
s = traceback.format_exc()
s = "Content viewer failed: \n" + s
- logfunc(s, "error")
+ signals.add_event(s, "error")
ret = None
if not ret:
ret = get("Raw")(hdrs, content, limit)
diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py
index 43a40d69..c6c4c10d 100644
--- a/libmproxy/console/flowview.py
+++ b/libmproxy/console/flowview.py
@@ -182,7 +182,6 @@ class FlowView(tabs.Tabs):
tuple(tuple(i) for i in conn.headers.lst),
conn.content,
limit,
- self.master.add_event,
isinstance(conn, HTTPRequest)
)
return (description, text_objects)
diff --git a/libmproxy/console/signals.py b/libmproxy/console/signals.py
index c1bcf201..52f72d34 100644
--- a/libmproxy/console/signals.py
+++ b/libmproxy/console/signals.py
@@ -1,6 +1,15 @@
import blinker
# Show a status message in the action bar
+sig_add_event = blinker.Signal()
+def add_event(e, level):
+ sig_add_event.send(
+ None,
+ e=e,
+ level=level
+ )
+
+# Show a status message in the action bar
status_message = blinker.Signal()
# Prompt for input
diff --git a/libmproxy/console/tabs.py b/libmproxy/console/tabs.py
index 953f6b12..6e7d4d99 100644
--- a/libmproxy/console/tabs.py
+++ b/libmproxy/console/tabs.py
@@ -1,4 +1,5 @@
import urwid
+import signals
class Tabs(urwid.WidgetWrap):