MCPcopy
hub / github.com/urllib3/urllib3 / SocketProxyDummyServer

Class SocketProxyDummyServer

test/test_ssltransport.py:267–337  ·  view source on GitHub ↗

Simulates a proxy that performs a simple I/O loop on client/server socket.

Source from the content-addressed store, hash-verified

265
266
267class SocketProxyDummyServer(SocketDummyServerTestCase):
268 """
269 Simulates a proxy that performs a simple I/O loop on client/server
270 socket.
271 """
272
273 def __init__(
274 self, destination_server_host: str, destination_server_port: int
275 ) -> None:
276 self.destination_server_host = destination_server_host
277 self.destination_server_port = destination_server_port
278 self.server_ctx, _ = server_client_ssl_contexts()
279
280 def start_proxy_handler(self) -> None:
281 """
282 Socket handler for the proxy. Terminates the first TLS layer and tunnels
283 any bytes needed for client <-> server communicatin.
284 """
285
286 def proxy_handler(listener: socket.socket) -> None:
287 sock = listener.accept()[0]
288 with self.server_ctx.wrap_socket(sock, server_side=True) as client_sock:
289 upstream_sock = socket.create_connection(
290 (self.destination_server_host, self.destination_server_port)
291 )
292 self._read_write_loop(client_sock, upstream_sock)
293 upstream_sock.close()
294 client_sock.close()
295
296 self._start_server(proxy_handler)
297
298 def _read_write_loop(
299 self,
300 client_sock: socket.socket,
301 server_sock: socket.socket,
302 chunks: int = 65536,
303 ) -> None:
304 inputs = [client_sock, server_sock]
305 output = [client_sock, server_sock]
306
307 while inputs:
308 readable, writable, exception = select.select(inputs, output, inputs)
309
310 if exception:
311 # Error occurred with either of the sockets, time to
312 # wrap up, parent func will close sockets.
313 break
314
315 for s in readable:
316 read_socket, write_socket = None, None
317 if s == client_sock:
318 read_socket = client_sock
319 write_socket = server_sock
320 else:
321 read_socket = server_sock
322 write_socket = client_sock
323
324 # Ensure buffer is not full before writing

Callers 1

start_proxy_serverMethod · 0.85

Calls

no outgoing calls

Tested by 1

start_proxy_serverMethod · 0.68