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)asyncioget_running_loopAttributeErrorget_event_loop r   r   P/var/www/html/olx_land/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 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   r0   	__class__r   r	   r   B      
zDatagramSocket.__init__c                    s   | j || t|S r   )r   sendtolen)r   whatdestinationr"   r   r   r	   r5   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_futurer0   r   r)   result)r   sizer"   r   r   r   r	   r   L   s   
zDatagramSocket.recvfromc                       | j   d S r   )r0   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                    r>   NsocknamerA   r   r   r   r	   getsockname]   rD   zDatagramSocket.getsocknamec                       t r   NotImplementedErrorr   r"   r   r   r	   getpeercert`   s   zDatagramSocket.getpeercert)r   r    r!   r   r5   r   r   rC   rG   rL   __classcell__r   r   r2   r	   r+   A   s    r+   c                       r*   )StreamSocketc                    r,   r   )r-   r   r.   SOCK_STREAMreaderwriter)r   afrP   rQ   r2   r   r	   r   e   r4   zStreamSocket.__init__c                    s$   | j | t| j  |I d H S r   )rQ   writer)   drain)r   r7   r"   r   r   r	   sendallj   s   zStreamSocket.sendallc                    s   t | j||I d H S r   )r)   rP   read)r   r;   r"   r   r   r	   recvn   s   zStreamSocket.recvc                    r<   r   )rQ   r   r   r   r   r	   r   q   r=   zStreamSocket.closec                    r>   r?   rQ   rB   r   r   r   r	   rC   t   rD   zStreamSocket.getpeernamec                    r>   rE   rX   r   r   r   r	   rG   w   rD   zStreamSocket.getsocknamec                    r>   )NpeercertrX   rK   r   r   r	   rL   z   rD   zStreamSocket.getpeercert)r   r    r!   r   rU   rW   r   rC   rG   rL   rM   r   r   r2   r	   rN   d   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.sleepr   )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