a
    sd_                     @   s   d Z ddlZddlZddlZddl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    Nc                   C   s*   z
t  W S  ty$   t   Y S 0 d S N)asyncioZget_running_loopAttributeErrorZget_event_loop r   r   6/usr/lib/python3/dist-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 ||f d | _ d S r   )r
   Z
set_result)r   dataZaddrr   r   r   datagram_received   s    z#_DatagramProtocol.datagram_receivedc                 C   s   | j r| j | d S r   r
   Zset_exceptionr   excr   r   r   error_received    s    z _DatagramProtocol.error_receivedc                 C   s   | j r| 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                    sL   |r>zt | |I d H W S  t jy:   tjj|dY qH0 n
| I d H S d S N)timeout)r   Zwait_forTimeoutErrordns	exceptionTimeout)Z	awaitabler   r   r   r   _maybe_wait_for,   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 )DatagramSocketc                 C   s   || _ || _|| _d S r   )familyr	   protocol)r   r"   r	   r#   r   r   r   r   7   s    zDatagramSocket.__init__c                    s   | j || d S r   )r	   sendto)r   whatdestinationr   r   r   r   r$   <   s    zDatagramSocket.sendtoc                    s:   t   }| jjd u sJ || j_t||I d H  | S r   )r   Zcreate_futurer#   r
   r    result)r   sizer   Zdoner   r   r   r
   @   s
    
zDatagramSocket.recvfromc                    s   | j   d S r   )r#   r   r   r   r   r   r   H   s    zDatagramSocket.closec                    s   | j dS NZpeernamer	   get_extra_infor   r   r   r   getpeernameK   s    zDatagramSocket.getpeernamec                    s   | j dS NZsocknamer*   r   r   r   r   getsocknameN   s    zDatagramSocket.getsocknameN)	r   r   r   r   r$   r
   r   r,   r.   r   r   r   r   r!   6   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   afr0   r1   r   r   r   r   S   s    zStreamSocket.__init__c                    s$   | j |f t| j  |I d H S r   )r1   writer    Zdrainr   r   r   )r   r%   r   r   r   r   sendallX   s    zStreamSocket.sendallc                    s   t | j||I d H S r   )r    r0   readr   r   r   )r   countr   r   r   r   recv]   s    
zStreamSocket.recvc                    s6   | j   z| j  I d H  W n ty0   Y n0 d S r   )r1   r   Zwait_closedr   r   r   r   r   r   b   s
    
zStreamSocket.closec                    s   | j dS r)   r1   r+   r   r   r   r   r,   i   s    zStreamSocket.getpeernamec                    s   | j dS r-   r8   r   r   r   r   r.   l   s    zStreamSocket.getsocknameN)	r   r   r   r   r4   r7   r   r,   r.   r   r   r   r   r/   R   s   r/   c                   @   s&   e Zd Zdd Zd	ddZdd ZdS )
Backendc                 C   s   dS )Nr   r   r   r   r   r   nameq   s    zBackend.namer   Nc	              
      s   t  }	|tjkr8|	jt|||dI d H \}
}t||
|S |tjkr~ttj	|d |d |||||d|I d H \}}t
|||S tdd|  d S )N)r"   protor      )Zsslr"   r;   Z
local_addrserver_hostnamezunsupported socket ztype )r   socketZ
SOCK_DGRAMZcreate_datagram_endpointr   r!   ZSOCK_STREAMr    r   Zopen_connectionr/   NotImplementedError)r   r2   Zsocktyper;   sourcer&   r   Zssl_contextr=   Zloopr	   r#   rwr   r   r   make_sockett   s.    


	zBackend.make_socketc                    s   t |I d H  d S r   )r   sleep)r   Zintervalr   r   r   rD      s    zBackend.sleep)r   NNNNN)r   r   r   r:   rC   rD   r   r   r   r   r9   p   s      
r9   )__doc__r>   r   Zdns._asyncbackendr   Zdns.exceptionr   r   r    Z_asyncbackendr!   r/   r9   r   r   r   r   <module>   s   
