o
    >h%                     @   s  d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddl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& dd
l'm(Z( ddl)m*Z* ddl+m,Z, erxddl-m.Z. ee#G dd dZ/e0eegZ1e0egee0egee1eiZ2eeeeiZ3eedZ4edediZ5eeeee6e7eee7e6f ee7e6e6e6f f f  Z8ee"G dd dZ9ee"G dd dZ:ee%G dd dZ;ee&G dd dZ<dS )z=
IPv6-aware hostname resolution.

@see: L{IHostnameResolver}
    )	AF_INETAF_INET6	AF_UNSPEC
SOCK_DGRAMSOCK_STREAMAddressFamily
SocketKindgaierrorgetaddrinfo)	TYPE_CHECKINGCallableListNoReturnOptionalSequenceTupleTypeUnion)implementer)
_idnaBytes)IPv4AddressIPv6Address)Deferred)DNSLookupError)IAddressIHostnameResolverIHostResolutionIReactorThreadsIResolutionReceiverIResolverSimple)deferToThreadPool)Logger)nativeString)
ThreadPoolc                   @   s,   e Zd ZdZdefddZdefddZdS )	HostResolutionz9
    The in-progress resolution of a given hostname.
    namec                 C   
   || _ dS )zA
        Create a L{HostResolution} with the given name.
        N)r%   )selfr%    r(   z/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/internet/_resolver.py__init__?      
zHostResolution.__init__returnc                 C   s   t  N)NotImplementedErrorr'   r(   r(   r)   cancelE   s   zHostResolution.cancelN)__name__
__module____qualname____doc__strr*   r   r0   r(   r(   r(   r)   r$   9   s    r$   )TCPUDPr6   r7   c                   @   s~   e Zd ZdZdefdedeeg df  deee	e	e	ge
f fddZ				
ddedede	deeee   dedefddZdS )GAIResolverzp
    L{IHostnameResolver} implementation that resolves hostnames by calling
    L{getaddrinfo} in a thread.
    NreactorgetThreadPoolr#   r
   c                 C   s$   || _ |du r
|jn|| _|| _dS )a  
        Create a L{GAIResolver}.

        @param reactor: the reactor to schedule result-delivery on
        @type reactor: L{IReactorThreads}

        @param getThreadPool: a function to retrieve the thread pool to use for
            scheduling name resolutions.  If not supplied, the use the given
            C{reactor}'s thread pool.
        @type getThreadPool: 0-argument callable returning a
            L{twisted.python.threadpool.ThreadPool}

        @param getaddrinfo: a reference to the L{getaddrinfo} to use - mainly
            parameterized for testing.
        @type getaddrinfo: callable with the same signature as L{getaddrinfo}
        N)_reactorr:   _getThreadPool_getaddrinfo)r'   r9   r:   r
   r(   r(   r)   r*   t   s   
zGAIResolver.__init__r   r6   resolutionReceiverhostName
portNumberaddressTypestransportSemanticsr,   c                    s     }t|du rtnt|  t| dtf fdd}tj||}t}		|	 |j
dtddffdd}
|	S )<  
        See L{IHostnameResolver.resolveHostName}

        @param resolutionReceiver: see interface

        @param hostName: see interface

        @param portNumber: see interface

        @param addressTypes: see interface

        @param transportSemantics: see interface

        @return: see interface
        Nr,   c                      s*   z	  W S  ty   g  Y S w r-   )r=   r	   r(   )addressFamilyr?   r@   r'   
socketTyper(   r)   get   s   z(GAIResolver.resolveHostName.<locals>.getresultc                    sF   | D ]\}}}}}t | } |t|dg|R   q   d S Nr6   )	_afToTypeaddressResolved_socktypeToTyperF   resolutionComplete)rG   familysocktypeproto	cannonamesockaddraddrTyper>   r(   r)   deliverResults   s   z3GAIResolver.resolveHostName.<locals>.deliverResults)r<   
_typesToAF_any	frozenset_transportToSocket_GETADDRINFO_RESULTr    r;   r$   resolutionBeganaddCallback)r'   r>   r?   r@   rA   rB   poolrF   d
resolutionrT   r(   )rD   r?   r@   r>   r'   rE   r)   resolveHostName   s   
zGAIResolver.resolveHostNamer   Nr6   )r1   r2   r3   r4   r
   r   r   r   r5   intrY   r*   r   r   r   r   r   r_   r(   r(   r(   r)   r8   m   s6    
 r8   c                   @   sZ   e Zd ZdZe ZdefddZ			dded	e	d
e
deeee   de	defddZdS )SimpleResolverComplexifierzF
    A converter from L{IResolverSimple} to L{IHostnameResolver}.
    simpleResolverc                 C   r&   )zW
        Construct a L{SimpleResolverComplexifier} with an L{IResolverSimple}.
        N)_simpleResolver)r'   rc   r(   r(   r)   r*      r+   z#SimpleResolverComplexifier.__init__r   Nr6   r>   r?   r@   rA   rB   r,   c                    s   z  d}W n ty   t }Y nw t| t }| j fdd	 fddfdd |S )rC   asciic                    s    td|  S rH   )rJ   r   )address)r@   r>   r(   r)   <lambda>   s    
