o
    RfM                      @   s  d Z ddlZddlZddlZddlZddlZddlZddlZej	
ds(eddd ZejjZG dd dejjZG d	d
 d
ejjZej	
drzddlZddlZddlZejZejjjZddlmZmZmZ G dd deZG dd dej Z!nejj"Z!G dd dejj#Z#dS )z$trio async I/O library query support    Ntrioztrio not found or too oldc                 C   s   | d ur	t | S tj S N)r   move_on_afterdns_asyncbackendNullContexttimeout r
   J/home/ubuntu/webapp/venv/lib/python3.10/site-packages/dns/_trio_backend.py_maybe_timeout   s   

r   c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )DatagramSocketc                    s   t  |j || _d S r   )super__init__familysocket)selfr   	__class__r
   r   r   !   s   
zDatagramSocket.__init__c                    sL   t | | j||I d H W  d    S 1 sw   Y  tjj|dNr   )r   r   sendtor   	exceptionTimeout)r   whatdestinationr	   r
   r
   r   r   %   s   
 zDatagramSocket.sendtoc                    J   t | | j|I d H W  d    S 1 sw   Y  tjj|dr   )r   r   recvfromr   r   r   r   sizer	   r
   r
   r   r   ,   
   
 zDatagramSocket.recvfromc                    s   | j   d S r   )r   closer   r
   r
   r   r    1   s   zDatagramSocket.closec                       | j  S r   )r   getpeernamer!   r
   r
   r   r#   4      
zDatagramSocket.getpeernamec                    r"   r   )r   getsocknamer!   r
   r
   r   r%   7   r$   zDatagramSocket.getsocknamec                       t r   NotImplementedErrorr   r	   r
   r
   r   getpeercert:   s   zDatagramSocket.getpeercert)__name__
__module____qualname__r   r   r   r    r#   r%   r*   __classcell__r
   r
   r   r   r       s    r   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )StreamSocketFc                 C   s   || _ || _|| _d S r   )r   streamtls)r   r   r0   r1   r
   r
   r   r   ?   s   
zStreamSocket.__init__c                    r   r   )r   r0   send_allr   r   r   )r   r   r	   r
   r
   r   sendallD   r   zStreamSocket.sendallc                    r   r   )r   r0   receive_somer   r   r   r   r
   r
   r   recvI   r   zStreamSocket.recvc                    s   | j  I d H  d S r   )r0   acloser!   r
   r
   r   r    N      zStreamSocket.closec                    "   | j r| jjj S | jj S r   )r1   r0   transport_streamr   r#   r!   r
   r
   r   r#   Q      zStreamSocket.getpeernamec                    r8   r   )r1   r0   r9   r   r%   r!   r
   r
   r   r%   W   r:   zStreamSocket.getsocknamec                    sN   | j r%t| | j I d H  W d    n1 sw   Y  | j S tr   )r1   r   r0   do_handshaker*   r(   r)   r
   r
   r   r*   ]   s   

zStreamSocket.getpeercertN)F)
r+   r,   r-   r   r3   r5   r    r#   r%   r*   r
   r
   r
   r   r/   >   s    
r/   doh)_compute_times_expiration_for_this_attempt
_remainingc                       s<   e Zd Z fddZ	d
ddZ	d
ddZdd	 Z  ZS )_NetworkBackendc                    s&   t    || _|| _|| _|| _d S r   )r   r   _local_port	_resolver_bootstrap_address_family)r   resolver
local_portbootstrap_addressr   r   r
   r   r   q   s
   

z_NetworkBackend.__init__Nc              	      s  g }t |\}}tj|r|| n+| jd ur!|| j nt|}| j}	|r0tj|}	| j	j
||	|dI d H }
|
 }|D ]F}z;tj|}|d usT| jdkrZ|| jf}nd }||f}td|}t|}t |tjd|||I d H }t|jW   S  ty   Y qBw tj)N)r   lifetimer   g       @)r=   r   inet
is_addressappendrC   r?   rD   af_for_addressrB   resolve_name	addressesrA   r>   Backendmake_socketr   SOCK_STREAM_CoreTrioStreamr0   	ExceptionhttpcoreConnectError)r   hostportr	   local_addresssocket_optionsrN   _
expirationr   answersaddressafsourcer   attempt_expirationsockr
   r
   r   connect_tcpx   s@   


z_NetworkBackend.connect_tcpc                    r&   r   r'   )r   pathr	   rY   r
   r
   r   connect_unix_socket   s   z#_NetworkBackend.connect_unix_socketc                       t |I d H  d S r   r   sleep)r   secondsr
   r
   r   rg      r7   z_NetworkBackend.sleepr   )r+   r,   r-   r   rb   rd   rg   r.   r
   r
   r   r   r@   p   s    
%
r@   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)rF   rG   rE   r   c                   sB   |d u rdd l }|j }t j|i | t||||| j_d S )Nr   )dns.asyncresolverasyncresolverResolverr   r   r@   _pool_network_backend)r   rF   rG   rE   r   argskwargsr   r   r
   r   r      s   	
z_HTTPTransport.__init__)r+   r,   r-   r   	AF_UNSPECr   r.   r
   r
   r   r   ri      s    ri   c                   @   sB   e Zd Zdd Z						dddZdd Zd	d
 Zdd ZdS )rO   c                 C   s   dS )Nr   r
   r!   r
   r
   r   name      zBackend.namer   Nc	                    s4  t j|||}	d }
z@|r|	t||I d H  |tjkrJd}t| |	t||I d H  d}W d    n1 s<w   Y  |sJtjj	|dW n t
yW   |	   w |tjkrat|	S |tjkrt |	}
d}|rd}z
t j|
||d}
W n t
y   |
 I d H   w t||
|S tdd|  )NFTr   )server_hostnamezunsupported socket ztype )r   r   bind_lltuplerQ   r   connectr   r   r   rS   r    
SOCK_DGRAMr   SocketStream	SSLStreamr6   r/   r(   )r   r^   socktypeprotor_   r   r	   ssl_contextrt   sr0   	connectedr1   r
   r
   r   rP      sP   





zBackend.make_socketc                    re   r   rf   )r   intervalr
   r
   r   rg      r7   zBackend.sleepc                 C   s   t S r   )ri   r!   r
   r
   r   get_transport_class   rs   zBackend.get_transport_classc                    sB   t | |I d H W  d    S 1 sw   Y  tjj|dr   )r   r   r   r   )r   	awaitabler	   r
   r
   r   wait_for   s   
 zBackend.wait_for)r   NNNNN)r+   r,   r-   rr   rP   rg   r   r   r
   r
   r
   r   rO      s    
/rO   )$__doc__r   r   trio.socketdns._asyncbackendr   dns._featuresdns.exceptiondns.inet	_featureshaveImportErrorr   rI   low_level_address_tuplerv   r   r   r/   rT   httpcore._backends.triohttpxAsyncNetworkBackend_CoreAsyncNetworkBackend	_backends
TrioStreamrR   	dns.queryr=   r>   r?   r@   AsyncHTTPTransportri   NullTransportrO   r
   r
   r
   r   <module>   s2   (
4