+
    Dfj$                         R t ^ RIt^ RIHt ^ RIHtHtHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHtHtHt ]! ^4      w  tttR!t]! ]P0                  4       ! R R4      4       tR"R	 lt/ ]P6                  R
b]P8                  Rb]P:                  Rb]P<                  Rb]P>                  Rb]P@                  Rb]PB                  Rb]PD                  Rb]PF                  Rb]PH                  Rb]PJ                  Rb]PL                  Rb]PN                  Rb]PP                  Rb]PR                  Rb]PT                  Rb]PV                  Rb]PX                  R]PZ                  R]P\                  R]P^                  R]P`                  R]Pb                  R /Ct2R# )#z>
Base functionality useful to various parts of Twisted Names.
N)implementer)defererror
interfaces)Logger)dns)DNSFormatErrorDNSNameErrorDNSNotImplementedErrorDNSQueryRefusedErrorDNSServerErrorDNSUnknownErrorc            
         a  ] tR t^!t o Rt]! 4       t]P                  ]	]P                  ]]P                  ]]P                  ]]P                   ]/tRtR tR tR!R ltR tR!R ltR!R ltR!R	 ltR!R
 ltR!R ltR!R ltR!R ltR!R ltR!R lt R!R lt!R!R lt"R!R lt#R!R lt$R!R lt%R!R lt&R!R lt'R!R lt(R!R lt)R!R lt*R!R lt+R!R lt,R!R lt-R!R lt.R"R lt/R t0R t1V t2R# )#ResolverBasea6  
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                ~    / V n         \         P                  4        F  w  r\        W4      V P                   V&   K  	  R # N)typeToMethoditemsgetattr)selfkvs   &  6/usr/lib/python3/dist-packages/twisted/names/common.py__init__ResolverBase.__init__7   s4     &&(DA#*4#3Da  )    c                B    V P                   P                  V\        4      # )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                    V P                   VP                  ,          p\        P                  ! W1P                  P                  V4      #   \
         dq    T P                  P                  R TR7       \        P                  ! T P                  TP                  P                  \        P                  TP                  T4      u # i ; i)z: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&&uzz2F &&vzzHH  	IIOOL   &&ejjoosvvuzz7 	s   A
 
A8CCc                @    \         P                  ! \        R 4      4      # )zResolverBase._lookup)r   failNotImplementedError)r   r&   clsr$   r,   s   &&&&&r   r*   ResolverBase._lookupS   s    zz-.DEFFr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   domainStringr+   Ar   r&   r,   s   &&&r   lookupAddressResolverBase.lookupAddressV   s*    ||C,,T2CFFCEE7KKr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   AAAAr7   s   &&&r   lookupIPV6AddressResolverBase.lookupIPV6AddressY   *    ||C,,T2CFFCHHgNNr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   A6r7   s   &&&r   lookupAddress6ResolverBase.lookupAddress6\   *    ||C,,T2CFFCFFGLLr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   MXr7   s   &&&r   lookupMailExchangeResolverBase.lookupMailExchange_   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   NSr7   s   &&&r   lookupNameserversResolverBase.lookupNameserversb   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   CNAMEr7   s   &&&r   lookupCanonicalName ResolverBase.lookupCanonicalNamee   *    ||C,,T2CFFCIIwOOr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   MBr7   s   &&&r   lookupMailBoxResolverBase.lookupMailBoxh   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   MGr7   s   &&&r   lookupMailGroupResolverBase.lookupMailGroupk   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   MRr7   s   &&&r   lookupMailRenameResolverBase.lookupMailRenamen   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   PTRr7   s   &&&r   lookupPointerResolverBase.lookupPointerq   *    ||C,,T2CFFCGGWMMr   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   SOAr7   s   &&&r   lookupAuthorityResolverBase.lookupAuthorityt   ra   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   NULLr7   s   &&&r   
lookupNullResolverBase.lookupNullw   r>   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   WKSr7   s   &&&r   lookupWellKnownServices$ResolverBase.lookupWellKnownServicesz   ra   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   SRVr7   s   &&&r   lookupServiceResolverBase.lookupService}   ra   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   HINFOr7   s   &&&r   lookupHostInfoResolverBase.lookupHostInfo   rP   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   MINFOr7   s   &&&r   lookupMailboxInfoResolverBase.lookupMailboxInfo   rP   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   TXTr7   s   &&&r   
lookupTextResolverBase.lookupText   ra   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   SPFr7   s   &&&r   lookupSenderPolicyResolverBase.lookupSenderPolicy   ra   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   RPr7   s   &&&r   lookupResponsibility!ResolverBase.lookupResponsibility   rC   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   AFSDBr7   s   &&&r   lookupAFSDatabaseResolverBase.lookupAFSDatabase   rP   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   AXFRr7   s   &&&r   
lookupZoneResolverBase.lookupZone   r>   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   NAPTRr7   s   &&&r   lookupNamingAuthorityPointer)ResolverBase.lookupNamingAuthorityPointer   rP   r   c                    V P                  \        P                  ! V4      \        P                  \        P                  V4      # r   )r*   r   r5   r+   ALL_RECORDSr7   s   &&&r   lookupAllRecordsResolverBase.lookupAllRecords   s*    ||C,,T2CFFCOOWUUr   c                    \         P                  ! V4      pV P                  W4      pVP                  V P                  W4       V# r   )r   r5   r   addCallback
_cbRecords)r   r&   r,   effortds   &&&& r   getHostByNameResolverBase.getHostByName   s;    % !!$0	doot4r   c                    Vw  rEp\        V \        P                  ! V4      WE,           V,           V4      pV'       g   \        P                  ! V4      hV# r   )extractRecordr   Namer   DNSLookupError)r   recordsr&   r   ansauthaddresults   &&&&    r   r   ResolverBase._cbRecords   sD    "CtSXXd^SZ#5EvN&&t,,r   )r   r   )N
   )3__name__
__module____qualname____firstlineno____doc__r   r(   r   EFORMATr   ESERVERr   ENAMEr	   ENOTIMPr
   EREFUSEDr   r   r   r   r    r#   r*   r8   r<   rA   rF   rJ   rN   rS   rW   r[   r_   rd   rh   rl   rp   rt   rx   r|   r   r   r   r   r   r   r   r   __static_attributes____classdictcell__)__classdict__s   @r   r   r   !   s      8D^^		<+*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                  aaa S'       g   R# \        \        R4      '       d   V Fp  pVP                  S8X  g   K  VP                  \        P
                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V Fp  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V Fp  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        P                  ! \        P                  VP                  P                  4      u # 	  V F  pVP                  S8X  g   K  VP                  \        P                  8X  g   K7  \        WP                  P                  VS^,
          4      pV'       g;   V P                  VP                  P                  P                  S^,
          R7      u # Vu # 	  V F  pVP                  \        P                   8w  d   K$  ^ RIHp VP'                  VP                  P                  P                  P)                  R4      \        P*                  3.R7      oVVV3R lpSP-                  SP                  4      P/                  V4      u # 	  R# )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   )clientascii)serversc                 R   < V w  rp\        SSW,           V,           S^,
          4      # )   )r   )r   r   r   r   levelr&   
nsResolvers   &   r   
queryAgain!extractRecord.<locals>.queryAgain   s)    &S T3:3CUQYOOr   )hasattrsocketr&   r$   r   r@   r   AF_INET6payloadaddressr;   r6   AF_INETrM   r   r   rI   twisted.namesr   ResolverdecodePORTr8   r   )	resolverr&   answersr   rr   r   r   r   s	   &f&f    @r   r   r      s   4  v{##Avv~!&&CFF"2''9J9JKK  Avv~!&&CHH"4''9J9JKK  66T>affo##FNNAII4E4EFF  66T>aff		1"8YY^^WeaiPF--aiinn.A.A%RS)-TTM  66SVV(__$$++G4chh? % 

	P ''		2>>zJJ r   r8   r<   rA   rJ   rN   rd   rS   rW   r[   rh   rl   r_   rt   rx   rF   r|   r   r   r   rp   r   r   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   r6   r;   r@   rI   rM   rc   rR   rV   rZ   rg   rk   r^   rs   rw   rE   r{   r   r   r   ro   r   r   r   r   r   r   r   <module>r      s  

  & 5 5 !   !H eT Z!!"H H #HV?KDEE?HH! FF FF	
 II$ GG FFO FF FF HHl GG& GG_ II II" FF   GG\!" GG!#$ FF"II"GG_II-HHlOO'/r   