U
    <{f#                     @   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k
r&   t   Y S X d S N)asyncioget_running_loopAttributeErrorget_event_loop r   r   S/var/www/html/Darija-Ai-API/env/lib/python3.8/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 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 r   )r   r   set_exception)r   excr   r   r	   error_received$   s    z _DatagramProtocol.error_receivedc              
   C   sb   | j r^| j  s^|d krRztW q^ tk
rN } z| j | W 5 d }~X Y q^X n| j | 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                    sR   |d k	rDzt | |I d H W S  t jk
r@   tjj|dY qNX n
| I d H S d 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                    sN   t   }z4| jjd kst|| j_t||I d H  | W S d | j_X d S r   )r
   create_futurer+   r   AssertionErrorr(   result)r   sizer!   r   r   r   r	   r   L   s    
zDatagramSocket.recvfromc                    s   | j   d S r   )r+   r   r   r   r   r	   r   W   s    zDatagramSocket.closec                    s   | j dS Npeernamer   get_extra_infor   r   r   r	   getpeernameZ   s    zDatagramSocket.getpeernamec                    s   | j dS Nsocknamer9   r   r   r   r	   getsockname]   s    zDatagramSocket.getsocknamec                    s   t d S r   NotImplementedErrorr   r!   r   r   r	   getpeercert`   s    zDatagramSocket.getpeercert)r   r   r    r   r/   r   r   r;   r>   rB   __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   afrE   rF   r   r   r	   r   e   s    zStreamSocket.__init__c                    s"   | j | t| j  |I d H S r   )rF   writer(   drain)r   r1   r!   r   r   r	   sendallj   s    zStreamSocket.sendallc                    s   t | j||I d H S r   )r(   rE   read)r   r6   r!   r   r   r	   recvn   s    zStreamSocket.recvc                    s   | j   d S r   )rF   r   r   r   r   r	   r   q   s    zStreamSocket.closec                    s   | j dS r7   rF   r:   r   r   r   r	   r;   t   s    zStreamSocket.getpeernamec                    s   | j dS r<   rM   r   r   r   r	   r>   w   s    zStreamSocket.getsocknamec                    s   | j dS )NpeercertrM   rA   r   r   r	   rB   z   s    zStreamSocket.getpeercertN)
r   r   r    r   rJ   rL   r   r;   r>   rB   r   r   r   r	   rD   d   s   rD   Zdoh)_compute_times_expiration_for_this_attempt
_remainingc                       s8   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r2tdd S )Nr   z9the asyncio transport for HTTPX cannot set the local port)r*   r   Z_local_port	_resolver_bootstrap_address_familyr@   )r   resolver
local_portbootstrap_addressr,   r-   r   r	   r      s    
z_NetworkBackend.__init__Nc              
      s   g }t |\}}tj|r(|| nV| jd k	r@|| j n>t|}| j}	|r^tj|}	| j	j
||	|dI d H }
|
 }|D ]f}zLtd|}t|}t| tj|||dI d H }W 5 Q R X t|W   S  tk
r   Y qX qtjd S )N)r,   Zlifetimeg       @)Zremote_hostZremote_portZ
local_host)rO   r$   inetZ
is_addressappendrT   rQ   rU   Zaf_for_addressrS   resolve_name	addressesrP   anyioZ
fail_afterconnect_tcp_CoreAnyIOStream	ExceptionhttpcoreZConnectError)r   hostportr!   local_addresssocket_optionsr\   _Z
expirationr,   ZanswersaddressZattempt_expirationstreamr   r   r	   r^      s<    
  
z_NetworkBackend.connect_tcpc                    s   t d S r   r?   )r   pathr!   re   r   r   r	   connect_unix_socket   s    z#_NetworkBackend.connect_unix_socketc                    s   t |I d H  d S r   )r]   sleep)r   secondsr   r   r	   rk      s    z_NetworkBackend.sleep)N)N)r   r   r    r   r^   rj   rk   rC   r   r   r-   r	   rR      s    
" 
rR   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)rW   rX   rV   r,   c                   s>   |d krdd l }|j }t j|| t||||| j_d S )Nr   )Zdns.asyncresolverZasyncresolverResolverr*   r   rR   _poolZ_network_backend)r   rW   rX   rV   r,   argskwargsr$   r-   r   r	   r      s    	
   z_HTTPTransport.__init__)r   r   r    socket	AF_UNSPECr   rC   r   r   r-   r	   rm      s
   rm   c                   @   s>   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   s   dS )Nr   r   r   r   r   r	   name   s    zBackend.namer   Nc	              
      s   t  }	|tjkrVtr,|d kr,tj|df}|	jt||||dI d H \}
}t	||
|S |tj
kr|d krptdttj|d |d |||||d|I d H \}}t|||S tdd|  d S )Nr   )r,   protoremote_addrz'destination required for stream sockets   )sslr,   rv   
local_addrserver_hostnamezunsupported socket ztype )r
   rr   
SOCK_DGRAM	_is_win32r$   rY   Z
any_for_afcreate_datagram_endpointr   r)   SOCK_STREAM
ValueErrorr(   r   open_connectionrD   r@   )r   rG   socktyperv   sourcer2   r!   ssl_contextr{   loopr   r+   rwr   r   r	   make_socket   s>    

	zBackend.make_socketc                    s   t |I d H  d S r   )r   rk   )r   intervalr   r   r	   rk   	  s    zBackend.sleepc                 C   s   dS )NFr   r   r   r   r	   datagram_connection_required  s    z$Backend.datagram_connection_requiredc                 C   s   t S r   )rm   r   r   r   r	   get_transport_class  s    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    ru   r   rk   r   r   r"   r   r   r   r	   rt      s         
/rt   )%__doc__r   rr   sysZdns._asyncbackendr$   Zdns._featuresZdns.exceptionZdns.inetplatformr}   r
   r   r(   Z_asyncbackendr)   rD   Z	_featuresZhaver]   ra   Zhttpcore._backends.anyioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZAnyIOStreamr_   Z	dns.queryrO   rP   rQ   rR   ZAsyncHTTPTransportrm   ZNullTransportrt   r   r   r   r	   <module>   s2   

#
5