§
    ÈtºfŽ$  ã                   óF  — d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZ  ed¦  «        \  ZZZd	Z eej        ¦  «         G d
„ d¦  «        ¦   «         Zd%d„Zi 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j-        d ej.        d!ej/        d"ej0        d#ej1        d$i¥Z2dS )&z>
Base functionality useful to various parts of Twisted Names.
é    N)Úimplementer)ÚdeferÚerrorÚ
interfaces)ÚLogger)Údns)ÚDNSFormatErrorÚDNSNameErrorÚDNSNotImplementedErrorÚDNSQueryRefusedErrorÚDNSServerErrorÚDNSUnknownErroré   )© r   r   c            
       óT  — 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„ Zd„ Zd!d„Zd„ Zd!d„Zd!d„Zd!d	„Zd!d
„Zd!d„Zd!d„Zd!d„Zd!d„Zd!d„Zd!d„Z d!d„Z!d!d„Z"d!d„Z#d!d„Z$d!d„Z%d!d„Z&d!d„Z'd!d„Z(d!d„Z)d!d„Z*d!d„Z+d!d„Z,d!d„Z-d"d„Z.d „ Z/dS )#Ú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                 ó‚   — i | _         t                                ¦   «         D ]\  }}t          | |¦  «        | j         |<   Œd S ©N)ÚtypeToMethodÚitemsÚgetattr)ÚselfÚkÚvs      úS/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/common.pyÚ__init__zResolverBase.__init__7   sM   € ØˆÔÝ ×&Ò&Ñ(Ô(ð 	4ð 	4‰DˆAˆqÝ#*¨4°Ñ#3Ô#3ˆDÔ˜aÑ Ð ð	4ð 	4ó    c                 óB   — | 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   ÚresponseCodes     r   ÚexceptionForCodezResolverBase.exceptionForCode<   s   € ð Œ~×!Ò! ,µÑ@Ô@Ð@r   c                 ó,  — 	 | j         |j                 }t          j        ||j        j        |¦  «        S # t
          $ rU | j                             d|¬¦  «         t          j        | j        |j        j        t          j
        |j        |¦  «        cY S w xY w)Nz:Query of unknown type {query.type} for {query.name.name!r})Úquery)r   Útyper   ÚmaybeDeferredÚnameÚKeyErrorÚ_logÚdebugÚ_lookupr   ÚIN)r   r$   ÚtimeoutÚmethods       r   r$   zResolverBase.queryE   s¨   € ð	IØÔ& u¤zÔ2ˆFõ Ô& v¨u¬z¬ÀÑHÔHÐHøõ ð 	ð 	ð 	ØŒI�OŠOØLØð ñ ô ð õ Ô&Ø”˜eœjœo­s¬v°u´zÀ7ñô ð ð ð ð	øøøs   ‚4 ´ABÂBc                 óD   — t          j        t          d¦  «        ¦  «        S )NzResolverBase._lookup)r   ÚfailÚNotImplementedError)r   r'   Úclsr%   r-   s        r   r+   zResolverBase._lookupS   s   € ÝŒzÕ-Ð.DÑEÔEÑFÔFÐFr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   ÚdomainStringr,   ÚA©r   r'   r-   s      r   ÚlookupAddresszResolverBase.lookupAddressV   s)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼EÀ7ÑKÔKÐKr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚAAAAr6   s      r   ÚlookupIPV6AddresszResolverBase.lookupIPV6AddressY   ó)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼HÀgÑNÔNÐNr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚA6r6   s      r   ÚlookupAddress6zResolverBase.lookupAddress6\   ó)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼FÀGÑLÔLÐLr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚMXr6   s      r   ÚlookupMailExchangezResolverBase.lookupMailExchange_   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚNSr6   s      r   ÚlookupNameserverszResolverBase.lookupNameserversb   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚCNAMEr6   s      r   ÚlookupCanonicalNamez ResolverBase.lookupCanonicalNamee   ó)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼IÀwÑOÔOÐOr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚMBr6   s      r   ÚlookupMailBoxzResolverBase.lookupMailBoxh   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚMGr6   s      r   ÚlookupMailGroupzResolverBase.lookupMailGroupk   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚMRr6   s      r   ÚlookupMailRenamezResolverBase.lookupMailRenamen   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚPTRr6   s      r   ÚlookupPointerzResolverBase.lookupPointerq   ó)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼GÀWÑMÔMÐMr   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚSOAr6   s      r   ÚlookupAuthorityzResolverBase.lookupAuthorityt   rV   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚNULLr6   s      r   Ú
