ó
    Ö›‘hŽ$  ã                   ó  • S r SSKrSSKJr  SSKJrJrJr  SSKJ	r	  SSK
Jr  SSKJrJrJrJrJrJr  \" S5      u  rrrS	r\" \R0                  5       " S
 S5      5       rS$S jr0 \R6                  S_\R8                  S_\R:                  S_\R<                  S_\R>                  S_\R@                  S_\RB                  S_\RD                  S_\RF                  S_\RH                  S_\RJ                  S_\RL                  S_\RN                  S_\RP                  S_\RR                  S_\RT                  S_\RV                  S_\RX                  S\RZ                  S\R\                  S \R^                  S!\R`                  S"\Rb                  S#0Er2g)%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            
       ó¸  • \ rS rSrSr\" 5       r\R                  \	\R                  \\R                  \\R                  \\R                   \0rSrS rS rS"S jrS rS"S jrS"S	 jrS"S
 jrS"S jrS"S jrS"S jrS"S jrS"S jrS"S jr S"S jr!S"S jr"S"S jr#S"S jr$S"S jr%S"S jr&S"S jr'S"S jr(S"S jr)S"S jr*S"S jr+S"S jr,S"S jr-S"S jr.S#S jr/S  r0S!r1g)$ÚResolverBaseé!   a6  
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                 ó|   • 0 U l         [         R                  5        H  u  p[        X5      U R                   U'   M     g ©N)ÚtypeToMethodÚitemsÚgetattr)ÚselfÚkÚvs      ÚXC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/names/common.pyÚ__init__ÚResolverBase.__init__7   s4   € ØˆÔÜ ×&Ñ&Ö(‰DˆAÜ#*¨4Ó#3ˆD×Ñ˜aÓ ò )ó    c                 óB   • U R                   R                  U[        5      $ )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   ÚexceptionForCodeÚResolverBase.exceptionForCode<   s   € ð �~‰~×!Ñ! ,´Ó@Ð@r   c                 ó€  •  U R                   UR                     n[        R                  " X1R                  R                  U5      $ ! [
         am    U R                  R                  SUS9  [        R                  " U R                  UR                  R                  [        R                  UR                  U5      s $ f = f)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'   ÚResolverBase.queryE   s™   € ð	IØ×&Ñ& u§z¡zÑ2ˆFô ×&Ò& v¯z©z¯©ÀÓHÐHøô ó 	Ø�I‰I�O‰OØLØð ñ ô ×&Ò&Ø—‘˜eŸj™jŸo™o¬s¯v©v°u·z±zÀ7óò ð	ús   ‚A ÁA4B=Â<B=c                 ó@   • [         R                  " [        S5      5      $ )NzResolverBase._lookup)r   ÚfailÚNotImplementedError)r   r*   Úclsr(   r0   s        r   r.   ÚResolverBase._lookupS   s   € Ü�zŠzÔ-Ð.DÓEÓFÐFr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   ÚdomainStringr/   ÚA©r   r*   r0   s      r   ÚlookupAddressÚResolverBase.lookupAddressV   s*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿E¹EÀ7ÓKÐKr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚAAAAr;   s      r   ÚlookupIPV6AddressÚResolverBase.lookupIPV6AddressY   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿H¹HÀgÓNÐNr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚA6r;   s      r   ÚlookupAddress6ÚResolverBase.lookupAddress6\   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿F¹FÀGÓLÐLr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚMXr;   s      r   ÚlookupMailExchangeÚResolverBase.lookupMailExchange_   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚNSr;   s      r   ÚlookupNameserversÚResolverBase.lookupNameserversb   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚCNAMEr;   s      r   ÚlookupCanonicalNameÚ ResolverBase.lookupCanonicalNamee   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿I¹IÀwÓOÐOr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚMBr;   s      r   ÚlookupMailBoxÚResolverBase.lookupMailBoxh   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚMGr;   s      r   ÚlookupMailGroupÚResolverBase.lookupMailGroupk   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚMRr;   s      r   ÚlookupMailRenameÚResolverBase.lookupMailRenamen   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚPTRr;   s      r   ÚlookupPointerÚResolverBase.lookupPointerq   ó*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿G¹GÀWÓMÐMr   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚSOAr;   s      r   ÚlookupAuthorityÚResolverBase.lookupAuthorityt   re   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚNULLr;   s      r   Ú
lookupNullÚResolverBase.lookupNullw   rB   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚWKSr;   s      r   ÚlookupWellKnownServicesÚ$ResolverBase.lookupWellKnownServicesz   re   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚSRVr;   s      r   ÚlookupServiceÚResolverBase.lookupService}   re   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚHINFOr;   s      r   ÚlookupHostInfoÚResolverBase.lookupHostInfo€   rT   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚMINFOr;   s      r   ÚlookupMailboxInfoÚResolverBase.lookupMailboxInfoƒ   rT   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚTXTr;   s      r   Ú
lookupTextÚResolverBase.lookupText†   re   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚSPFr;   s      r   ÚlookupSenderPolicyÚResolverBase.lookupSenderPolicy‰   re   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚRPr;   s      r   ÚlookupResponsibilityÚ!ResolverBase.lookupResponsibilityŒ   rG   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚAFSDBr;   s      r   ÚlookupAFSDatabaseÚResolverBase.lookupAFSDatabase�   rT   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚAXFRr;   s      r   Ú
lookupZoneÚResolverBase.lookupZone’   rB   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚNAPTRr;   s      r   ÚlookupNamingAuthorityPointerÚ)ResolverBase.lookupNamingAuthorityPointer•   rT   r   c                 óŠ   • U R                  [        R                  " U5      [        R                  [        R                  U5      $ r   )r.   r   r9   r/   ÚALL_RECORDSr;   s      r   ÚlookupAllRecordsÚResolverBase.lookupAllRecords˜   s*   € Ø�|‰|œC×,Ò,¨TÓ2´C·F±F¼C¿O¹OÈWÓUÐUr   c                 óŒ   • [         R                  " U5      nU R                  X5      nUR                  U R                  X5        U$ r   )r   r9   r˜   ÚaddCallbackÚ
_cbRecords)r   r*   r0   ÚeffortÚds        r   ÚgetHostByNameÚResolverBase.getHostByNameœ   s;   € Ü×Ò Ó%ˆð ×!Ñ! $Ó0ˆØ	�‰�d—o‘o tÔ4Øˆr   c                 ó˜   • Uu  pEn[        U [        R                  " U5      XE-   U-   U5      nU(       d  [        R                  " U5      eU$ r   )ÚextractRecordr   ÚNamer   ÚDNSLookupError)r   Úrecordsr*   r�   ÚansÚauthÚaddÚresults           r   rœ   ÚResolverBase._cbRecords¥   sD   € Ø"Ñˆ�CÜ˜t¤S§X¢X¨d£^°S±ZÀ#Ñ5EÀvÓNˆÞÜ×&Ò& tÓ,Ð,Øˆr   )r   r   )Né
   )2Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   r   ÚEFORMATr	   ÚESERVERr   ÚENAMEr
   ÚENOTIMPr   ÚEREFUSEDr   r!   r   r   r$   r'   r.   r<   r@   rE   rJ   rN   rR   rW   r[   r_   rc   rh   rl   rp   rt   rx   r|   r€   r„   rˆ   rŒ   r�   r”   r˜   rŸ   rœ   Ú__static_attributes__r   r   r   r   r   !   sø   † ññ ‹8€Dà�‰�^Ø�‰�^Ø�	‰	�<Ø�‰Ð+Ø�‰Ð*ð€Ið €Lò4ò
AôIòGôLôOôMôMôMôPôMôMôMôNôNôOôNôNôPôPôNôNôMôPôOôPôVôõr   r   c                 óŽ  ^^^• T(       d  g[        [        S5      (       aè  U Hn  nUR                  T:X  d  M  UR                  [        R
                  :X  d  M5  [        R                  " [        R                  UR                  R                  5      s  $    U Hn  nUR                  T:X  d  M  UR                  [        R                  :X  d  M5  [        R                  " [        R                  UR                  R                  5      s  $    U Hn  nUR                  T:X  d  M  UR                  [        R                  :X  d  M5  [        R                  " [        R                  UR                  R                  5      s  $    U H•  nUR                  T:X  d  M  UR                  [        R                  :X  d  M5  [        XR                  R                  UTS-
  5      nU(       d3  U R                  UR                  R                  R                  TS-
  S9s  $ Us  $    U H¨  nUR                  [        R                   :w  a  M#  SSKJn  UR'                  UR                  R                  R                  R)                  S5      [        R*                  4/S9mUUU4S	 jnTR-                  TR                  5      R/                  U5      s  $    g)
a%  
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                 ó:   >• U u  pn[        TTX-   U-   TS-
  5      $ )Nr¹   )r¢   )r¥   r¦   r§   r¨   Úlevelr*   Ú
nsResolvers       €€€r   Ú
queryAgainÚ!extractRecord.<locals>.queryAgainè   s)   ø€ Ø&ÑˆS˜Ü  ¨T°3±:ÀÑ3CÀUÈQÁYÓOÐOr   )ÚhasattrÚsocketr*   r(   r   rD   r¸   ÚAF_INET6ÚpayloadÚaddressr?   r:   ÚAF_INETrQ   r¢   rŸ   rM   Útwisted.namesrº   ÚResolverÚdecodeÚPORTr<   r›   )	Úresolverr*   Úanswersr¾   Úrr©   rº   rÀ   r¿   s	    ` `    @r   r¢   r¢   ­   sä  ú€ ö4 Øô Œv�{×#Ñ#ÛˆAØ�v‰v˜�~ !§&¡&¬C¯F©FÕ"2Ü×'Ò'¬¯©¸¿¹×9JÑ9JÓKÒKñ ó ˆAØ�v‰v˜�~ !§&¡&¬C¯H©HÕ"4Ü×'Ò'¬¯©¸¿¹×9JÑ9JÓKÒKñ ó ˆØ�6‰6�T�>˜aŸf™f¬¯©�oÜ×#Ò#¤F§N¡N°A·I±I×4EÑ4EÓFÒFñ ó ˆØ�6‰6�T�>˜aŸf™f¬¯	©	Õ1Ü" 8¯Y©Y¯^©^¸WÀeÈaÁiÓPˆFÞØ×-Ñ-¨a¯i©i¯n©n×.AÑ.AÈ%ÐRSÉ)Ð-ÐTÒTØŠMñ ó ˆØ�6‰6”S—V‘VÓÙÝ(à—_‘_à—‘—‘×$Ñ$×+Ñ+¨GÓ4´c·h±hÐ?ðð %ð 
ˆ
÷	Pð ×'Ñ'¨¯	©	Ó2×>Ñ>¸zÓJÒJò r   r<   r@   rE   rN   rR   rh   rW   r[   r_   rl   rp   rc   rx   r|   rJ   r€   r„   rˆ   rŒ   rt   r”   r�   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¢   r:   r?   rD   rM   rQ   rg   rV   rZ   r^   rk   ro   rb   rw   r{   rI   r   rƒ   r‡   r‹   rs   r“   r�   r—   r   r   r   r   Ú<module>rÙ      sÎ  ðñ
ó
 å &ç 5Ñ 5Ý !Ý ÷÷ ñ ˜!“HÑ €€eˆTà€ñ ˆZ×!Ñ!Ó"÷Hð Hó #ðHôV?KðDØ‡E�Eˆ?ðà‡H�HÐ!ðð ‡F�FÐðð ‡F�FÐð	ð
 ‡I�IÐ$ðð ‡G�GÐðð ‡F�FˆOðð ‡F�FÐðð ‡F�FÐðð ‡H�Hˆlðð ‡G�GÐ&ðð ‡G�Gˆ_ðð ‡I�IÐðð ‡I�IÐ"ðð ‡F�FÐ ðð  ‡G�Gˆ\ð!ð" ‡G�GÐ!ð#ð$ ‡F�FÐ"Ø‡I�IÐ"Ø‡G�Gˆ_Ø‡I�IÐ-Ø‡H�HˆlØ‡O�OÐ'ñ/�r   