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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rd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 w N)asyncioZget_running_loopAttributeErrorZget_event_loop r   r   G/var/www/html/venv/lib/python3.10/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 d S 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 d S d S r   )r   r   set_exception)r   excr   r   r   error_received$   s   z _DatagramProtocol.error_receivedc              
   C   sl   | j r2| j  s4|d u r*ztd ty) } z| j | W Y d }~d S d }~ww | j | d S d S 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                    sH   |d urz
t | |I d H W S  t jy   tjj|dw | I d H S )N)timeout)r   wait_forTimeoutErrordns	exceptionTimeout)	awaitabler   r   r   r   _maybe_wait_for7   s   
r%   c                       L   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                        t  |tj || _|| _d S r   )superr   socket
SOCK_DGRAMr
   protocol)r   familyr
   r,   	__class__r   r   r   B      
zDatagramSocket.__init__c                    s   | j || t|S r   )r
   sendtolen)r   whatdestinationr   r   r   r   r1   G   s   zDatagramSocket.sendtoc                    sR   t   }z| jjd u sJ || j_t||I d H  | W d | j_S d | j_w r   )r   Zcreate_futurer,   r   r%   result)r   sizer   r   r   r   r   r   L   s   
zDatagramSocket.recvfromc                       | j   d S r   )r,   r   r   r   r   r   r   W      zDatagramSocket.closec                       | j dS NZpeernamer
   get_extra_infor   r   r   r   getpeernameZ      zDatagramSocket.getpeernamec                    r9   NZsocknamer;   r   r   r   r   getsockname]   r>   zDatagramSocket.getsocknamec                       t r   NotImplementedErrorr   r   r   r   r   getpeercert`   s   zDatagramSocket.getpeercert)r   r   r   r   r1   r   r   r=   r@   rE   __classcell__r   r   r.   r   r'   A   s    r'   c                       r&   )StreamSocketc                    r(   r   )r)   r   r*   SOCK_STREAMreaderwriter)r   afrI   rJ   r.   r   r   r   e   r0   zStreamSocket.__init__c                    s$   | j | t| j  |I d H S r   )rJ   writer%   Zdrain)r   r3   r   r   r   r   sendallj   s   zStreamSocket.sendallc                    s   t | j||I d H S r   )r%   rI   read)r   r6   r   r   r   r   recvn   s   zStreamSocket.recvc                    r7   r   )rJ   r   r   r   r   r   r   q   r8   zStreamSocket.closec                    r9   r:   rJ   r<   r   r   r   r   r=   t   r>   zStreamSocket.getpeernamec                    r9   r?   rP   r   r   r   r   r@   w   r>   zStreamSocket.getsocknamec                    r9   )NZpeercertrP   rD   r   r   r   rE   z   r>   zStreamSocket.getpeercert)r   r   r   r   rM   rO   r   r=   r@   rE   rF   r   r   r.   r   rG   d   s    rG   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                    s6   t    || _|| _|| _|| _|dkrtdd S )Nr   z9the asyncio transport for HTTPX cannot set the local port)r)   r   Z_local_port	_resolver_bootstrap_address_familyrC   )r   resolver
local_portbootstrap_addressr-   r.   r   r   r      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 ];}z0td|}t|}t| tj|||dI d H }W d    n1 siw   Y  t|W   S  ty}   Y qBw tj)N)r-   Zlifetimeg       @)Zremote_hostZremote_portZ
local_host)rQ   r!   inetZ
is_addressappendrV   rS   rW   Zaf_for_addressrU   resolve_name	addressesrR   anyioZ
fail_afterconnect_tcp_CoreAnyIOStream	ExceptionhttpcoreZConnectError)r   hostportr   Zlocal_addresssocket_optionsr^   _Z
expirationr-   ZanswersaddressZattempt_expirationstreamr   r   r   r`      s>   

z_NetworkBackend.connect_tcpc                    rA   r   rB   )r   pathr   rf   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   rm         z_NetworkBackend.sleepr   )r   r   r   r   r`   rk   rm   rF   r   r   r.   r   rT      s    
"
rT   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)rY   rZ   rX   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   rT   _poolZ_network_backend)r   rY   rZ   rX   r-   argskwargsr!   r.   r   r   r      s   	
z_HTTPTransport.__init__)r   r   r   r*   	AF_UNSPECr   rF   r   r   r.   r   rp      s    rp   c                   @   sJ   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      dS )Nr   r   r   r   r   r   name      zBackend.namer   Nc	              
      s   t  }	|tjkr,tr|d u rtj|df}|	jt||||dI d H \}
}t	||
|S |tj
krW|d u r9tdttj|d |d |||||d|I d H \}}t|||S tdd|  )Nr   )r-   protoZremote_addrz'destination required for stream sockets   )sslr-   rz   Z
local_addrserver_hostnamezunsupported socket ztype )r   r*   r+   	_is_win32r!   r[   Z
any_for_afZcreate_datagram_endpointr	   r'   rH   
ValueErrorr%   r   Zopen_connectionrG   rC   )r   rK   socktyperz   sourcer4   r   ssl_contextr}   loopr
   r,   rwr   r   r   make_socket   s@   

	zBackend.make_socketc                    rl   r   )r   rm   )r   intervalr   r   r   rm   	  ro   zBackend.sleepc                 C   rw   )NFr   r   r   r   r   datagram_connection_required  ry   z$Backend.datagram_connection_requiredc                 C   s   t S r   )rp   r   r   r   r   get_transport_class  ry   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   rx   r   rm   r   r   r   r   r   r   r   rv      s    
/rv   )%__doc__r   r*   sysZdns._asyncbackendr!   Zdns._featuresZdns.exceptionZdns.inetplatformr~   r   r	   r%   Z_asyncbackendr'   rG   Z	_featuresZhaver_   rc   Zhttpcore._backends.anyioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZAnyIOStreamra   Z	dns.queryrQ   rR   rS   rT   ZAsyncHTTPTransportrp   ZNullTransportrv   r   r   r   r   <module>   s4   

#
5