MCPcopy
hub / github.com/mitmproxy/mitmproxy / state_query

Method state_query

mitmproxy/proxy/layers/dns.py:149–184  ·  view source on GitHub ↗
(self, event: events.Event)

Source from the content-addressed store, hash-verified

147
148 @expect(events.DataReceived, events.ConnectionClosed)
149 def state_query(self, event: events.Event) -> layer.CommandGenerator[None]:
150 assert isinstance(event, events.ConnectionEvent)
151 from_client = event.connection is self.context.client
152
153 if isinstance(event, events.DataReceived):
154 msgs: List[dns.DNSMessage] = []
155 try:
156 msgs = self.unpack_message(event.data, from_client)
157 except struct.error as e:
158 yield commands.Log(f"{event.connection} sent an invalid message: {e}")
159 yield commands.CloseConnection(event.connection)
160 self._handle_event = self.state_done
161 else:
162 for msg in msgs:
163 try:
164 flow = self.flows[msg.id]
165 except KeyError:
166 flow = dns.DNSFlow(
167 self.context.client, self.context.server, live=True
168 )
169 self.flows[msg.id] = flow
170 if from_client:
171 yield from self.handle_request(flow, msg)
172 else:
173 yield from self.handle_response(flow, msg)
174
175 elif isinstance(event, events.ConnectionClosed):
176 other_conn = self.context.server if from_client else self.context.client
177 if other_conn.connected:
178 yield commands.CloseConnection(other_conn)
179 self._handle_event = self.state_done
180 for flow in self.flows.values():
181 flow.live = False
182
183 else:
184 raise AssertionError(f"Unexpected event: {event}")
185
186 @expect(events.DataReceived, events.ConnectionClosed)
187 def state_done(self, _) -> layer.CommandGenerator[None]:

Callers

nothing calls this directly

Calls 4

unpack_messageMethod · 0.95
handle_requestMethod · 0.95
handle_responseMethod · 0.95
valuesMethod · 0.80

Tested by

no test coverage detected