lookupNullzResolverBase.lookupNullw   r;   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚWKSr6   s      r   ÚlookupWellKnownServicesz$ResolverBase.lookupWellKnownServicesz   rV   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚSRVr6   s      r   ÚlookupServicezResolverBase.lookupService}   rV   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚHINFOr6   s      r   ÚlookupHostInfozResolverBase.lookupHostInfo€   rI   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚMINFOr6   s      r   ÚlookupMailboxInfozResolverBase.lookupMailboxInfoƒ   rI   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚTXTr6   s      r   Ú
lookupTextzResolverBase.lookupText†   rV   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚSPFr6   s      r   ÚlookupSenderPolicyzResolverBase.lookupSenderPolicy‰   rV   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚRPr6   s      r   ÚlookupResponsibilityz!ResolverBase.lookupResponsibilityŒ   r?   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚAFSDBr6   s      r   ÚlookupAFSDatabasezResolverBase.lookupAFSDatabase�   rI   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚAXFRr6   s      r   Ú
lookupZonezResolverBase.lookupZone’   r;   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚNAPTRr6   s      r   ÚlookupNamingAuthorityPointerz)ResolverBase.lookupNamingAuthorityPointer•   rI   r   c                 ó~   — |                       t          j        |¦  «        t          j        t          j        |¦  «        S r   )r+   r   r4   r,   ÚALL_RECORDSr6   s      r   ÚlookupAllRecordszResolverBase.lookupAllRecords˜   s)   € Ø�|Š|�CÔ,¨TÑ2Ô2µC´F½C¼OÈWÑUÔUÐUr   é
   c                 ó’   — t          j        |¦  «        }|                      ||¦  «        }|                     | j        ||¦  «         |S r   )r   r4   r}   ÚaddCallbackÚ
_cbRecords)r   r'   r-   ÚeffortÚds        r   ÚgetHostByNamezResolverBase.getHostByNameœ   sF   € ÝÔ Ñ%Ô%ˆð ×!Ò! $¨Ñ0Ô0ˆØ	�Š�d”o t¨VÑ4Ô4Ð4Øˆr   c                 ó’   — |\  }}}t          | t          j        |¦  «        ||z   |z   |¦  «        }|st          j        |¦  «        ‚|S r   )ÚextractRecordr   ÚNamer   ÚDNSLookupError)r   Úrecordsr'   r‚   ÚansÚauthÚaddÚresults           r   r�   zResolverBase._cbRecords¥   sP   € Ø"Ñˆˆd�CÝ˜t¥S¤X¨d¡^¤^°S¸4±ZÀ#Ñ5EÀvÑNÔNˆØð 	-ÝÔ& tÑ,Ô,Ð,Øˆr   r   )Nr~   )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r   ÚEFORMATr	   ÚESERVERr   ÚENAMEr
   ÚENOTIMPr   ÚEREFUSEDr   r   r   r   r"   r$   r+   r7   r:   r>   rB   rE   rH   rL   rO   rR   rU   rY   r\   r_   rb   re   rh   rk   rn   rq   rt   rw   rz   r}   r„   r�   r   r   r   r   r   !   sô  € € € € € ðð ð ˆ6‰8Œ8€DàŒ�^ØŒ�^ØŒ	�<ØŒÐ+ØŒÐ*ð€Ið €Lð4ð 4ð 4ð
Að Að AðIð Ið Ið IðGð Gð GðLð Lð Lð LðOð Oð Oð OðMð Mð Mð MðMð Mð Mð MðMð Mð Mð MðPð Pð Pð PðMð Mð Mð MðMð Mð Mð MðMð Mð Mð MðNð Nð Nð NðNð Nð Nð NðOð Oð Oð OðNð Nð Nð NðNð Nð Nð NðPð Pð Pð PðPð Pð Pð PðNð Nð Nð NðNð Nð Nð NðMð Mð Mð MðPð Pð Pð PðOð Oð Oð OðPð Pð Pð PðVð Vð Vð Vðð ð ð ðð ð ð ð r   r   r~   c                 ó>  ‡‡‡— ‰sdS t          t          d¦  «        r |D ]M}|j        ‰k    r@|j        t          j        k    r+t          j        t          j        |j        j	        ¦  «        c S ŒN|D ]M}|j        ‰k    r@|j        t          j
        k    r+t          j        t          j        |j        j	        ¦  «        c S ŒN|D ]M}|j        ‰k    r@|j        t          j        k    r+t          j        t          j        |j        j	        ¦  «        c S ŒN|D ]r}|j        ‰k    re|j        t          j        k    rPt          | |j        j        |‰dz
  ¦  «        }|s+|                      |j        j        j        ‰dz
  ¬¦  «        c S |c S Œs|D ]˜}|j        t          j        k    rŒddlm} |                     |j        j        j                             d¦  «        t          j        fg¬¦  «        Šˆˆˆfd	„}‰                     ‰j        ¦  «                             |¦  «        c S dS )
