aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Stupin <18281368+nikitastupin@users.noreply.github.com>2020-05-01 20:57:27 +0300
committerNikita Stupin <18281368+nikitastupin@users.noreply.github.com>2020-05-01 20:57:27 +0300
commit469bd32582f764f9a29607efa4f5b04bd87961fb (patch)
treef42dfd75cb8888de6a5c0f46dd8bb5545a081d0c
parenta802899491ba87218d7878bc4ac73dcf59c9275e (diff)
downloadmitmproxy-469bd32582f764f9a29607efa4f5b04bd87961fb.tar.gz
mitmproxy-469bd32582f764f9a29607efa4f5b04bd87961fb.tar.bz2
mitmproxy-469bd32582f764f9a29607efa4f5b04bd87961fb.zip
Integrate contentviews to TCP flow details
-rw-r--r--mitmproxy/contentviews/__init__.py10
-rw-r--r--mitmproxy/tools/console/flowview.py31
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)