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kZ
dd ZG dd dZdd	 ZG d
d dejjZG dd dejjZejdrddlZd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asyncio library query support    Nwin32c                   C   s*   z
t  W S  ty$   t   Y S 0 d S N)asyncioZget_running_loopAttributeErrorZget_event_loop r   r   O/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/dns/_asyncio_backend.py_get_running_loop   s    
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_DatagramProtocolc                 C   s   d | _ d | _d S r   )	transportrecvfromselfr   r   r   __init__   s    z_DatagramProtocol.__init__c                 C   s
   || _ d S r   )r
   )r   r
   r   r   r   connection_made   s    z!_DatagramProtocol.connection_madec                 C   s$   | j r | j  s | j ||f d S r   )r   doneZ
set_result)r   dataaddrr   r   r   datagram_received    s    z#_DatagramProtocol.datagram_receivedc                 C   s    | j r| j  s| j | d S r   )r   r   set_exception)r   excr   r   r   error_received$   s    z _DatagramProtocol.error_receivedc              
   C   sh   | j rd| j  sd|d u rXztdW qd tyT } z| j | W Y d }~qdd }~0 0 n| j | d S )NZEOF)r   r   EOFErrorr   )r   r   er   r   r   connection_lost(   s    $z!_DatagramProtocol.connection_lostc                 C   s   | j   d S r   )r
   closer   r   r   r   r   3   s    z_DatagramProtocol.closeN)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r	      s   r	   c                    sP   |d urBzt | |I d H W S  t jy>   tjj|dY qL0 n
| I d H S d S )N)timeout)r   wait_forTimeoutErrordns	exceptionTimeout)	awaitabler   r   r   r   _maybe_wait_for7   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  |tj || _|| _d S r   )superr   socket
SOCK_DGRAMr
   protocol)r   familyr
   r*   	__class__r   r   r   B   s    zDatagramSocket.__init__c                    s   | j || t|S r   )r
   sendtolen)r   whatdestinationr   r   r   r   r.   G   s    zDatagramSocket.sendtoc                    sT   t   }z:| jjd u sJ || j_t||I d H  | W d | j_S d | j_0 d S r   )r   Zcreate_futurer*   r   r%   result)r   sizer   r   r   r   r   r   L   s    
zDatagramSocket.recvfromc                    s   | j   d S r   )r*   r   r   r   r   r   r   W   s    zDatagramSocket.closec                    s   | j dS NZpeernamer
   get_extra_infor   r   r   r   getpeernameZ   s    zDatagramSocket.getpeernamec                    s   | j dS NZsocknamer5   r   r   r   r   getsockname]   s    zDatagramSocket.getsocknamec                    s   t d S r   NotImplementedErrorr   r   r   r   r   getpeercert`   s    zDatagramSocket.getpeercert)r   r   r   r   r.   r   r   r7   r9   r=   __classcell__r   r   r,   r   r&   A   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 )StreamSocketc                    s    t  |tj || _|| _d S r   )r'   r   r(   SOCK_STREAMreaderwriter)r   afrA   rB   r,   r   r   r   e   s    zStreamSocket.__init__c                    s"   | j | t| j  |I d H S r   )rB   writer%   Zdrain)r   r0   r   r   r   r   sendallj   s    zStreamSocket.sendallc                    s   t | j||I d H S r   )r%   rA   read)r   r3   r   r   r   r   recvn   s    zStreamSocket.recvc                    s   | j   d S r   )rB   r   r   r   r   r   r   q   s    zStreamSocket.closec                    s   | j dS r4   rB   r6   r   r   r   r   r7   t   s    zStreamSocket.getpeernamec                    s   | j dS r8   rH   r   r   r   r   r9   w   s    zStreamSocket.getsocknamec                    s   | j dS )NZpeercertrH   r<   r   r   r   r=   z   s    zStreamSocket.getpeercert)r   r   r   r   rE   rG   r   r7   r9   r=   r>   r   r   r,   r   r?   d   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                    s6   t    || _|| _|| _|| _|dkr2tdd S )Nr   z9the asyncio transport for HTTPX cannot set the local port)r'   r   Z_local_port	_resolver_bootstrap_address_familyr;   )r   resolver
local_portbootstrap_addressr+   r,   r   r   r      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 ]x}z`td|}t|}t|& tj|||dI d H }W d    n1 s0    Y  t|W   S  ty   Y q0 qtjd S )N)r+   Zlifetimeg       @)Zremote_hostZremote_portZ
local_host)rI   r!   inetZ
is_addressappendrN   rK   rO   Zaf_for_addressrM   resolve_name	addressesrJ   anyioZ
fail_afterconnect_tcp_CoreAnyIOStream	ExceptionhttpcoreZConnectError)r   hostportr   Zlocal_addresssocket_optionsrV   _Z
expirationr+   ZanswersaddressZattempt_expirationstreamr   r   r   rX      s8    

*z_NetworkBackend.connect_tcpc                    s   t d S r   r:   )r   pathr   r^   r   r   r   connect_unix_socket   s    z#_NetworkBackend.connect_unix_socketc                    s   t |I d H  d S r   )rW   sleep)r   secondsr   r   r   rd      s    z_NetworkBackend.sleep)N)N)r   r   r   r   rX   rc   rd   r>   r   r   r,   r   rL      s    
" 
rL   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)rQ   rR   rP   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   rL   _poolZ_network_backend)r   rQ   rR   rP   r+   argskwargsr!   r,   r   r   r      s    	
z_HTTPTransport.__init__)r   r   r   r(   	AF_UNSPECr   r>   r   r   r,   r   rf      s
   rf   c                   @   s>   e Zd Zdd ZdddZdd Zd	d
 Zdd Zdd ZdS )Backendc                 C   s   dS )Nr   r   r   r   r   r   name   s    zBackend.namer   Nc	              
      s   t  }	|tjkrVtr,|d u r,tj|df}|	jt||||dI d H \}
}t	||
|S |tj
kr|d u rptdttj|d |d |||||d|I d H \}}t|||S tdd|  d S )Nr   )r+   protoZremote_addrz'destination required for stream sockets   )sslr+   rn   Z
local_addrserver_hostnamezunsupported socket ztype )r   r(   r)   	_is_win32r!   rS   Z
any_for_afZcreate_datagram_endpointr	   r&   r@   
ValueErrorr%   r   Zopen_connectionr?   r;   )r   rC   socktypern   sourcer1   r   ssl_contextrq   loopr
   r*   rwr   r   r   make_socket   s>    

	zBackend.make_socketc                    s   t |I d H  d S r   )r   rd   )r   intervalr   r   r   rd   	  s    zBackend.sleepc                 C   s   dS )NFr   r   r   r   r   datagram_connection_required  s    z$Backend.datagram_connection_requiredc                 C   s   t S r   )rf   r   r   r   r   get_transport_class  s    zBackend.get_transport_classc                    s   t ||I d H S r   )r%   )r   r$   r   r   r   r   r     s    zBackend.wait_for)r   NNNNN)	r   r   r   rm   rz   rd   r|   r}   r   r   r   r   r   rl      s         
/rl   )%__doc__r   r(   sysZdns._asyncbackendr!   Zdns._featuresZdns.exceptionZdns.inetplatformrr   r   r	   r%   Z_asyncbackendr&   r?   Z	_featuresZhaverW   r[   Zhttpcore._backends.anyioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZAnyIOStreamrY   Z	dns.queryrI   rJ   rK   rL   ZAsyncHTTPTransportrf   ZNullTransportrl   r   r   r   r   <module>   s2   

#
5