am  
    Resolve a name to an IP address, following I{CNAME} records and I{NS}
    referrals recursively.

    This is an implementation detail of L{ResolverBase.getHostByName}.

    @param resolver: The resolver to use for the next query (unless handling
    an I{NS} referral).
    @type resolver: L{IResolver}

    @param name: The name being looked up.
    @type name: L{dns.Name}

    @param answers: All of the records returned by the previous query (answers,
    authority, and additional concatenated).
    @type answers: L{list} of L{dns.RRHeader}

    @param level: Remaining recursion budget. This is decremented at each
    recursion. The query returns L{None} when it reaches 0.
    @type level: L{int}

    @returns: The first IPv4 or IPv6 address (as a dotted quad or colon
    quibbles), or L{None} when no result is found.
    @rtype: native L{str} or L{None}
    NÚ	inet_ntopé   )r‚   r   )ÚclientÚascii)Úserversc                 óF   •— | \  }}}t          ‰‰||z   |z   ‰dz
  ¦  «        S )Nr™   )r†   )r‰   rŠ   r‹   rŒ   Úlevelr'   Ú
nsResolvers       €€€r   Ú
queryAgainz!extractRecord.<locals>.queryAgainè   s0   ø€ Ø&ÑˆS�$˜Ý  ¨T°3¸±:ÀÑ3CÀUÈQÁYÑOÔOÐOr   )ÚhasattrÚsocketr'   r%   r   r=   r˜   ÚAF_INET6ÚpayloadÚaddressr9   r5   ÚAF_INETrG   r†   r„   rD   Útwisted.namesrš   ÚResolverÚdecodeÚPORTr7   r€   )	Úresolverr'   Úanswersrž   Úrr�   rš   r    rŸ   s	    ` `    @r   r†   r†   ­   s^  øøø€ ð4 ð Øˆtõ �v�{Ñ#Ô#ð LØð 	Lð 	LˆAØŒv˜Š~ˆ~ !¤&­C¬FÒ"2Ð"2ÝÔ'­¬¸¼Ô9JÑKÔKÐKÐKÐKøØð 	Lð 	LˆAØŒv˜Š~ˆ~ !¤&­C¬HÒ"4Ð"4ÝÔ'­¬¸¼Ô9JÑKÔKÐKÐKÐKøØð Gð GˆØŒ6�TŠ>ˆ>˜aœf­¬šo˜oÝÔ#¥F¤N°A´IÔ4EÑFÔFÐFÐFÐFøØð ð ˆØŒ6�TŠ>ˆ>˜aœf­¬	Ò1Ð1Ý" 8¨Q¬Y¬^¸WÀeÈaÁiÑPÔPˆFØð UØ×-Ò-¨a¬i¬nÔ.AÈ%ÐRSÉ)Ð-ÑTÔTÐTÐTÐTØˆMˆMˆMøð ð Kð KˆØŒ6•S”VÒÐØØ(Ð(Ð(Ð(Ð(Ð(à—_’_à””Ô$×+Ò+¨GÑ4Ô4µc´hÐ?ðð %ñ 
ô 
ˆ
ð	Pð 	Pð 	Pð 	Pð 	Pð 	Pð 	Pð ×'Ò'¨¬	Ñ2Ô2×>Ò>¸zÑJÔJÐJÐJÐJðKð Kr   r7   r:   r>   rE   rH   rY   rL   rO   rR   r\   r_   rU   re   rh   rB   rk   rn   rq   rt   rb   rz   rw   r}   )r~   )3r‘   r¢   Úzope.interfacer   Útwisted.internetr   r   r   Útwisted.loggerr   r§   r   Útwisted.names.errorr	   r
   r   r   r   r   ÚrangeÚ_ANSÚ_AUTHÚ_ADDÚEMPTY_RESULTÚ	IResolverr   r†   r5   r9   r=   rD   rG   rX   rK   rN   rQ   r[   r^   rT   rd   rg   rA   rj   rm   rp   rs   ra   ry   rv   r|   r   r   r   r   ú<module>r¸      sx  ðð
ð ð
 €€€à &Ð &Ð &Ð &Ð &Ð &à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð �E˜!‘H”HÑ €€eˆTà€ð €ˆZÔ!Ñ"Ô"ðHð Hð Hð Hð Hñ Hô Hñ #Ô"ðHðV?Kð ?Kð ?Kð ?KðDØ„Eˆ?ðà„HÐ!ðð „FÐðð „FÐð	ð
 „IÐ$ðð „GÐðð „FˆOðð „FÐðð „FÐðð „Hˆlðð „GÐ&ðð „Gˆ_ðð „IÐðð „IÐ"ðð „FÐ ðð  „Gˆ\ð!ð" „GÐ!ð#ð$ „FÐ"Ø„IÐ"Ø„Gˆ_Ø„IÐ-Ø„HˆlØ„OÐ'ð/ð €€€r   