o
    zsg                     @   s   U d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 ddl
mZmZ dZzd dlZeejdZW n ey>   dZdZY nw ejejB ZejejB ZG dd	 d	eZG d
d deZee	eef  ZergeneZeed< dS )    N)AnyDictListOptionalTupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFc                
   @   s\   e Zd ZdZddeej ddfddZdej	fde
d	ed
ejdee fddZdddZdS )r   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    Nloopreturnc                 C   s   |pt  | _d S N)asyncioget_running_loop_loop)selfr    r   L/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/resolver.py__init__   s   zThreadedResolver.__init__r   hostportfamilyc                    s   | j j||tj|tjdI d H }g }|D ]I\}}}}}|tjkrFt|dk r(q|d r=| j |tI d H \}	}
t	|
}n|d d \}	}n|tj
ksMJ |\}	}|t||	|||td q|S )N)typer   flags      hostnamer   r   r   protor   )r   r   socketSOCK_STREAMAI_ADDRCONFIGAF_INET6lengetnameinfo_NAME_SOCKET_FLAGSintAF_INETappendr   _NUMERIC_SOCKET_FLAGS)r   r   r   r   infoshosts_r#   addressresolved_host_portr   r   r   resolve!   s@   

zThreadedResolver.resolvec                    s   d S r   r   r   r   r   r   closeM   s   zThreadedResolver.closer   r   N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r$   r,   strr+   AddressFamilyr   r   r5   r7   r   r   r   r   r      s    
,r   c                   @   s   e Zd ZdZ	ddeej dededdfddZd	e	j
fd
edede	jdee fddZd	e	j
fd
edededeeeef  fddZdddZdS )r   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                 O   s>   t d u rtdt j|i || _t| jds| j| _d S d S )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorDNSResolver	_resolverhasattr_resolve_with_queryr5   )r   r   r@   rA   r   r   r   r   T   s   zAsyncResolver.__init__r   r   r   r   c                    sD  z| j j||tj|tjdI d H }W n" tjjy5 } zt|j	dkr)|j	d nd}t
d ||d }~ww g }|jD ]]}|j}	|j}|tjkryt|	dkrm|	d rm| j |	d dg|	dd  R tI d H }
|
j}n|	d d}|	d }n|tjksJ |	d d}|	d }|t||||dtd q;|st
d d|S )N)r   r   r   r   r	   DNS lookup failedr   r   asciir!   )rF   r   r$   r%   r&   rC   errorDNSErrorr(   r@   OSErrornodesaddrr   r'   r)   decoder*   noder,   r-   r   r.   )r   r   r   r   respexcmsgr0   rQ   r2   resultr3   r   r   r   r5   c   sV   




zAsyncResolver.resolvec           
   
      s   |t jkr	d}nd}z| j||I d H }W n" tjjy9 } zt|jdkr-|jd nd}t	d ||d }~ww g }|D ]}	|
||	j||dt jd q>|sVt	d d|S )NAAAAAr	   rI   r   r!   )r$   r'   rF   queryrC   rK   rL   r(   r@   rM   r-   r   AI_NUMERICHOST)
r   r   r   r   qtyperR   rS   rT   r0   rrr   r   r   rH      s2   

z!AsyncResolver._resolve_with_queryc                    s   | j   d S r   )rF   cancelr6   r   r   r   r7      s   zAsyncResolver.closer   r8   )r9   r:   r;   r<   r   r   r=   r   r   r$   r,   r>   r+   r?   r   r   r5   r   rH   r7   r   r   r   r   r   Q   sB    

4
 r   r   )r   r$   typingr   r   r   r   r   r   r   abcr
   r   __all__rC   rG   rE   aiodns_defaultImportErrorrY   AI_NUMERICSERVr.   NI_NUMERICHOSTNI_NUMERICSERVr*   r   r   _DefaultTyper   __annotations__r   r   r   r   <module>   s$   
 $:i