§
    Ètºf±  ã                   ó¦   — d Z ddlmZ ddlmZmZ ddlmZmZm	Z	  G d„ d¦  «        Z
 eej        ¦  «         G d„ dej        ¦  «        ¦   «         Zd	S )
z´
Lookup a name using multiple resolvers.

Future Plans: This needs someway to specify which resolver answered
the query, or someway to specify (authority|ttl|cache behavior|more?)
é    )Úimplementer)ÚdeferÚ
interfaces)ÚcommonÚdnsÚerrorc                   ó   — e Zd Zd„ Zd„ ZdS )ÚFailureHandlerc                 ó0   — || _         || _        || _        d S ©N)ÚresolverÚqueryÚtimeout)Úselfr   r   r   s       úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/names/resolve.pyÚ__init__zFailureHandler.__init__   s   € Ø ˆŒØˆŒ
ØˆŒˆˆó    c                 ó¢   — |                      t          j        t          j        t
          ¦  «         |                      | j        | j        ¦  «        S r   )	Útrapr   ÚDomainErrorr   ÚTimeoutErrorÚNotImplementedErrorr   r   r   )r   Úfailures     r   Ú__call__zFailureHandler.__call__   s6   € à�Š•S”_¥eÔ&8Õ:MÑNÔNÐNØ�}Š}˜TœZ¨¬Ñ6Ô6Ð6r   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r
   r
      s2   € € € € € ðð ð ð
7ð 7ð 7ð 7ð 7r   r
   c                   ó&   — e Zd ZdZd„ Zd„ Zdd„ZdS )ÚResolverChainz8
    Lookup an address using multiple L{IResolver}s
    c                 óR   — t           j                             | ¦  «         || _        dS )zi
        @type resolvers: L{list}
        @param resolvers: A L{list} of L{IResolver} providers.
        N)r   ÚResolverBaser   Ú	resolvers)r   r#   s     r   r   zResolverChain.__init__%   s&   € õ
 	Ô×$Ò$ TÑ*Ô*Ð*Ø"ˆŒˆˆr   c                 óB  — | j         s%t          j        t          j        ¦   «         ¦  «        S t          j        |||¦  «        }| j         d                              ||¦  «        }| j         dd…         D ]+}|                     t          |j        ||¦  «        ¦  «        }Œ,|S )aN  
        Build a L{dns.Query} for the given parameters and dispatch it
        to each L{IResolver} in C{self.resolvers} until an answer or
        L{error.AuthoritativeDomainError} is returned.

        @type name: C{str}
        @param name: DNS name to resolve.

        @type type: C{int}
        @param type: DNS record type.

        @type cls: C{int}
        @param cls: DNS record class.

        @type timeout: Sequence of C{int}
        @param timeout: Number of seconds after which to reissue the query.
            When the last timeout expires, the query is considered failed.

        @rtype: L{Deferred}
        @return: A L{Deferred} which fires with a three-tuple of lists of
            L{twisted.names.dns.RRHeader} instances.  The first element of the
            tuple gives answers.  The second element of the tuple gives
            authorities.  The third element of the tuple gives additional
            information.  The L{Deferred} may instead fail with one of the
            exceptions defined in L{twisted.names.error} or with
            C{NotImplementedError}.
        r   é   N)
r#   r   Úfailr   r   r   ÚQueryr   Ú
addErrbackr
   )r   ÚnameÚclsÚtyper   ÚqÚdÚrs           r   Ú_lookupzResolverChain._lookup-   s˜   € ð8 Œ~ð 	3Ý”:�eÔ/Ñ1Ô1Ñ2Ô2Ð2ÝŒI�d˜D #Ñ&Ô&ˆØŒN˜1Ô×#Ò# A wÑ/Ô/ˆØ”   Ô#ð 	Bð 	BˆAØ—’�^¨A¬G°Q¸Ñ@Ô@ÑAÔAˆAˆAØˆr   Nc                 ó  — | j         s%t          j        t          j        ¦   «         ¦  «        S | j         d                              ||¦  «        }| j         dd …         D ]+}|                     t          |j        ||¦  «        ¦  «        }Œ,|S )Nr   r%   )r#   r   r&   r   r   ÚlookupAllRecordsr(   r
   )r   r)   r   r-   r.   s        r   r1   zResolverChain.lookupAllRecordsQ   s†   € ð
 Œ~ð 	3Ý”:�eÔ/Ñ1Ô1Ñ2Ô2Ð2ØŒN˜1Ô×.Ò.¨t°WÑ=Ô=ˆØ”   Ô#ð 	Pð 	PˆAØ—’�^¨AÔ,>ÀÀgÑNÔNÑOÔOˆAˆAØˆr   r   )r   r   r   Ú__doc__r   r/   r1   r   r   r   r    r       sQ   € € € € € ðð ð#ð #ð #ð"ð "ð "ðH
ð 
ð 
ð 
ð 
ð 
r   r    N)r2   Úzope.interfacer   Útwisted.internetr   r   Útwisted.namesr   r   r   r
   Ú	IResolverr"   r    r   r   r   ú<module>r7      sÒ   ðð
ð ð 'Ð &Ð &Ð &Ð &Ð &à .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð	7ð 	7ð 	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð €ˆZÔ!Ñ"Ô"ð;ð ;ð ;ð ;ð ;�FÔ'ñ ;ô ;ñ #Ô"ð;ð ;ð ;r   