o
    ‡e*  ã                   @   sf  d dl Z d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d d	l mZ d d
l m	Z	 d dl m
Z
 d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z! dZ"d #d¡ dd„ Z$d d!„ Z%G d"d#„ d#e&ƒZ'dS )$é    N)ÚAF_INET)Ú	AF_UNSPEC)ÚAI_CANONNAME)Ú
AI_PASSIVE)ÚAI_NUMERICHOST)Ú
EAI_NONAME)ÚEAI_SERVICE)Ú
SOCK_DGRAM)ÚSOCK_STREAM)ÚSOL_TCP)Úerror)Úgaierror)Úgetaddrinfo)Úgetnameinfo)Úgethostbyaddr)Úgethostbyname)Úgethostbyname_ex)Úgetservbyname)Ústring_types)Ú	text_type)Úhostname_types)Úinteger_types)ÚPYPY)ÚMAC)Úis_ipv6_addr© ZfooÚidnac                 C   s‚  g }t | tƒr™zt| ƒ} W n  ty˜   zY|dkrS| }zt| dƒ} | t¡ W n ty:   t| dƒ} | t¡ Y n2w z| t|dƒkrH| t¡ W n" tyR   Y nw |tkr]t| dƒ} n|tkrgt| dƒ} nt	t
dƒ‚W n( tyŠ } zdt|ƒv r€t	t
dƒ‚t	t|ƒƒ‚d }~w ty•   td| ƒ‚w Y nw | d u r d} nt | tƒr¦ntd| t| ƒƒ‚t| d ƒ} |s½|r½| |¡ | |fS )Nr   ZtcpZudpz&Servname not supported for ai_socktypez	not foundzInt or String expectedé   )Ú
isinstancer   ÚintÚ
ValueErrorÚnative_getservbynameÚappendr
   r   r	   r   r   ÚstrÚUnicodeEncodeErrorr   Útype)ÚportÚsocktypeZ	socktypesZorigportÚexr   r   úHD:\Projects\ConvertPro\env\Lib\site-packages\gevent/resolver/__init__.pyÚ_lookup_port'   s^   


þ
€ÿ
€
€
ÿ€æ

r*   c                 C   s^   t | tƒstdt| ƒf ƒ‚| dv r-td d|tdtƒ}t|ƒdkr%tdƒ‚|d d d S | S )Nz2argument 1 must be str, bytes or bytearray, not %s)Ú ó    r   é   z%wildcard resolved to multiple addressé   )	r   r   Ú	TypeErrorr%   Únative_getaddrinfor	   r   Úlenr   )ÚhostnameÚfamilyÚresultr   r   r)   Ú_resolve_specialV   s   
r5   c                   @   sÎ   e Zd ZdZdZed ZerdndZdZdd„ e	e
ƒ ¡ D ƒZd	d„ e	e
ƒ ¡ D ƒZd
d„ Zedd„ ƒZdd„ Zefdd„Zdd„ Zefdd„Zdd„ Zd&dd„Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )'ÚAbstractResolverr   )s	   localhosts   ip6-localhosts   ::1s	   127.0.0.1)s   255.255.255.255s   <broadcast>z,nodename nor servname provided, or not knownzName or service not knownzai_family not supportedc                 C   s   h | ]\}}|  d ¡r|’qS )ZAF_©Ú
startswith©Ú.0ÚkÚvr   r   r)   Ú	<setcomp>|   s    ýÿzAbstractResolver.<setcomp>c                 C   s&   h | ]\}}|  d ¡r|dvr|’qS )ZSOCK_)ZSOCK_CLOEXECZSOCK_MAX_SIZEr7   r9   r   r   r)   r=   ‚   s    ýýc                 C   s   dS )z–
        Release resources held by this object.

        Subclasses that define resources should override.

        .. versionadded:: 22.10.1
        Nr   )Úselfr   r   r)   Úclose‰   s    zAbstractResolver.closec                    s"   dd l }| ˆ ¡‡ fdd„ƒ}|S )Nr   c              
      sb   zˆ | g|¢R i |¤ŽW S  t y0 } z|jd tkr+t|jƒdkr+t| jf|_t|_‚ d }~ww )Nr   r-   )r   Úargsr   r1   ÚEAI_NONAME_MSGÚerrno)r>   r@   Úkwargsr(   ©Úfuncr   r)   Úresolve–   s   €ûz0AbstractResolver.fixup_gaierror.<locals>.resolve)Ú	functoolsÚwraps)rE   rG   rF   r   rD   r)   Úfixup_gaierror’   s   	zAbstractResolver.fixup_gaierrorc                 C   sF   t |tƒr| | j¡}t|ƒS t |ttfƒstdt|ƒj ƒ‚t|ƒS )Nz(Expected str, bytes or bytearray, not %s)	r   r   ÚencodeÚHOSTNAME_ENCODINGÚbytesÚ	bytearrayr/   r%   Ú__name__)r>   r2   r   r   r)   Ú_hostname_to_bytes¢   s   
