
    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      [/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/names/common.py__init__ResolverBase.__init__7   s4     &&(DA#*4#3D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&&uzz2F &&vzzHH  	IIOOL   &&ejjoosvvuzz7 	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    zz-.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2CFFCEE7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2CFFCHHg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2CFFCFFG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2CFFCIIw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2CFFCGGW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2CFFCOOW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	doot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tSXXd^SZ#5Ev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     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                   ^^^ 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 T3:3CUQY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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   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 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   