U
    
W[                  .   @   sJ  d Z ddlmZmZ ddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddl	mZmZ ddl	mZ dd	lmZmZmZ dd
lmZ ed\ZZZdZeejG dd dZd)ddZejdejdej dej!dej"dej#dej$dej%dej&dej'dej(dej)dej*dej+dej,d ej-d!ej.d"ej/d#ej0d$ej1d%ej2d&ej3d'ej4d(iZ5dS )*z>
Base functionality useful to various parts of Twisted Names.
    )divisionabsolute_importN)implementer)dns)DNSFormatErrorDNSServerErrorDNSNameError)DNSNotImplementedErrorDNSQueryRefusedError)DNSUnknownError)defererror
interfaces)Logger   ) r   r   c                
   @   sV  e Zd ZdZe Zejeej	e
ejeejeejeiZdZdd Zdd Zd>ddZd	d
 Zd?ddZd@ddZdAddZdBddZdCddZdDddZdEddZdFddZdGddZdHddZ dIdd Z!dJd!d"Z"dKd#d$Z#dLd%d&Z$dMd'd(Z%dNd)d*Z&dOd+d,Z'dPd-d.Z(dQd/d0Z)dRd1d2Z*dSd3d4Z+dTd5d6Z,dUd7d8Z-dVd:d;Z.d<d= Z/dS )WResolverBaseaN  
    L{ResolverBase} is a base class for implementations of
    L{interfaces.IResolver} which deals with a lot
    of the boilerplate of implementing all of the lookup methods.

    @cvar _errormap: A C{dict} mapping DNS protocol failure response codes
        to exception classes which will be used to represent those failures.
    Nc                 C   s,   i | _ t  D ]\}}t| || j |< qd S N)typeToMethoditemsgetattr)selfkvr   r   6/usr/lib/python3/dist-packages/twisted/names/common.py__init__4   s    zResolverBase.__init__c                 C   s   | j |tS )z
        Convert a response code (one of the possible values of
        L{dns.Message.rCode} to an exception instance representing it.

        @since: 10.0
        )	_errormapgetr   )r   ZresponseCoder   r   r   exceptionForCode:   s    zResolverBase.exceptionForCodec              
   C   sh   z| j |j }W n@ tk
rP   | jjd|d t| j|jjt	j
|j| Y S X t||jj|S d S )Nz:Query of unknown type {query.type} for {query.name.name!r})query)r   typeKeyError_logdebugr   ZmaybeDeferred_lookupnamer   IN)r   r   timeoutmethodr   r   r   r   D   s        
zResolverBase.queryc                 C   s   t tdS )NResolverBase._lookup)r   ZfailNotImplementedError)r   r%   clsr    r'   r   r   r   r$   Q   s    r)   c                 C   s   |  |tjtj|S r   )r$   r   r&   Ar   r%   r'   r   r   r   lookupAddressU   s    zResolverBase.lookupAddressc                 C   s   |  |tjtj|S r   )r$   r   r&   AAAAr-   r   r   r   lookupIPV6AddressY   s    zResolverBase.lookupIPV6Addressc                 C   s   |  |tjtj|S r   )r$   r   r&   A6r-   r   r   r   lookupAddress6]   s    zResolverBase.lookupAddress6c                 C   s   |  |tjtj|S r   )r$   r   r&   MXr-   r   r   r   lookupMailExchangea   s    zResolverBase.lookupMailExchangec                 C   s   |  |tjtj|S r   )r$   r   r&   NSr-   r   r   r   lookupNameserverse   s    zResolverBase.lookupNameserversc                 C   s   |  |tjtj|S r   )r$   r   r&   CNAMEr-   r   r   r   lookupCanonicalNamei   s    z ResolverBase.lookupCanonicalNamec                 C   s   |  |tjtj|S r   )r$   r   r&   MBr-   r   r   r   lookupMailBoxm   s    zResolverBase.lookupMailBoxc                 C   s   |  |tjtj|S r   )r$   r   r&   MGr-   r   r   r   lookupMailGroupq   s    zResolverBase.lookupMailGroupc                 C   s   |  |tjtj|S r   )r$   r   r&   MRr-   r   r   r   lookupMailRenameu   s    zResolverBase.lookupMailRenamec                 C   s   |  |tjtj|S r   )r$   r   r&   PTRr-   r   r   r   lookupPointery   s    zResolverBase.lookupPointerc                 C   s   |  |tjtj|S r   )r$   r   r&   SOAr-   r   r   r   lookupAuthority}   s    zResolverBase.lookupAuthorityc                 C   s   |  |tjtj|S r   )r$   r   r&   NULLr-   r   r   r   
lookupNull   s    zResolverBase.lookupNullc                 C   s   |  |tjtj|S r   )r$   r   r&   WKSr-   r   r   r   lookupWellKnownServices   s    z$ResolverBase.lookupWellKnownServicesc                 C   s   |  |tjtj|S r   )r$   r   r&   SRVr-   r   r   r   lookupService   s    zResolverBase.lookupServicec                 C   s   |  |tjtj|S r   )r$   r   r&   HINFOr-   r   r   r   lookupHostInfo   s    zResolverBase.lookupHostInfoc                 C   s   |  |tjtj|S r   )r$   r   r&   MINFOr-   r   r   r   lookupMailboxInfo   s    zResolverBase.lookupMailboxInfoc                 C   s   |  |tjtj|S r   )r$   r   r&   TXTr-   r   r   r   
lookupText   s    zResolverBase.lookupTextc                 C   s   |  |tjtj|S r   )r$   r   r&   SPFr-   r   r   r   lookupSenderPolicy   s    zResolverBase.lookupSenderPolicyc                 C   s   |  |tjtj|S r   )r$   r   r&   RPr-   r   r   r   lookupResponsibility   s    z!ResolverBase.lookupResponsibilityc                 C   s   |  |tjtj|S r   )r$   r   r&   AFSDBr-   r   r   r   lookupAFSDatabase   s    zResolverBase.lookupAFSDatabasec                 C   s   |  |tjtj|S r   )r$   r   r&   AXFRr-   r   r   r   
lookupZone   s    zResolverBase.lookupZonec                 C   s   |  |tjtj|S r   )r$   r   r&   NAPTRr-   r   r   r   lookupNamingAuthorityPointer   s    z)ResolverBase.lookupNamingAuthorityPointerc                 C   s   |  |tjtj|S r   )r$   r   r&   ALL_RECORDSr-   r   r   r   lookupAllRecords   s    zResolverBase.lookupAllRecords
   c                 C   s   |  ||| j||S r   )rZ   addCallback
