(self)
| 343 | return self.fronter._is_static_asset_url(url) |
| 344 | |
| 345 | async def start(self): |
| 346 | if self._warmup_before_listen: |
| 347 | log.info( |
| 348 | "Relay warmup in progress... waiting up to %.0fs before opening listeners", |
| 349 | self._warmup_timeout, |
| 350 | ) |
| 351 | ready = await self.fronter.wait_until_warm(timeout=self._warmup_timeout) |
| 352 | if ready: |
| 353 | log.info("Relay warmup complete — enabling HTTP/SOCKS listeners") |
| 354 | else: |
| 355 | log.warning( |
| 356 | "Relay warmup timed out after %.0fs — starting listeners anyway", |
| 357 | self._warmup_timeout, |
| 358 | ) |
| 359 | |
| 360 | http_srv = await asyncio.start_server(self._on_client, self.host, self.port) |
| 361 | socks_srv = None |
| 362 | |
| 363 | if self.socks_enabled: |
| 364 | try: |
| 365 | socks_srv = await asyncio.start_server( |
| 366 | self._on_socks_client, self.socks_host, self.socks_port |
| 367 | ) |
| 368 | except OSError as e: |
| 369 | log.error("SOCKS5 listener failed on %s:%d: %s", |
| 370 | self.socks_host, self.socks_port, e) |
| 371 | |
| 372 | self._servers = [s for s in (http_srv, socks_srv) if s] |
| 373 | |
| 374 | log.info( |
| 375 | "HTTP proxy listening on %s:%d", |
| 376 | self.host, self.port, |
| 377 | ) |
| 378 | if socks_srv: |
| 379 | log.info( |
| 380 | "SOCKS5 proxy listening on %s:%d", |
| 381 | self.socks_host, self.socks_port, |
| 382 | ) |
| 383 | |
| 384 | # Kick off adblock refresh in the background — won't block startup. |
| 385 | if self._adblock_urls: |
| 386 | asyncio.create_task(self._refresh_adblock_lists()) |
| 387 | |
| 388 | try: |
| 389 | async with http_srv: |
| 390 | if socks_srv: |
| 391 | async with socks_srv: |
| 392 | await asyncio.gather( |
| 393 | http_srv.serve_forever(), |
| 394 | socks_srv.serve_forever(), |
| 395 | ) |
| 396 | else: |
| 397 | await http_srv.serve_forever() |
| 398 | except asyncio.CancelledError: |
| 399 | raise |
| 400 | |
| 401 | async def stop(self): |
| 402 | """Shut down all listeners and release relay resources.""" |
no test coverage detected