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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 w ©N)ÚasyncioÚget_running_loopÚAttributeErrorÚget_event_loop© r   r   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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   ÚdoneÚ
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 )NÚEOF)r   r   ÚEOFErrorr   )r   r   Úer   r   r	   Úconnection_lost(   s   €ÿøz!_DatagramProtocol.connection_lostc                 C   s   | j d ur| j  ¡  d S 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_for8   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   r0   ©Ú	__class__r   r	   r   C   ó   
zDatagramSocket.__init__c                 Ã   s   �| j  ||¡ t|ƒS r   )r   ÚsendtoÚlen)r   ÚwhatÚdestinationr"   r   r   r	   r5   H   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
   Úcreate_futurer0   r   r)   Úresult)r   Úsizer"   r   r   r   r	   r   M   s   €
zDatagramSocket.recvfromc                 Ã   ó   �| j  ¡  d S r   )r0   r   r   r   r   r	   r   X   ó   €zDatagramSocket.closec                 Ã   ó   �| j  d¡S ©NÚpeername©r   Úget_extra_infor   r   r   r	   Úgetpeername[   ó   €zDatagramSocket.getpeernamec                 Ã   r>   ©NÚsocknamerA   r   r   r   r	   Úgetsockname^   rD   zDatagramSocket.getsocknamec                 Ã   ó   �t ‚r   ©ÚNotImplementedError©r   r"   r   r   r	   Úgetpeercerta   s   €zDatagramSocket.getpeercert)r   r    r!   r   r5   r   r   rC   rG   rL   Ú__classcell__r   r   r2   r	   r+   B   s    r+   c                       r*   )ÚStreamSocketc                    r,   r   )r-   r   r.   ÚSOCK_STREAMÚreaderÚwriter)r   ÚafrP   rQ   r2   r   r	   r   f   r4   zStreamSocket.__init__c                 Ã   s$   �| j  |¡ t| j  ¡ |ƒI d H S r   )rQ   Úwriter)   Údrain)r   r7   r"   r   r   r	   Úsendallk   s   €zStreamSocket.sendallc                 Ã   s   �t | j |¡|ƒI d H S r   )r)   rP   Úread)r   r;   r"   r   r   r	   Úrecvo   s   €zStreamSocket.recvc                 Ã   r<   r   )rQ   r   r   r   r   r	   r   r   r=   zStreamSocket.closec                 Ã   r>   r?   ©rQ   rB   r   r   r   r	   rC   u   rD   zStreamSocket.getpeernamec                 Ã   r>   rE   rX   r   r   r   r	   rG   x   rD   zStreamSocket.getsocknamec                 Ã   r>   )NÚpeercertrX   rK   r   r   r	   rL   {   rD   zStreamSocket.getpeercert)r   r    r!   r   rU   rW   r   rC   rG   rL   rM   r   r   r2   r	   rN   e   s    rN   Ú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   Ú_local_portÚ	_resolverÚ_bootstrap_addressÚ_familyrJ   )r   ÚresolverÚ
local_portÚbootstrap_addressr1   r2   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)r1   Úlifetimeg       @)Úremote_hostÚremote_portÚ
local_host)r[   r%   ÚinetÚ
is_addressÚappendra   r]   rb   Úaf_for_addressr`   Úresolve_nameÚ	addressesr\   ÚanyioÚ
fail_afterÚconnect_tcpÚ_CoreAnyIOStreamÚ	ExceptionÚhttpcoreÚConnectError)r   ÚhostÚportr"   Úlocal_addressÚsocket_optionsro   Ú_Ú
expirationr1   ÚanswersÚaddressÚattempt_expirationÚstreamr   r   r	   rr   –   s>   €
ÿ
ýÿÿz_NetworkBackend.connect_tcpc                 Ã   rH   r   rI   )r   Úpathr"   rz   r   r   r	   Úconnect_unix_socket·   s   €z#_NetworkBackend.connect_unix_socketc                 Ã   ó   �t  |¡I d H  d S r   )rp   Úsleep)r   Úsecondsr   r   r	   r„   ¼   ó   €z_NetworkBackend.sleep)NNN)NN)r   r    r!   r   rr   r‚   r„   rM   r   r   r2   r	   r^   Š   s    
ÿ"
ÿr^   c                       s*   e Zd Zdddejdœ‡ fdd„
Z‡  ZS )Ú_HTTPTransportr   N)rd   re   rc   r1   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   r^   Ú_poolÚ_network_backend)r   rd   re   rc   r1   ÚargsÚkwargsr%   r2   r   r	   r   À   s   	
ÿz_HTTPTransport.__init__)r   r    r!   r.   Ú	AF_UNSPECr   rM   r   r   r2   r	   r‡   ¿   s    úr‡   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   )r1   ÚprotoÚremote_addrz'destination required for stream socketsé   )Ússlr1   r”   Ú
local_addrÚserver_hostnamezunsupported socket ztype )r
   r.   r/   Ú	_is_win32r%   rj   Ú
any_for_afÚcreate_datagram_endpointr   r+   rO   Ú
ValueErrorr)   r   Úopen_connectionrN   rJ   )r   rR   Úsocktyper”   Úsourcer8   r"   Ússl_contextr™   Úloopr   r0   ÚrÚwr   r   r	   Úmake_socketÛ   s@   €
û
ù	öÿzBackend.make_socketc                 Ã   rƒ   r   )r   r„   )r   Úintervalr   r   r	   r„   
  r†   zBackend.sleepc                 C   r‘   )NFr   r   r   r   r	   Údatagram_connection_required  r“   z$Backend.datagram_connection_requiredc                 C   s   t S r   )r‡   r   r   r   r	   Úget_transport_class  r“   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!   r’   r¥   r„   r§   r¨   r#   r   r   r   r	   r�   ×   s    
÷/r�   )%Ú__doc__r   r.   ÚsysÚdns._asyncbackendr%   Údns._featuresÚdns.exceptionÚdns.inetÚplatformrš   r
   r   r)   Ú_asyncbackendr+   rN   Ú	_featuresÚhaverp   ru   Úhttpcore._backends.anyioÚhttpxÚAsyncNetworkBackendÚ_CoreAsyncNetworkBackendÚ	_backendsÚAnyIOStreamrs   Ú	dns.queryr[   r\   r]   r^   ÚAsyncHTTPTransportr‡   ÚNullTransportr�   r   r   r   r	   Ú<module>   s4   
 
#
5