From 7aaa6217839c5351e508caa73adf76e1b1a3b678 Mon Sep 17 00:00:00 2001 From: Nikita Stupin <18281368+nikitastupin@users.noreply.github.com> Date: Sat, 2 May 2020 12:25:59 +0300 Subject: Merge adjacent TCP "messages" --- mitmproxy/tools/console/flowview.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/mitmproxy/tools/console/flowview.py b/mitmproxy/tools/console/flowview.py index 65206d51..7c6258cf 100644 --- a/mitmproxy/tools/console/flowview.py +++ b/mitmproxy/tools/console/flowview.py @@ -117,19 +117,40 @@ class FlowDetails(tabs.Tabs): viewmode = self.master.commands.call("console.flowview.mode") - parts = [] + # Merge adjacent TCP "messages". For detailed explanation of this code block see: + # https://github.com/mitmproxy/mitmproxy/pull/3970/files/469bd32582f764f9a29607efa4f5b04bd87961fb#r418670880 + merged_messages = [] for message in flow.messages: - _, lines, _ = contentviews.get_tcp_content_view(viewmode, message.content) + + if not merged_messages: + merged_messages.append({ + "content": message.content, + "from_client": message.from_client, + }) + continue + + if merged_messages[-1]["from_client"] == message.from_client: + merged_messages[-1]["content"] += message.content + else: + merged_messages.append({ + "content": message.content, + "from_client": message.from_client, + }) + + + widget_lines = [] + for message in merged_messages: + _, lines, _ = contentviews.get_tcp_content_view(viewmode, message["content"]) for line in lines: - if message.from_client: + if message["from_client"]: line.insert(0, "--> ") else: line.insert(0, "<-- ") - parts.append(urwid.Text(line)) + widget_lines.append(urwid.Text(line)) - return searchable.Searchable(parts) + return searchable.Searchable(widget_lines) def view_details(self): return flowdetailview.flowdetails(self.view, self.flow) -- cgit v1.2.3