U
    d#                     @   s   d dl mZmZ d dlmZ d dlZd dlZd dlZd dl	Zd dl
ZG dd dZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZdS )    )OptionalUnion)urlparseNc                   @   s   e Zd Zdd Zdd ZedddZeddd	Zedd
dZ	e
dddZdejjeee e
eeeejjdddZdejjeee e
eejjeeejjd	ddZdS )
Nameserverc                 C   s   d S N selfr   r   2/tmp/pip-unpacked-wheel-pk5slln3/dns/nameserver.py__init__   s    zNameserver.__init__c                 C   s   t d S r   NotImplementedErrorr   r   r   r
   __str__   s    zNameserver.__str__returnc                 C   s   t d S r   r   r   r   r   r
   kind   s    zNameserver.kindc                 C   s   t d S r   r   r   r   r   r
   is_always_max_size   s    zNameserver.is_always_max_sizec                 C   s   t d S r   r   r   r   r   r
   answer_nameserver   s    zNameserver.answer_nameserverc                 C   s   t d S r   r   r   r   r   r
   answer_port   s    zNameserver.answer_portFrequesttimeoutsourcesource_portmax_sizeone_rr_per_rrsetignore_trailingr   c                 C   s   t d S r   r   r	   r   r   r   r   r   r   r   r   r   r
   query   s    
zNameserver.query	r   r   r   r   r   backendr   r   r   c	           	         s   t d S r   r   	r	   r   r   r   r   r   r    r   r   r   r   r
   async_query*   s    zNameserver.async_queryN)FF)FF)__name__
__module____qualname__r   r   strr   boolr   r   intr   dnsmessageQueryMessagefloatr   Messager   asyncbackendBackendr"   r   r   r   r
   r      s>   
    r   c                       sd   e Zd Zeed fddZedddZedddZd	d
 Z	edddZ
edddZ  ZS )AddressAndPortNameserveraddressportc                    s   t    || _|| _d S r   )superr   r2   r3   r	   r2   r3   	__class__r   r
   r   9   s    
z!AddressAndPortNameserver.__init__r   c                 C   s   t d S r   r   r   r   r   r
   r   >   s    zAddressAndPortNameserver.kindc                 C   s   dS )NFr   r   r   r   r
   r   A   s    z+AddressAndPortNameserver.is_always_max_sizec                 C   s    |   }| d| j d| j S )N:@)r   r2   r3   )r	   Zns_kindr   r   r
   r   D   s    z AddressAndPortNameserver.__str__c                 C   s   | j S r   )r2   r   r   r   r
   r   H   s    z*AddressAndPortNameserver.answer_nameserverc                 C   s   | j S r   )r3   r   r   r   r
   r   K   s    z$AddressAndPortNameserver.answer_port)r#   r$   r%   r&   r(   r   r   r'   r   r   r   r   __classcell__r   r   r6   r
   r0   8   s   r0   c                       s   e Zd Zdeed fddZdd Zdejj	e
ee eeeeejjdd	d
Zdejj	e
ee eeejjeeejjd	ddZ  ZS )Do53Nameserver5   r1   c                    s   t  || d S r   )r4   r   r5   r6   r   r
   r   P   s    zDo53Nameserver.__init__c                 C   s   dS )NZDo53r   r   r   r   r
   r   S   s    zDo53Nameserver.kindFr   c           	      C   sL   |r&t jj|| j|| j||||d}n"t jj|| j|| j||d||d	}|S )N)r   r3   r   r   r   r   T)r   r3   r   r   raise_on_truncationr   r   )r)   r   tcpr2   r3   udp)	r	   r   r   r   r   r   r   r   responser   r   r
   r   V   s.    
zDo53Nameserver.queryr   c	           
         s\   |r.t jj|| j|| j|||||d	I d H }	n*t jj|| j|| j||d|||d
I d H }	|	S )N)r   r3   r   r   r    r   r   T)r   r3   r   r   r=   r    r   r   )r)   
asyncqueryr>   r2   r3   r?   )
r	   r   r   r   r   r   r    r   r   r@   r   r   r
   r"   y   s2    zDo53Nameserver.async_query)r<   )FF)FF)r#   r$   r%   r&   r(   r   r   r)   r*   r+   r,   r   r'   r-   r   r.   r/   r"   r:   r   r   r6   r
   r;   O   s6   
  +  r;   c                       s   e Zd Zdeee d fddZdd Zeddd	Zd
