| 42 | |
| 43 | |
| 44 | class FlowDetails(tabs.Tabs): |
| 45 | def __init__(self, master): |
| 46 | self.master = master |
| 47 | super().__init__([]) |
| 48 | self.show() |
| 49 | self.last_displayed_body = None |
| 50 | self.last_displayed_websocket_messages = None |
| 51 | contentviews.registry.on_change.connect(self.contentview_changed) |
| 52 | |
| 53 | @property |
| 54 | def view(self): |
| 55 | return self.master.view |
| 56 | |
| 57 | @property |
| 58 | def flow(self) -> mitmproxy.flow.Flow: |
| 59 | return self.master.view.focus.flow |
| 60 | |
| 61 | def contentview_changed(self, view): |
| 62 | # this is called when a contentview addon is live-reloaded. |
| 63 | # we clear our cache and then rerender |
| 64 | self._get_content_view.cache_clear() |
| 65 | if self.master.window.current_window("flowview"): |
| 66 | self.show() |
| 67 | |
| 68 | def focus_changed(self): |
| 69 | f = self.flow |
| 70 | if f: |
| 71 | if isinstance(f, http.HTTPFlow): |
| 72 | if f.websocket: |
| 73 | self.tabs = [ |
| 74 | (self.tab_http_request, self.view_request), |
| 75 | (self.tab_http_response, self.view_response), |
| 76 | (self.tab_websocket_messages, self.view_websocket_messages), |
| 77 | (self.tab_details, self.view_details), |
| 78 | ] |
| 79 | else: |
| 80 | self.tabs = [ |
| 81 | (self.tab_http_request, self.view_request), |
| 82 | (self.tab_http_response, self.view_response), |
| 83 | (self.tab_details, self.view_details), |
| 84 | ] |
| 85 | elif isinstance(f, tcp.TCPFlow): |
| 86 | self.tabs = [ |
| 87 | (self.tab_tcp_stream, self.view_message_stream), |
| 88 | (self.tab_details, self.view_details), |
| 89 | ] |
| 90 | elif isinstance(f, udp.UDPFlow): |
| 91 | self.tabs = [ |
| 92 | (self.tab_udp_stream, self.view_message_stream), |
| 93 | (self.tab_details, self.view_details), |
| 94 | ] |
| 95 | elif isinstance(f, dns.DNSFlow): |
| 96 | self.tabs = [ |
| 97 | (self.tab_dns_request, self.view_dns_request), |
| 98 | (self.tab_dns_response, self.view_dns_response), |
| 99 | (self.tab_details, self.view_details), |
| 100 | ] |
| 101 | self.show() |
no outgoing calls
searching dependent graphs…