o
    Þý°j•!  ã                   @   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
   ú„/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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   r4   r5   r   r
   r   r   B   s   
zStreamSocket.__init__c                 Ã   r   r   )r   r4   Úsend_allr   r   r   )r   r   r	   r
   r
   r   ÚsendallG   r"   zStreamSocket.sendallc                 Ã   r   r   )r   r4   Úreceive_somer   r   r   r    r
   r
   r   ÚrecvL   r"   zStreamSocket.recvc                 Ã   s   �| j  ¡ I d H  d S r   )r4   Úacloser$   r
   r
   r   r#   Q   ó   €zStreamSocket.closec                 Ã   ó"   �| j r| jjj ¡ S | jj ¡ S r   )r5   r4   Útransport_streamr   r&   r$   r
   r
   r   r&   T   ó   €zStreamSocket.getpeernamec                 Ã   r<   r   )r5   r4   r=   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   )r5   r   r4   Údo_handshaker-   r+   r,   r
   r
   r   r-   `   s   €
ÿ
zStreamSocket.getpeercert)F)r.   r/   r0   r   r7   r9   r#   r&   r(   r-   r1   r
   r
   r   r   r2   A   s    r2   Ú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 ]M}zBtj |¡}|d usT| jdkrZ|| jf}nd }||f}td|ƒ}t|ƒ}tƒ  |tjd|||¡I d H }t|tƒsJ ‚t|jƒW   S  ty�   Y qBw tj‚)N)r   Úlifetimer   g       @)rA   r   ÚinetÚ
is_addressÚappendrG   rC   rH   Úaf_for_addressrF   Úresolve_nameÚ	addressesrE   rB   ÚBackendÚmake_socketr   r3   Ú
isinstancer2   Ú_CoreTrioStreamr4   Ú	ExceptionÚhttpcoreÚConnectError)r   ÚhostÚportr	   Úlocal_addressÚsocket_optionsrR   Ú_Ú
expirationr   ÚanswersÚaddressÚafÚsourcer   Úattempt_expirationr   r
   r
   r   Úconnect_tcp{   sB   €
ÿ

ÿÿz_NetworkBackend.connect_tcpc                 Ã   r)   r   r*   )r   Úpathr	   r]   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   rj   ¥   r;   z_NetworkBackend.sleep)NNN)NN)r.   r/   r0   r   re   rg   rj   r1   r
   r
   r   r   rD   s   s    
ÿ&
ÿrD   c                       s*   e Zd Zdddejdœ‡ fdd„
Z‡  ZS )Ú_HTTPTransportr   N)rJ   rK   rI   r   c                   sJ   |d u r|d u rdd l }|j ¡ }tƒ j|i |¤Ž t||||ƒ| j_d S )Nr   )Údns.asyncresolverÚasyncresolverÚResolverr   r   rD   Ú_poolÚ_network_backend)r   rJ   rK   rI   r   ÚargsÚkwargsr   r   r
   r   r   ©   s   	
ÿz_HTTPTransport.__init__)r.   r/   r0   r   Ú	AF_UNSPECr   r1   r
   r
   r   r   rl   ¨   s    úrl   c                   @   sB   e Zd Zdd„ Z						ddd„Zdd„ Zd	d
„ Zdd„ ZdS )rS   c                 C   s   dS )Nr   r
   r$   r
   r
   r   ÚnameÁ   ó   zBackend.namer   Nc	                 Ã   sH  �t j |||¡}	d }
zJ|r|	 t||ƒ¡I d H  |tjks"|d urTd}t|ƒ� |d us/J ‚|	 t||ƒ¡I d H  d}W d   ƒ n1 sFw   Y  |sTtjj	|d�‚W n t
ya   |	 ¡  ‚ w |tjkrkt|	ƒS |tjkr›t  |	¡}
d}|r•d}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Ú_lltupler3   r   Úconnectr   r   r   rW   r#   r   r   ÚSocketStreamÚ	SSLStreamr:   r2   r+   )r   rb   ÚsocktypeÚprotorc   r   r	   Ússl_contextrw   Úsr4   Ú	connectedr5   r
   r
   r   rT   Ä   sR   €
ýÿ€þ



ÿþÿzBackend.make_socketc                 Ã   rh   r   ri   )r   Úintervalr
   r
   r   rj   ô   r;   zBackend.sleepc                 C   s   t S r   )rl   r$   r
   r
   r   Úget_transport_class÷   rv   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/   r0   ru   rT   rj   rƒ   r…   r
   r
   r
   r   rS   À   s    
÷0rS   )$Ú__doc__r   r   Útrio.socketÚdns._asyncbackendr   Údns._featuresÚdns.exceptionÚdns.inetÚ	_featuresÚhaveÚImportErrorr   rM   Úlow_level_address_tuplery   r   r   r2   rX   Úhttpcore._backends.trioÚhttpxÚAsyncNetworkBackendÚ_CoreAsyncNetworkBackendÚ	_backendsÚ
TrioStreamrV   Ú	dns.queryrA   rB   rC   rD   ÚAsyncHTTPTransportrl   ÚNullTransportrS   r
   r
   r
   r   Ú<module>   s2   !(
5