d Z	edddZ
edddZdejjeee eeeeejjdddZdejjeee eeejjeeejjd	ddZ  ZS )DoHNameserverN)urlbootstrap_addressc                    s   t    || _|| _d S r   )r4   r   rC   rD   )r	   rC   rD   r6   r   r
   r      s    
zDoHNameserver.__init__c                 C   s   dS )NZDoHr   r   r   r   r
   r      s    zDoHNameserver.kindr   c                 C   s   dS )NTr   r   r   r   r
   r      s    z DoHNameserver.is_always_max_sizec                 C   s   | j S r   rC   r   r   r   r
   r      s    zDoHNameserver.__str__c                 C   s   | j S r   rE   r   r   r   r
   r      s    zDoHNameserver.answer_nameserverc                 C   s   t | jj}|d krd}|S )Ni  )r   rC   r3   )r	   r3   r   r   r
   r      s    zDoHNameserver.answer_portFr   c                 C   s   t jj|| j|| j||dS )N)r   rD   r   r   )r)   r   httpsrC   rD   r   r   r   r
   r      s    
zDoHNameserver.queryr   c	           	         s   t jj|| j|||dI d H S )N)r   r   r   )r)   rA   rF   rC   r!   r   r   r
   r"      s    zDoHNameserver.async_query)N)FFF)FF)r#   r$   r%   r&   r   r   r   r'   r   r   r   r(   r   r)   r*   r+   r,   r-   r   r.   r/   r"   r:   r   r   r6   r
   rB      s@        rB   c                       s   e Zd Zdeeee d fddZdd Zdej	j
eee eeeeej	jd	d
dZdej	j
eee eeejjeeej	jd	ddZ  ZS )DoTNameserverU  N)r2   r3   hostnamec                    s   t  || || _d S r   )r4   r   rI   )r	   r2   r3   rI   r6   r   r
   r      s    zDoTNameserver.__init__c                 C   s   dS )NZDoTr   r   r   r   r
   r      s    zDoTNameserver.kindFr   c              	   C   s    t jj|| j| j|||| jdS N)r3   r   r   r   server_hostname)r)   r   tlsr2   r3   rI   r   r   r   r
   r      s    
zDoTNameserver.queryr   c	           	   	      s&   t jj|| j| j|||| jdI d H S rJ   )r)   rA   rL   r2   r3   rI   r!   r   r   r
   r"      s    zDoTNameserver.async_query)rH   N)FFF)FF)r#   r$   r%   r&   r(   r   r   r   r)   r*   r+   r,   r'   r-   r   r.   r/   r"   r:   r   r   r6   r
   rG      s8   	     rG   c                       s   e Zd Zdeeeeef ee d fddZdd Z	de
jjeee eeeee
jjd
ddZde
jjeee eee
jjeee
jjd	ddZ  ZS )DoQNameserverrH   TN)r2   r3   verifyrK   c                    s   t  || || _|| _d S r   )r4   r   rN   rK   )r	   r2   r3   rN   rK   r6   r   r
   r     s    zDoQNameserver.__init__c                 C   s   dS )NZDoQr   r   r   r   r
   r     s    zDoQNameserver.kindFr   c              
   C   s$   t jj|| j| j|||| j| jdS N)r3   r   r   r   rN   rK   )r)   r   quicr2   r3   rN   rK   r   r   r   r
   r      s    
zDoQNameserver.queryr   c	           	   
      s*   t jj|| j| j|||| j| jdI d H S rO   )r)   rA   rP   r2   r3   rN   rK   r!   r   r   r
   r"   5  s    zDoQNameserver.async_query)rH   TN)FFF)FF)r#   r$   r%   r&   r(   r   r'   r   r   r   r)   r*   r+   r,   r-   r   r.   r/   r"   r:   r   r   r6   r
   rM     sH      
	     rM   )typingr   r   urllib.parser   Zdns.asyncbackendr)   Zdns.asyncqueryZdns.inetZdns.messageZ	dns.queryr   r0   r;   rB   rG   rM   r   r   r   r
   <module>   s   -Q?2