_cbRecords)r   r%   r'   effortr   r   r   getHostByName   s
      zResolverBase.getHostByNamec                 C   s8   |\}}}t | t||| | |}|s4t||S r   )extractRecordr   Namer   ZDNSLookupError)r   recordsr%   r^   ZansZauthaddresultr   r   r   r]      s
    

zResolverBase._cbRecords)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)N)Nr[   )0__name__
__module____qualname____doc__r   r"   r   ZEFORMATr   ZESERVERr   ZENAMEr   ZENOTIMPr	   ZEREFUSEDr
   r   r   r   r   r   r$   r.   r0   r2   r4   r6   r8   r:   r<   r>   r@   rB   rD   rF   rH   rJ   rL   rN   rP   rR   rT   rV   rX   rZ   r_   r]   r   r   r   r   r       sV        

























r   r[   c                    s   sd S t tdr~|D ]0jkrjtjkrttjjj	  S q|D ]0jkrLjtj
krLttjjj	  S qL|D ]0jkrjtjkrttjjj	  S q|D ]\jkrjtjkrt| jj| d }|s| jtjj d d  S |  S q|D ]`jtjkrddlm} |jtjjtjfgdt fdd  S qd S )	N	inet_ntop   )r^   r   )client)Zserversc                    s&   t | t | t  | t   d S )Nrj   )r`   _ANS_AUTH_ADD)rb   levelr%   rr   r   <lambda>   s
    zextractRecord.<locals>.<lambda>)hasattrsocketr%   r    r   r1   ri   ZAF_INET6ZpayloadZaddressr/   r,   ZAF_INETr7   r`   r_   strr5   twisted.namesrk   ZResolverZPORTr.   r\   )Zresolverr%   Zanswersrp   rd   rk   r   ro   r   r`      sB    
   
 

r`   r.   r0   r2   r6   r8   rB   r:   r<   r>   rD   rF   r@   rJ   rL   r4   rN   rP   rR   rT   rH   rX   rV   rZ   )r[   )6rh   Z
__future__r   r   rt   Zzope.interfacer   rv   r   Ztwisted.names.errorr   r   r   r	   r
   r   Ztwisted.internetr   r   r   Ztwisted.loggerr   rangerl   rm   rn   ZEMPTY_RESULTZ	IResolverr   r`   r,   r/   r1   r5   r7   rA   r9   r;   r=   rC   rE   r?   rI   rK   r3   rM   rO   rQ   rS   rG   rW   rU   rY   r   r   r   r   r   <module>   s|    "
%                       