From 469bd32582f764f9a29607efa4f5b04bd87961fb Mon Sep 17 00:00:00 2001 From: Nikita Stupin <18281368+nikitastupin@users.noreply.github.com> Date: Fri, 1 May 2020 20:57:27 +0300 Subject: Integrate contentviews to TCP flow details --- mitmproxy/contentviews/__init__.py | 10 ++++++++++ mitmproxy/tools/console/flowview.py | 31 +++++++++++++------------------ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/mitmproxy/contentviews/__init__.py b/mitmproxy/contentviews/__init__.py index fc38543d..063b8cfe 100644 --- a/mitmproxy/contentviews/__init__.py +++ b/mitmproxy/contentviews/__init__.py @@ -116,6 +116,16 @@ def get_message_content_view(viewname, message, flow): return description, lines, error +def get_tcp_content_view(viewname: str, data: bytes): + viewmode = get(viewname) + if not viewmode: + viewmode = get("auto") + + description, lines, error = get_content_view(viewmode, data) + + return description, lines, error + + def get_content_view(viewmode: View, data: bytes, **metadata): """ Args: diff --git a/mitmproxy/tools/console/flowview.py b/mitmproxy/tools/console/flowview.py index 3fef70ce..65206d51 100644 --- a/mitmproxy/tools/console/flowview.py +++ b/mitmproxy/tools/console/flowview.py @@ -115,26 +115,21 @@ class FlowDetails(tabs.Tabs): if not flow.messages: return searchable.Searchable([urwid.Text(("highlight", "No messages."))]) - from_client = None - messages = [] - for message in flow.messages: - if message.from_client is not from_client: - messages.append(message.content) - from_client = message.from_client - else: - messages[-1] += message.content + viewmode = self.master.commands.call("console.flowview.mode") - from_client = flow.messages[0].from_client parts = [] - for message in messages: - parts.append( - ( - "head" if from_client else "key", - message - ) - ) - from_client = not from_client - return searchable.Searchable([urwid.Text(parts)]) + for message in flow.messages: + _, lines, _ = contentviews.get_tcp_content_view(viewmode, message.content) + + for line in lines: + if message.from_client: + line.insert(0, "--> ") + else: + line.insert(0, "<-- ") + + parts.append(urwid.Text(line)) + + return searchable.Searchable(parts) def view_details(self): return flowdetailview.flowdetails(self.view, self.flow) -- cgit v1.2.3