o
    Rf#                     @   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   M/home/ubuntu/webapp/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   sh   | j r0| j  s2|d u r(zt ty' } z| j | W Y d }~d S d }~ww | j | d S d S d S r   )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                       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  | || _|| _d S r   )superr   r   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                    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   L   s   
zDatagramSocket.recvfromc                       | j   d S r   )r+   r   r   r   r   r	   r   W      zDatagramSocket.closec                       | j dS Npeernamer   get_extra_infor   r   r   r	   getpeernameZ      zDatagramSocket.getpeernamec                    r8   N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   r/   r   r   r=   rA   rF   __classcell__r   r   r-   r	   r)   A   s    r)   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )StreamSocketc                 C   s   || _ || _|| _d S r   )r,   readerwriter)r   afrI   rJ   r   r   r	   r   e   s   
zStreamSocket.__init__c                    s$   | j | t| j  |I d H S r   )rJ   writer(   drain)r   r1   r!   r   r   r	   sendallj   s   zStreamSocket.sendallc                    s   t | j||I d H S r   )r(   rI   read)r   r5   r!   r   r   r	   recvn   s   zStreamSocket.recvc                    r6   r   )rJ   r   r   r   r   r	   r   q   r7   zStreamSocket.closec                    r8   r9   rJ   r<   r   r   r   r	   r=   t   r>   zStreamSocket.getpeernamec                    r8   r?   rQ   r   r   r   r	   rA   w   r>   zStreamSocket.getsocknamec                    r8   )NpeercertrQ   rE   r   r   r	   rF   z   r>   zStreamSocket.getpeercertN)
r   r   r    r   rN   rP   r   r=   rA   rF   r   r   r   r	   rH   d   s    rH   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_familyrD   )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,   lifetimeg       @)remote_hostremote_port
local_host)rT   r$   inet
is_addressappendrZ   rV   r[   af_for_addressrY   resolve_name	addressesrU   anyio
fail_afterconnect_tcp_CoreAnyIOStream	ExceptionhttpcoreConnectError)r   hostportr!   local_addresssocket_optionsrh   _
expirationr,   answersaddressattempt_expirationstreamr   r   r	   rk      s>   

z_NetworkBackend.connect_tcpc                    rB   r   rC   )r   pathr!   rs   r   r   r	   connect_unix_socket   s   z#_NetworkBackend.connect_unix_socketc                       t |I d H  d S r   )ri   sleep)r   secondsr   r   r	   r}         z_NetworkBackend.sleepr   )r   r   r    r   rk   r{   r}   rG   r   r   r-   r	   rW      s    
"
rW   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)r]   r^   r\   r,   c                   sB   |d u rdd l }|j }t j|i | t||||| j_d S )Nr   )dns.asyncresolverasyncresolverResolverr*   r   rW   _pool_network_backend)r   r]   r^   r\   r,   argskwargsr$   r-   r   r	   r      s   	
z_HTTPTransport.__init__)r   r   r    socket	AF_UNSPECr   rG   r   r   r-   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   )r,   protoremote_addrz'destination required for stream sockets   )sslr,   r   
local_addrserver_hostnamezunsupported socket ztype )r
   r   
SOCK_DGRAM	_is_win32r$   rc   
any_for_afcreate_datagram_endpointr   r)   SOCK_STREAM
ValueErrorr(   r   open_connectionrH   rD   )r   rK   socktyper   sourcer2   r!   ssl_contextr   loopr   r+   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)   rH   	_featureshaveri   rn   httpcore._backends.anyiohttpxAsyncNetworkBackend_CoreAsyncNetworkBackend	_backendsAnyIOStreamrl   	dns.queryrT   rU   rV   rW   AsyncHTTPTransportr   NullTransportr   r   r   r   r	   <module>   s4   

#
5