z<SimpleResolverComplexifier.resolveHostName.<locals>.<lambda>c                    s$   |  trd S jjd|  jdS )Nz'while looking up {name} with {resolver})r%   resolver)checkr   _logfailurerd   )error)r?   r'   r(   r)   rg     s   c                    s      S r-   )rL   )nothingrS   r(   r)   rg   
  s    )
encodeUnicodeEncodeErrorr   r"   r$   rZ   rd   getHostByNamer[   
addErrback)r'   r>   r?   r@   rA   rB   hostName_bytesr^   r(   )r?   r@   r>   r'   r)   r_      s"   


z*SimpleResolverComplexifier.resolveHostNamer`   )r1   r2   r3   r4   r!   rj   r   r*   r   r5   ra   r   r   r   r   r   r_   r(   r(   r(   r)   rb      s(    
rb   c                   @   sH   e Zd ZdZdddZdeddfd	d
ZdeddfddZdddZ	dS )FirstOneWinszT
    An L{IResolutionReceiver} which fires a L{Deferred} with its first result.
    deferredDeferred[str]c                 C   s   || _ d| _dS )zp
        @param deferred: The L{Deferred} to fire when the first resolution
            result arrives.
        FN)	_deferred	_resolved)r'   rt   r(   r(   r)   r*     s   
zFirstOneWins.__init__r^   r,   Nc                 C   r&   )z
        See L{IResolutionReceiver.resolutionBegan}

        @param resolution: See L{IResolutionReceiver.resolutionBegan}
        N)_resolution)r'   r^   r(   r(   r)   rZ        
zFirstOneWins.resolutionBeganrf   c                 C   s0   | j rdS d| _ t|tsJ | j|j dS )z
        See L{IResolutionReceiver.addressResolved}

        @param address: See L{IResolutionReceiver.addressResolved}
        NT)rw   
isinstancer   rv   callbackhost)r'   rf   r(   r(   r)   rJ   %  s
   zFirstOneWins.addressResolvedc                 C   s"   | j rdS | jt| jj dS )z?
        See L{IResolutionReceiver.resolutionComplete}
        N)rw   rv   errbackr   rx   r%   r/   r(   r(   r)   rL   3  s   zFirstOneWins.resolutionComplete)rt   ru   )r,   N)
r1   r2   r3   r4   r*   r   rZ   r   rJ   rL   r(   r(   r(   r)   rs     s    
rs   c                   @   s:   e Zd ZdZdefddZddedee dd	fd
dZ	dS )ComplexResolverSimplifierzE
    A converter from L{IHostnameResolver} to L{IResolverSimple}
    nameResolverc                 C   r&   )z
        Create a L{ComplexResolverSimplifier} with an L{IHostnameResolver}.

        @param nameResolver: The L{IHostnameResolver} to use.
        N)_nameResolver)r'   r   r(   r(   r)   r*   B  ry   z"ComplexResolverSimplifier.__init__r(   r%   timeoutsr,   ru   c                 C   s"   t  }| jt||dtg |S )z
        See L{IResolverSimple.getHostByName}

        @param name: see L{IResolverSimple.getHostByName}

        @param timeouts: see L{IResolverSimple.getHostByName}

        @return: see L{IResolverSimple.getHostByName}
        r   )r   r   r_   rs   r   )r'   r%   r   rG   r(   r(   r)   rp   J  s   
z'ComplexResolverSimplifier.getHostByNameN)r(   )
r1   r2   r3   r4   r   r*   r5   r   ra   rp   r(   r(   r(   r)   r~   <  s     r~   N)=r4   socketr   r   r   r   r   r   r   r	   r
   typingr   r   r   r   r   r   r   r   r   zope.interfacer   twisted.internet._idnar   twisted.internet.addressr   r   twisted.internet.deferr   twisted.internet.errorr   twisted.internet.interfacesr   r   r   r   r   r   twisted.internet.threadsr    twisted.loggerr!   twisted.python.compatr"   twisted.python.threadpoolr#   r$   rW   rV   rU   rI   rX   rK   ra   r5   rY   r8   rb   rs   r~   r(   r(   r(   r)   <module>   s`   ,, 

WI,