o
    i#                     @   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)asyncioget_running_loopAttributeErrorget_event_loop r   r   K/home/app/Keep/.python/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 )NZ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   r/   	__class__r   r	   r   C      
zDatagramSocket.__init__c                    s   | j || t|S r   )r   sendtolen)r   whatdestinationr!   r   r   r	   r4   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_futurer/   r   r(   result)r   sizer!   r   r   r   r	   r   M   s   
zDatagramSocket.recvfromc                       | j   d S r   )r/   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socknamer@   r   r   r   r	   getsockname^   rC   zDatagramSocket.getsocknamec                       t r   NotImplementedErrorr   r!   r   r   r	   getpeercerta   s   zDatagramSocket.getpeercert)r   r   r    r   r4   r   r   rB   rF   rK   __classcell__r   r   r1   r	   r*   B   s    r*   c                       r)   )StreamSocketc                    r+   r   )r,   r   r-   SOCK_STREAMreaderwriter)r   afrO   rP   r1   r   r	   r   f   r3   zStreamSocket.__init__c                    s$   | j | t| j  |I d H S r   )rP   writer(   drain)r   r6   r!   r   r   r	   sendallk   s   zStreamSocket.sendallc                    s   t | j||I d H S r   )r(   rO   read)r   r:   r!   r   r   r	   recvo   s   zStreamSocket.recvc                    r;   r   )rP   r   r   r   r   r	   r   r   r<   zStreamSocket.closec                    r=   r>   rP   rA   r   r   r   r	   rB   u   rC   zStreamSocket.getpeernamec                    r=   rD   rW   r   r   r   r	   rF   x   rC   zStreamSocket.getsocknamec                    r=   )NpeercertrW   rJ   r   r   r	   rK   {   rC   zStreamSocket.getpeercert)r   r   r    r   rT   rV   r   rB   rF   rK   rL   r   r   r1   r	   rM   e   s    rM   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_familyrI   )r   resolver
local_portbootstrap_addressr0   r1   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)r0   Zlifetimeg       @)Zremote_hostZremote_portZ
local_host)rY   r$   inetZ
is_addressappendr^   r[   r_   Zaf_for_addressr]   resolve_name	addressesrZ   anyioZ
fail_afterconnect_tcp_CoreAnyIOStream	ExceptionhttpcoreZConnectError)r   hostportr!   local_addresssocket_optionsrf   _Z
expirationr0   ZanswersaddressZattempt_expirationstreamr   r   r	   rh      s>   

z_NetworkBackend.connect_tcpc                    rG   r   rH   )r   pathr!   ro   r   r   r	   connect_unix_socket   s   z#_NetworkBackend.connect_unix_socketc                       t |I d H  d S r   )rg   sleep)r   secondsr   r   r	   rv         z_NetworkBackend.sleep)NNN)NN)r   r   r    r   rh   rt   rv   rL   r   r   r1   r	   r\      s    
"
r\   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)ra   rb   r`   r0   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   r\   _poolZ_network_backend)r   ra   rb   r`   r0   argskwargsr$   r1   r   r	   r      s   	
z_HTTPTransport.__init__)r   r   r    r-   	AF_UNSPECr   rL   r   r   r1   r	   ry      s    ry   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   )r0   protoremote_addrz'destination required for stream sockets   )sslr0   r   
local_addrserver_hostnamezunsupported socket ztype )r
   r-   r.   	_is_win32r$   rc   Z
any_for_afcreate_datagram_endpointr   r*   rN   
ValueErrorr(   r   open_connectionrM   rI   )r   rQ   socktyper   sourcer7   r!   ssl_contextr   loopr   r/   rwr   r   r	   make_socket   s@   

	zBackend.make_socketc                    ru   r   )r   rv   )r   intervalr   r   r	   rv   
  rx   zBackend.sleepc                 C   r   )NFr   r   r   r   r	   datagram_connection_required  r   z$Backend.datagram_connection_requiredc                 C   s   t S r   )ry   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   rv   r   r   r"   r   r   r   r	   r      s    
/r   )%__doc__r   r-   sysZdns._asyncbackendr$   Zdns._featuresZdns.exceptionZdns.inetplatformr   r
   r   r(   Z_asyncbackendr*   rM   Z	_featuresZhaverg   rk   Zhttpcore._backends.anyioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZAnyIOStreamri   Z	dns.queryrY   rZ   r[   r\   ZAsyncHTTPTransportry   ZNullTransportr   r   r   r   r	   <module>   s4   
 
#
5