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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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   b/home/www/findmeahotel.co.uk/times_travel/venv/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   s    | j r| j  s| j | d S r   r   r   r   r   r	   connection_lost'   s    z!_DatagramProtocol.connection_lostc                 C   s   | j   d S r   )r   closer   r   r   r	   r   +   s    z_DatagramProtocol.closeN)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r	   r      s   r   c                    sN   |r@zt | |I d H W S  t jk
r<   tjj|dY qJX n
| I d H S d S )N)timeout)r   wait_forTimeoutErrordns	exceptionTimeout)	awaitabler!   r   r   r	   _maybe_wait_for/   s    r(   c                       sD   e Zd Z f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   :   s    zDatagramSocket.__init__c                    s   | j || t|S r   )r   sendtolen)r   whatdestinationr!   r   r   r	   r/   ?   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   D   s    
zDatagramSocket.recvfromc                    s   | j   d S r   )r+   r   r   r   r   r	   r   O   s    zDatagramSocket.closec                    s   | j dS Npeernamer   get_extra_infor   r   r   r	   getpeernameR   s    zDatagramSocket.getpeernamec                    s   | j dS Nsocknamer9   r   r   r   r	   getsocknameU   s    zDatagramSocket.getsockname)
r   r   r    r   r/   r   r   r;   r>   __classcell__r   r   r-   r	   r)   9   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 )StreamSocketc                 C   s   || _ || _|| _d S r   )r,   readerwriter)r   afrA   rB   r   r   r	   r   Z   s    zStreamSocket.__init__c                    s"   | j | t| j  |I d H S r   )rB   writer(   drain)r   r1   r!   r   r   r	   sendall_   s    zStreamSocket.sendallc                    s   t | j||I d H S r   )r(   rA   read)r   r6   r!   r   r   r	   recvc   s    zStreamSocket.recvc                    s8   | j   z| j  I d H  W n tk
r2   Y nX d S r   )rB   r   wait_closedr   r   r   r   r	   r   f   s
    
zStreamSocket.closec                    s   | j dS r7   rB   r:   r   r   r   r	   r;   m   s    zStreamSocket.getpeernamec                    s   | j dS r<   rJ   r   r   r   r	   r>   p   s    zStreamSocket.getsocknameN)	r   r   r    r   rF   rH   r   r;   r>   r   r   r   r	   r@   Y   s   r@   c                   @   s.   e Zd Zdd ZdddZdd Zd	d
 ZdS )Backendc                 C   s   dS )Nr   r   r   r   r   r	   nameu   s    zBackend.namer   Nc	              
      s   |d kr|t jkrtrtdt }	|t jkrX|	jt||||dI d H \}
}t||
|S |t jkr|d krrt	dt
tj|d |d |||||d|I d H \}}t|||S tdd|  d S )	NzHdestinationless datagram sockets are not supported by asyncio on Windows)r,   protoremote_addrz'destination required for stream socketsr      )sslr,   rM   
local_addrserver_hostnamezunsupported socket ztype )socket
SOCK_DGRAM	_is_win32NotImplementedErrorr
   create_datagram_endpointr   r)   SOCK_STREAM
ValueErrorr(   r   open_connectionr@   )r   rC   socktyperM   sourcer2   r!   ssl_contextrR   loopr   r+   rwr   r   r	   make_socketx   sB    

	zBackend.make_socketc                    s   t |I d H  d S r   )r   sleep)r   intervalr   r   r	   rb      s    zBackend.sleepc                 C   s   t S r   )rU   r   r   r   r	   datagram_connection_required   s    z$Backend.datagram_connection_required)r   NNNNN)r   r   r    rL   ra   rb   rd   r   r   r   r	   rK   t   s         
1rK   )__doc__rS   r   sysZdns._asyncbackendr$   Zdns.exceptionplatformrU   r
   r   r(   Z_asyncbackendr)   r@   rK   r   r   r   r	   <module>   s   

 