o
    h!                     @   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   Zmove_on_afterdns_asyncbackendZNullContexttimeout r   D/var/www/html/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tj || _d S r   )super__init__familysocket
SOCK_DGRAM)selfsock	__class__r   r	   r   !   s   
zDatagramSocket.__init__c                    st   t |& |d u r| j|I d H W  d    S | j||I d H W  d    S 1 s.w   Y  tjj|dNr   )r
   r   send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!   4   s   zDatagramSocket.closec                       | j  S r   )r   getpeernamer"   r   r   r	   r$   7      
zDatagramSocket.getpeernamec                    r#   r   )r   getsocknamer"   r   r   r	   r&   :   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                       sN   e Zd Zd fdd	Zdd Zdd Zdd	 Zd
d Zdd Zdd Z	  Z
S )StreamSocketFc                    s    t  |tj || _|| _d S r   )r   r   r   SOCK_STREAMstreamtls)r   r   r2   r3   r   r   r	   r   B   s   
zStreamSocket.__init__c                    r   r   )r
   r2   Zsend_allr   r   r   )r   r   r   r   r   r	   sendallG   r    zStreamSocket.sendallc                    r   r   )r
   r2   Zreceive_somer   r   r   r   r   r   r	   recvL   r    zStreamSocket.recvc                    s   | j  I d H  d S r   )r2   acloser"   r   r   r	   r!   Q      zStreamSocket.closec                    "   | j r| jjj S | jj S r   )r3   r2   transport_streamr   r$   r"   r   r   r	   r$   T      zStreamSocket.getpeernamec                    r8   r   )r3   r2   r9   r   r&   r"   r   r   r	   r&   Z   r:   zStreamSocket.getsocknamec                    sN   | j r%t| | j I d H  W d    n1 sw   Y  | j S tr   )r3   r
   r2   do_handshaker+   r)   r*   r   r   r	   r+   `   s   

zStreamSocket.getpeercert)F)r,   r-   r.   r   r4   r5   r!   r$   r&   r+   r/   r   r   r   r	   r0   A   s    r0   Z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   t   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   Zlifetimer   g       @)r<   r   inetZ
is_addressappendrB   r>   rC   Zaf_for_addressrA   resolve_name	addressesr@   r=   Backendmake_socketr   r1   _CoreTrioStreamr2   	ExceptionhttpcoreZConnectError)r   hostportr   Zlocal_addresssocket_optionsrJ   _Z
expirationr   Zanswersaddressafsourcer   Zattempt_expirationr   r   r   r	   connect_tcp{   s@   


z_NetworkBackend.connect_tcpc                    r'   r   r(   )r   pathr   rR   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	   r\      r7   z_NetworkBackend.sleepr   )r,   r-   r.   r   rW   rY   r\   r/   r   r   r   r	   r?   s   s    
%
r?   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)rE   rF   rD   r   c                   sJ   |d u r|d u rdd l }|j }t j|i | t||||| j_d S )Nr   )Zdns.asyncresolverZasyncresolverResolverr   r   r?   _poolZ_network_backend)r   rE   rF   rD   r   argskwargsr   r   r   r	   r      s   	
z_HTTPTransport.__init__)r,   r-   r.   r   	AF_UNSPECr   r/   r   r   r   r	   r^      s    r^   c                   @   sB   e Zd Zdd Z						dddZdd Zd	d
 Zdd ZdS )rK   c                 C   s   dS )Nr   r   r"   r   r   r	   name      zBackend.namer   Nc	                    s<  t j|||}	d }
zD|r|	t||I d H  |tjks"|d urNd}t| |	t||I d H  d}W d    n1 s@w   Y  |sNtjj	|dW n t
y[   |	   w |tjkret|	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_lltupler1   r
   connectr   r   r   rN   r!   r   r   ZSocketStreamZ	SSLStreamr6   r0   r)   )r   rU   socktypeprotorV   r   r   ssl_contextrf   sr2   	connectedr3   r   r   r	   rL      sP   




zBackend.make_socketc                    rZ   r   r[   )r   intervalr   r   r	   r\      r7   zBackend.sleepc                 C   s   t S r   )r^   r"   r   r   r	   get_transport_class   re   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   Z	awaitabler   r   r   r	   wait_for   s   
 zBackend.wait_for)r   NNNNN)r,   r-   r.   rd   rL   r\   rp   rq   r   r   r   r	   rK      s    
/rK   )$__doc__r   r   Ztrio.socketZdns._asyncbackendr   Zdns._featuresZdns.exceptionZdns.inetZ	_featuresZhaveImportErrorr
   rG   Zlow_level_address_tuplerh   r   r   r0   rO   Zhttpcore._backends.trioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZ
TrioStreamrM   Z	dns.queryr<   r=   r>   r?   ZAsyncHTTPTransportr^   ZNullTransportrK   r   r   r   r	   <module>   s2   !(
4