
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`   ã                   @   sž   d dl Z d dlZd dlmZmZmZmZ ddlmZ ddl	m
Z
 dZzd dlZW n ek
rh   dZY nX dZG dd	„ d	eƒZG d
d„ deƒZer–eneZdS )é    N)ÚAnyÚDictÚListÚOptionalé   )ÚAbstractResolver)Úget_running_loop)ÚThreadedResolverÚAsyncResolverÚDefaultResolverFc                   @   s^   e Zd ZdZdeej ddœdd„Zdej	fe
eeeee
ef  dœdd	„Zdd
œdd„ZdS )r	   zsUse Executor for synchronous getaddrinfo() calls, which defaults to
    concurrent.futures.ThreadPoolExecutor.
    N)ÚloopÚreturnc                 C   s   t |ƒ| _d S ©N)r   Ú_loop)Úselfr   © r   úC/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/resolver.pyÚ__init__   s    zThreadedResolver.__init__r   )ÚhostnameÚportÚfamilyr   c              
   Ã   s    | j j||tj|tjd�I d H }g }|D ]r\}}}}}|tjkrj|d rjt |tjtjB ¡\}	}
t	|
ƒ}n|d d… \}	}| 
||	|||tjtjB dœ¡ q(|S )N)Útyper   Úflagsé   é   ©r   Úhostr   r   Úprotor   )r   ÚgetaddrinfoÚsocketÚSOCK_STREAMÚAI_ADDRCONFIGÚAF_INET6ÚgetnameinfoÚNI_NUMERICHOSTÚNI_NUMERICSERVÚintÚappendÚAI_NUMERICHOSTÚAI_NUMERICSERV)r   r   r   r   ZinfosÚhostsÚ_r   Úaddressr   Z_portr   r   r   Úresolve   s4    û 
ÿ

úÿzThreadedResolver.resolve©r   c                 Ã   s   d S r   r   ©r   r   r   r   Úclose@   s    zThreadedResolver.close)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚasyncioÚAbstractEventLoopr   r   ÚAF_INETÚstrr&   r   r   r   r-   r0   r   r   r   r   r	      s    ÿ  þ$r	   c                   @   sŠ   e Zd ZdZdeej eeddœdd„Zde	j
feeeeeeef  dœdd	„Zde	j
feeeeeeef  dœd
d„Zddœdd„ZdS )r
   z9Use the `aiodns` package to make asynchronous DNS lookupsN)r   ÚargsÚkwargsr   c                 O   sH   t d krtdƒ‚t|ƒ| _t j|d|i|—Ž| _t| jdƒsD| j| _d S )Nz Resolver requires aiodns libraryr   Úgethostbyname)	ÚaiodnsÚRuntimeErrorr   r   ZDNSResolverÚ	_resolverÚhasattrÚ_resolve_with_queryr-   )r   r   r9   r:   r   r   r   r   G   s    
zAsyncResolver.__init__r   )r   r   r   r   c           	   
   Ã   s¦   z| j  ||¡I d H }W nL tjjk
rd } z*t|jƒdkrF|jd nd}t|ƒ|‚W 5 d }~X Y nX g }|jD ]$}| 	||||dt
jt
jB dœ¡ qp|s¢tdƒ‚|S )Nr   úDNS lookup failedr   r   )r>   r;   r<   ÚerrorÚDNSErrorÚlenr9   ÚOSErrorZ	addressesr'   r   r(   r)   )	r   r   r   r   ÚrespÚexcÚmsgr*   r,   r   r   r   r-   W   s&    

úÿzAsyncResolver.resolvec           
   
   Ã   s´   |t jkrd}nd}z| j ||¡I d H }W nL tjjk
rx } z*t|jƒdkrZ|jd nd}t	|ƒ|‚W 5 d }~X Y nX g }|D ] }	| 
||	j||dt jdœ¡ q‚|s°t	dƒ‚|S )NZAAAAÚAr   rA   r   r   )r   r"   r>   Úqueryr<   rB   rC   rD   r9   rE   r'   r   r(   )
r   r   r   r   ZqtyperF   rG   rH   r*   Zrrr   r   r   r@   q   s,    
úÿz!AsyncResolver._resolve_with_queryr.   c                 Ã   s
   | j  ¡ S r   )r>   Úcancelr/   r   r   r   r0   ‘   s    zAsyncResolver.close)N)r1   r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r&   r   r   r-   r@   r0   r   r   r   r   r
   D   s2    þû ÿ  þ ÿ  þ r
   )r5   r   Útypingr   r   r   r   Úabcr   Zhelpersr   Ú__all__r<   ÚImportErrorZaiodns_defaultr	   r
   r   r   r   r   r   Ú<module>   s   
0Q