aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Stupin <18281368+nikitastupin@users.noreply.github.com>2020-05-02 12:25:59 +0300
committerNikita Stupin <18281368+nikitastupin@users.noreply.github.com>2020-05-02 12:25:59 +0300
commit7aaa6217839c5351e508caa73adf76e1b1a3b678 (patch)
tree9984c7c98f437032399cae9130c38e9f16eeaa06
parent469bd32582f764f9a29607efa4f5b04bd87961fb (diff)
downloadmitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.tar.gz
mitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.tar.bz2
mitmproxy-7aaa6217839c5351e508caa73adf76e1b1a3b678.zip
Merge adjacent TCP "messages"
-rw-r--r--mitmproxy/tools/console/flowview.py31
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)