|
|
|
|
|
|
|
|
import dns._features |
|
|
import dns.asyncbackend |
|
|
|
|
|
if dns._features.have("doq"): |
|
|
import aioquic.quic.configuration |
|
|
|
|
|
from dns._asyncbackend import NullContext |
|
|
from dns.quic._asyncio import ( |
|
|
AsyncioQuicConnection, |
|
|
AsyncioQuicManager, |
|
|
AsyncioQuicStream, |
|
|
) |
|
|
from dns.quic._common import AsyncQuicConnection, AsyncQuicManager |
|
|
from dns.quic._sync import SyncQuicConnection, SyncQuicManager, SyncQuicStream |
|
|
|
|
|
have_quic = True |
|
|
|
|
|
def null_factory( |
|
|
*args, |
|
|
**kwargs, |
|
|
): |
|
|
return NullContext(None) |
|
|
|
|
|
def _asyncio_manager_factory( |
|
|
context, *args, **kwargs |
|
|
): |
|
|
return AsyncioQuicManager(*args, **kwargs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_async_factories = {"asyncio": (null_factory, _asyncio_manager_factory)} |
|
|
|
|
|
if dns._features.have("trio"): |
|
|
import trio |
|
|
|
|
|
from dns.quic._trio import ( |
|
|
TrioQuicConnection, |
|
|
TrioQuicManager, |
|
|
TrioQuicStream, |
|
|
) |
|
|
|
|
|
def _trio_context_factory(): |
|
|
return trio.open_nursery() |
|
|
|
|
|
def _trio_manager_factory(context, *args, **kwargs): |
|
|
return TrioQuicManager(context, *args, **kwargs) |
|
|
|
|
|
_async_factories["trio"] = (_trio_context_factory, _trio_manager_factory) |
|
|
|
|
|
def factories_for_backend(backend=None): |
|
|
if backend is None: |
|
|
backend = dns.asyncbackend.get_default_backend() |
|
|
return _async_factories[backend.name()] |
|
|
|
|
|
else: |
|
|
have_quic = False |
|
|
|
|
|
from typing import Any |
|
|
|
|
|
class AsyncQuicStream: |
|
|
pass |
|
|
|
|
|
class AsyncQuicConnection: |
|
|
async def make_stream(self) -> Any: |
|
|
raise NotImplementedError |
|
|
|
|
|
class SyncQuicStream: |
|
|
pass |
|
|
|
|
|
class SyncQuicConnection: |
|
|
def make_stream(self) -> Any: |
|
|
raise NotImplementedError |
|
|
|