a
    sd_                     @   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 Zej	j
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$trio async I/O library query support    Nc                 C   s   | rt | S tj S d S N)trioZmove_on_afterdns_asyncbackendZNullContexttimeout r   3/usr/lib/python3/dist-packages/dns/_trio_backend.py_maybe_timeout   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   || _ |j| _d S r   )socketfamily)selfr   r   r   r	   __init__   s    zDatagramSocket.__init__c                    sN   t |$ | j||I d H W  d    S 1 s20    Y  tjj|dd S Nr   )r
   r   sendtor   	exceptionTimeout)r   whatdestinationr   r   r   r	   r      s    
2zDatagramSocket.sendtoc                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r   recvfromr   r   r   r   sizer   r   r   r	   r   #   s    
0zDatagramSocket.recvfromc                    s   | j   d S r   )r   closer   r   r   r	   r   (   s    zDatagramSocket.closec                    s
   | j  S r   )r   getpeernamer   r   r   r	   r   +   s    zDatagramSocket.getpeernamec                    s
   | j  S r   )r   getsocknamer   r   r   r	   r   .   s    zDatagramSocket.getsocknameN)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r	   r      s   r   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )StreamSocketFc                 C   s   || _ || _|| _d S r   )r   streamtls)r   r   r!   r"   r   r   r	   r   3   s    zStreamSocket.__init__c                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r!   Zsend_allr   r   r   )r   r   r   r   r   r	   sendall8   s    
0zStreamSocket.sendallc                    sL   t |" | j|I d H W  d    S 1 s00    Y  tjj|dd S r   )r
   r!   Zreceive_somer   r   r   r   r   r   r	   recv=   s    
0zStreamSocket.recvc                    s   | j  I d H  d S r   )r!   acloser   r   r   r	   r   B   s    zStreamSocket.closec                    s$   | j r| jjj S | jj S d S r   )r"   r!   transport_streamr   r   r   r   r   r	   r   E   s    zStreamSocket.getpeernamec                    s$   | j r| jjj S | jj S d S r   )r"   r!   r&   r   r   r   r   r   r	   r   K   s    zStreamSocket.getsocknameN)F)	r   r   r   r   r#   r$   r   r   r   r   r   r   r	   r    2   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	   nameS   s    zBackend.namer   Nc	                    s.  t j|||}	d }
zf|r0|	t||I d H  |tjkrxt|& |	t||I d H  W d    n1 sn0    Y  W n ty   |	   Y n0 |tj	krt
|	S |tjkrt |	}
d }	d}|rd}zt j|
||d}
W n$ ty
   |
 I d H   Y n0 t||
|S tdd|  d S )NFT)server_hostnamezunsupported socket ztype )r   r   Zbind_lltupleZSOCK_STREAMr
   Zconnect	Exceptionr   Z
SOCK_DGRAMr   ZSocketStreamZ	SSLStreamr%   r    NotImplementedError)r   ZafZsocktypeprotosourcer   r   Zssl_contextr)   sr!   r"   r   r   r	   make_socketV   s<    

8


zBackend.make_socketc                    s   t |I d H  d S r   )r   sleep)r   Zintervalr   r   r	   r1   v   s    zBackend.sleep)r   NNNNN)r   r   r   r(   r0   r1   r   r   r   r	   r'   R   s      
 r'   )__doc__r   r   Ztrio.socketZdns._asyncbackendr   Zdns.exceptionZdns.inetr
   ZinetZlow_level_address_tupler*   r   r   r    r'   r   r   r   r	   <module>   s    