ýz#AbstractResolver._hostname_to_bytesc                 C   s:   |   |¡}|| jv rt|ƒS t||ƒ}|  ||¡d d S )Néÿÿÿÿr   )rO   Ú_LOCAL_AND_BROADCAST_HOSTNAMESÚnative_gethostbynamer5   r   ©r>   r2   r3   r   r   r)   r   ª   s
   


zAbstractResolver.gethostbynamec                 C   sV   |   ||¡}g }|  |d|ttt¡}|d d }|D ]}| |d d ¡ q|||fS )z&Raise an ``herror`` or a ``gaierror``.r   é   r.   )Ú_getaliasesr   r
   r   r   r"   )r>   Zhostname_bytesr3   ÚaliasesÚ	addressesZtuplesÚ	canonicalÚitemr   r   r)   Ú_gethostbyname_ex¶   s   
þ
z"AbstractResolver._gethostbyname_exc                 C   s(   |   |¡}|| jv rt|ƒS |  ||¡S ©N)rO   rQ   Únative_gethostbyname_exrZ   rS   r   r   r)   r   Ã   s   

z!AbstractResolver.gethostbyname_exc                 C   ó   t ‚r[   ©ÚNotImplementedError)r>   Z
host_bytesr&   r3   r'   ÚprotoÚflagsr   r   r)   Ú_getaddrinfoË   ó   zAbstractResolver._getaddrinfor   c                 C   sj   |d ur	|   |¡nd }t|tƒr"|t@ s"|| jv s"t|ƒr+| d¡r+t||||||ƒS |  ||||||¡S )Ns   fe80)	rO   r   rL   r   Ú_LOCAL_HOSTNAMESr   r8   r0   rb   )r>   Úhostr&   r3   r'   r`   ra   r   r   r)   r   Î   s   ÿþ
ÿÿzAbstractResolver.getaddrinfoc                 C   s   g S r[   r   rS   r   r   r)   rU   å   ó   zAbstractResolver._getaliasesc                 C   r]   )zRaises herror.r^   )r>   Zip_address_bytesr   r   r)   Ú_gethostbyaddré   rf   zAbstractResolver._gethostbyaddrc                 C   s0   t |tƒ}|  |¡}|| jv rt|ƒS |  |¡S r[   )r5   r   rO   rQ   Únative_gethostbyaddrrg   )r>   Ú
ip_addressr   r   r)   r   í   s
   



zAbstractResolver.gethostbyaddrc                 C   r]   r[   r^   )r>   Zaddress_bytesr&   Úsockaddrra   r   r   r)   Ú_getnameinfoõ   rc   zAbstractResolver._getnameinfoc                 C   sÐ   t |tƒs	tdƒ‚t |tƒstdƒ‚|d }|  |d ¡}|| jv r't||ƒS |d }t |tƒs8tdt|ƒ ƒ‚ts@|dkr@d}trN|dk sJ|dkrNt	dƒ‚t
|ƒdkr`|d }|d	kr`t	d
ƒ‚|  ||||¡S )Nzan integer is requiredz(getnameinfo() argument 1 must be a tupler   r-   zport must be an integer, not %sr   zport must be 0-65535.é   iÿÿ z*getnameinfo(): flowinfo must be 0-1048575.)r   r   r/   ÚtuplerO   rQ   Únative_getnameinfor%   r   ÚOverflowErrorr1   rk   )r>   rj   ra   Úaddressr&   Úflowinfor   r   r)   r   ø   s(   




	zAbstractResolver.getnameinfoN)r   r   r   r   )rN   Ú
__module__Ú__qualname__rK   rd   rQ   r   rA   ZEAI_FAMILY_MSGÚvarsÚ_socketÚitemsZ_KNOWN_ADDR_FAMILIESZ_KNOWN_SOCKTYPESr?   ÚstaticmethodrI   rO   r   r   rZ   r   rb   r   rU   rg   r   rk   r   r   r   r   r)   r6   b   s<    ÿýÿ
þ
þ	

r6   )(ru   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r0   r   rn   r   rh   r   rR   r   r\   r   r!   Zgevent._compatr   r   r   r   r   r   Zgevent.resolver._addressesr   Ú__all__rJ   r*   r5   Úobjectr6   r   r   r   r)   Ú<module>   s>   
/