diff options
author | Nikita Stupin <18281368+nikitastupin@users.noreply.github.com> | 2020-05-02 12:25:59 +0300 |
---|---|---|
committer | Nikita Stupin <18281368+nikitastupin@users.noreply.github.com> | 2020-05-02 12:25:59 +0300 |
commit | 7aaa6217839c5351e508caa73adf76e1b1a3b678 (patch) | |
tree | 9984c7c98f437032399cae9130c38e9f16eeaa06 | |
parent | 469bd32582f764f9a29607efa4f5b04bd87961fb (diff) | |
download | mitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.tar.gz mitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.tar.bz2 mitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.zip |
Merge adjacent TCP "messages"
-rw-r--r-- | mitmproxy/tools/console/flowview.py | 31 |
1 files 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) |