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%curio async I/O library query support    Nc                 C   s   | rt | S tj S d S N)curioZignore_afterdns_asyncbackendZNullContexttimeout r   4/usr/lib/python3/dist-packages/dns/_curio_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   socketZfamilyselfr   r   r   r	   __init__   s    zDatagramSocket.__init__c              	      sb   t |4 I d H * | j||I d H W  d   I d H  S 1 I d H sF0    Y  tjj|dd S Nr   )r
   r   sendtor   	exceptionTimeout)r   whatdestinationr   r   r   r	   r      s    >zDatagramSocket.sendtoc              	      s`   t |4 I d H ( | j|I d H W  d   I d H  S 1 I d H sD0    Y  tjj|dd S r   )r
   r   recvfromr   r   r   r   sizer   r   r   r	   r   #   s    <zDatagramSocket.recvfromc                    s   | j  I d H  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 Zdd Zdd Zdd Zd	d
 Zdd ZdS )StreamSocketc                 C   s   || _ |j| _d S r   r   r   r   r   r	   r   3   s    zStreamSocket.__init__c              	      s`   t |4 I d H ( | j|I d H W  d   I d H  S 1 I d H sD0    Y  tjj|dd S r   )r
   r   sendallr   r   r   )r   r   r   r   r   r	   r%   7   s    <zStreamSocket.sendallc              	      s`   t |4 I d H ( | j|I d H W  d   I d H  S 1 I d H sD0    Y  tjj|dd S r   )r
   r   recvr   r   r   r   r   r   r	   r&   <   s    <zStreamSocket.recvc                    s   | j  I d H  d S r   r   r   r   r   r	   r   A   s    zStreamSocket.closec                    s
   | j  S r   r   r   r   r   r	   r   D   s    zStreamSocket.getpeernamec                    s
   | j  S r   r   r   r   r   r	   r    G   s    zStreamSocket.getsocknameN)	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	   nameL   s    zBackend.namer   Nc	              	      s   |t jkr^tj  |||}	z|r0|	t|| W n" tyT   |	 I d H   Y n0 t|	S |t jkr|rxt||}
nd }
t	|4 I d H 8 tj
|d |d ||
|dI d H }	W d   I d H  q1 I d H s0    Y  t|	S tdd|  d S )Nr      )Zsslsource_addrserver_hostnamezunsupported socket ztype )r   Z
SOCK_DGRAMr   Zbind_lltuple	Exceptionr   r   ZSOCK_STREAMr
   Zopen_connectionr$   NotImplementedError)r   ZafZsocktypeprotosourcer   r   Zssl_contextr+   sr*   r   r   r	   make_socketO   s.    

6zBackend.make_socketc                    s   t |I d H  d S r   )r   sleep)r   Zintervalr   r   r	   r3   i   s    zBackend.sleep)r   NNNNN)r!   r"   r#   r(   r2   r3   r   r   r   r	   r'   K   s      
r'   )__doc__r   r   Zcurio.socketZdns._asyncbackendr   Zdns.exceptionZdns.inetr
   ZinetZlow_level_address_tupler,   r   r   r$   r'   r   r   r   r	   <module>   s   