aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/console/flowview.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/console/flowview.py')
-rw-r--r--libmproxy/console/flowview.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py
index 19917555..c0720652 100644
--- a/libmproxy/console/flowview.py
+++ b/libmproxy/console/flowview.py
@@ -1,15 +1,17 @@
from __future__ import absolute_import
import os
import sys
+import traceback
import urwid
from netlib import odict
from netlib.http.semantics import CONTENT_MISSING, Headers
-from . import common, grideditor, contentview, signals, searchable, tabs
+from . import common, grideditor, signals, searchable, tabs
from . import flowdetailview
-from .. import utils, controller
+from .. import utils, controller, contentview
from ..models import HTTPRequest, HTTPResponse, decoded
+from ..exceptions import ContentViewException
class SearchError(Exception):
@@ -179,15 +181,29 @@ class FlowView(tabs.Tabs):
limit = sys.maxsize
else:
limit = contentview.VIEW_CUTOFF
- description, text_objects = cache.get(
- contentview.get_content_view,
+ return cache.get(
+ self._get_content_view,
viewmode,
conn.headers,
conn.content,
limit,
isinstance(conn, HTTPRequest)
)
- return (description, text_objects)
+
+ def _get_content_view(self, viewmode, headers, content, limit, is_request):
+ try:
+ description, lines = contentview.get_content_view(
+ viewmode, headers, content, limit, is_request
+ )
+ except ContentViewException:
+ s = "Content viewer failed: \n" + traceback.format_exc()
+ signals.add_event(s, "error")
+ description, lines = contentview.get_content_view(
+ viewmode, headers, content, limit, is_request
+ )
+ description = description.replace("Raw", "Couldn't parse: falling back to Raw")
+ text_objects = [urwid.Text(l) for l in lines]
+ return description, text_objects
def viewmode_get(self):
override = self.state.get_flow_setting(