a
    PҚ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sPe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rd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 d S N)r   Zmove_on_afterdns_asyncbackendZNullContexttimeout r   L/wd/webapps/venvs/v2025_4um/lib/python3.9/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                    s   t |Z |d u r2| j|I d H W  d    S | j||I d H W  d    S W d    n1 sh0    Y  tjj|dd S Nr   )r
   r   sendsendtor   	exceptionTimeout)r   whatdestinationr   r   r   r	   r   %   s    
 @zDatagramSocket.sendtoc                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r   recvfromr   r   r   r   sizer   r   r   r	   r   /   s    
0zDatagramSocket.recvfromc                    s   | j   d S r   )r   closer   r   r   r	   r   4   s    zDatagramSocket.closec                    s
   | j  S r   )r   getpeernamer    r   r   r	   r!   7   s    zDatagramSocket.getpeernamec                    s
   | j  S r   )r   getsocknamer    r   r   r	   r"   :   s    zDatagramSocket.getsocknamec                    s   t d S 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   r-   r.   r   r   r	   r   B   s    zStreamSocket.__init__c                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r-   Zsend_allr   r   r   )r   r   r   r   r   r	   sendallG   s    
0zStreamSocket.sendallc                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r-   Zreceive_somer   r   r   r   r   r   r	   recvL   s    
0zStreamSocket.recvc                    s   | j  I d H  d S r   )r-   acloser    r   r   r	   r   Q   s    zStreamSocket.closec                    s$   | j r| jjj S | jj S d S r   )r.   r-   transport_streamr   r!   r    r   r   r	   r!   T   s    zStreamSocket.getpeernamec                    s$   | j r| jjj S | jj S d S r   )r.   r-   r2   r   r"   r    r   r   r	   r"   Z   s    zStreamSocket.getsocknamec                    sP   | j rHt|  | j I d H  W d    n1 s40    Y  | j S td S r   )r.   r
   r-   do_handshaker&   r$   r%   r   r   r	   r&   `   s
    
.
zStreamSocket.getpeercert)F)r'   r(   r)   r   r/   r0   r   r!   r"   r&   r*   r   r   r   r	   r+   A   s   r+   Zdoh)_compute_times_expiration_for_this_attempt
_remainingc                       s8   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(|| nV| jd ur@|| j n>t|}| j}	|r^tj|}	| j	j
||	|dI d H }
|
 }|D ]}zvtj|}|d us| jdkr|| jf}nd }||f}td|}t|}t |tjd|||I d H }t|jW   S  ty   Y qY q0 qtjd S )N)r   Zlifetimer   g       @)r4   r   inetZ
is_addressappendr:   r6   r;   Zaf_for_addressr9   resolve_name	addressesr8   r5   Backendmake_socketr   r,   _CoreTrioStreamr-   	ExceptionhttpcoreZConnectError)r   hostportr   Zlocal_addresssocket_optionsrB   _Z
expirationr   Zanswersaddressafsourcer   Zattempt_expirationr   r   r   r	   connect_tcp{   s<    


z_NetworkBackend.connect_tcpc                    s   t d S r   r#   )r   pathr   rJ   r   r   r	   connect_unix_socket   s    z#_NetworkBackend.connect_unix_socketc                    s   t |I d H  d S r   r   sleep)r   secondsr   r   r	   rS      s    z_NetworkBackend.sleep)N)N)r'   r(   r)   r   rO   rQ   rS   r*   r   r   r   r	   r7   s   s    
% 
r7   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)r=   r>   r<   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   r7   _poolZ_network_backend)r   r=   r>   r<   r   argskwargsr   r   r   r	   r      s    	
z_HTTPTransport.__init__)r'   r(   r)   r   	AF_UNSPECr   r*   r   r   r   r	   rU      s
   rU   c                   @   s6   e Zd Zdd ZdddZdd Zd	d
 Zdd ZdS )rC   c                 C   s   dS )Nr   r   r    r   r   r	   name   s    zBackend.namer   Nc	                    sL  t j|||}	d }
z|r0|	t||I d H  |tjksB|d urd}t|* |	t||I d H  d}W d    n1 s~0    Y  |stjj	|dW n t
y   |	   Y n0 |tjkrt|	S |tjkr6t |	}
d}|r*d}zt j|
||d}
W n$ t
y(   |
 I d H   Y n0 t||
|S tdd|  d S )NFTr   )server_hostnamezunsupported socket ztype )r   r   bind_lltupler,   r
   connectr   r   r   rF   r   r   r   ZSocketStreamZ	SSLStreamr1   r+   r$   )r   rM   socktypeprotorN   r   r   ssl_contextr\   sr-   	connectedr.   r   r   r	   rD      sF    
"



zBackend.make_socketc                    s   t |I d H  d S r   rR   )r   intervalr   r   r	   rS      s    zBackend.sleepc                 C   s   t S r   )rU   r    r   r   r	   get_transport_class   s    zBackend.get_transport_classc                    sD   t | |I d H W  d    S 1 s(0    Y  tjj|dd S r   )r
   r   r   r   )r   Z	awaitabler   r   r   r	   wait_for   s
    
(zBackend.wait_for)r   NNNNN)r'   r(   r)   r[   rD   rS   rf   rg   r   r   r   r	   rC      s         
/rC   )$__doc__r   r   Ztrio.socketZdns._asyncbackendr   Zdns._featuresZdns.exceptionZdns.inetZ	_featuresZhaveImportErrorr
   r?   Zlow_level_address_tupler^   r   r   r+   rG   Zhttpcore._backends.trioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZ
TrioStreamrE   Z	dns.queryr4   r5   r6   r7   ZAsyncHTTPTransportrU   ZNullTransportrC   r   r   r   r	   <module>   s0   !(
4