§
    ‹Ÿj¬  ã                   ó˜   — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlZej        rd dlmZmZmZmZmZ  G d„ de	¦  «        ZdS )	é    N)ÚFuture)Úgen)ÚIOLoop)ÚResolverÚis_valid_ip)Ú	GeneratorÚAnyÚListÚTupleÚDictc            
       ó|   — e Zd ZdZdd„Zdedededdfd„Zded	eddfd
„Ze	j
        	 ddedededdfd„¦   «         ZdS )ÚCaresResolvera  Name resolver based on the c-ares library.

    This is a non-blocking and non-threaded resolver.  It may not produce the
    same results as the system resolver, but can be used for non-blocking
    resolution when threads cannot be used.

    ``pycares`` will not return a mix of ``AF_INET`` and ``AF_INET6`` when
    ``family`` is ``AF_UNSPEC``, so it is only recommended for use in
    ``AF_INET`` (i.e. IPv4).  This is the default for
    ``tornado.simple_httpclient``, but other libraries may default to
    ``AF_UNSPEC``.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. deprecated:: 6.2
       This class is deprecated and will be removed in Tornado 7.0. Use the default
       thread-based resolver instead.
    ÚreturnNc                 ó‚   — t          j        ¦   «         | _        t          j        | j        ¬¦  «        | _        i | _        d S )N)Úsock_state_cb)r   ÚcurrentÚio_loopÚpycaresÚChannelÚ_sock_state_cbÚchannelÚfds)Úselfs    úk/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/platform/caresresolver.pyÚ
initializezCaresResolver.initialize$   s3   € Ý”~Ñ'Ô'ˆŒÝ”°TÔ5HÐIÑIÔIˆŒØˆŒˆˆó    ÚfdÚreadableÚwritablec                 óJ  — |rt           j        nd|rt           j        ndz  }|s$| j                             |¦  «         | j        |= d S || j        v r'| j                             ||¦  «         || j        |<   d S | j                             || j        |¦  «         || j        |<   d S )Nr   )	r   ÚREADÚWRITEr   Úremove_handlerr   Úupdate_handlerÚadd_handlerÚ_handle_events)r   r   r   r   Ústates        r   r   zCaresResolver._sock_state_cb)   s¬   € Ø (Ð/•”�¨aÀHÐ4SµF´L°LÐRSÑTˆØð 	!ØŒL×'Ò'¨Ñ+Ô+Ð+Ø”˜���Ø�4”8ˆ^ˆ^ØŒL×'Ò'¨¨EÑ2Ô2Ð2Ø ˆDŒH�R‰LˆLˆLàŒL×$Ò$ R¨Ô)<¸eÑDÔDÐDØ ˆDŒH�R‰LˆLˆLr   Úeventsc                 ó°   — t           j        }t           j        }|t          j        z  r|}|t          j        z  r|}| j                             ||¦  «         d S ©N)r   ÚARES_SOCKET_BADr   r!   r"   r   Ú
process_fd)r   r   r(   Úread_fdÚwrite_fds        r   r&   zCaresResolver._handle_events5   sX   € ÝÔ)ˆÝÔ*ˆØ•F”KÑð 	ØˆGØ•F”LÑ ð 	ØˆHØŒ×Ò ¨Ñ2Ô2Ð2Ð2Ð2r   r   ÚhostÚportÚfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c              #   ó6  ‡
K  — t          |¦  «        r|g}nrt          ¦   «         Š
| j                             ||ˆ
fd„¦  «         ‰
V —\  }}|r5t	          d|›dt
          j                             |¦  «        ›d|›�¦  «        ‚|j        }g }|D ]‹}d|v rt          j
        }	nd|v rt          j        }	nt          j        }	|t          j        k    r||	k    rt	          d||	fz  ¦  «        ‚|                     t          j        t           |	¦  «        ||ff¦  «         ŒŒ|S )Nc                 ó2   •— ‰                      | |f¦  «        S r*   )Ú
set_result)ÚresultÚerrorÚfuts     €r   ú<lambda>z'CaresResolver.resolve.<locals>.<lambda>H   s   ø€ °C·N²NÀFÈEÀ?Ñ4SÔ4S€ r   zC-Ares returned error z: z while resolving ú.ú:z%Requested socket family %d but got %d)r   r   r   ÚgethostbynameÚOSErrorr   ÚerrnoÚstrerrorÚ	addressesÚsocketÚAF_INETÚAF_INET6Ú	AF_UNSPECÚappendÚtypingÚcastÚint)r   r/   r0   r1   r?   r5   r6   ÚaddrinfoÚaddressÚaddress_familyr7   s             @r   ÚresolvezCaresResolver.resolve>   s`  øè è € õ �tÑÔð 	)Ø˜ˆIˆIõ ‘(”(ˆCØŒL×&Ò&Ø�fÐSÐSÐSÐSñô ð ð #&˜I˜I‰MˆF�EØð Ý�gà�u�u�gœm×4Ò4°UÑ;Ô;Ð;Ð;¸T¸TðCñô ð ð Ô(ˆIØˆØ ð 	Qð 	QˆGØ�gˆ~ˆ~Ý!'¤��Ø˜��Ý!'¤��å!'Ô!1�Ø�Ô)Ò)Ð)¨f¸Ò.FÐ.FÝØ;¸vÀ~Ð>VÑVñô ð ð �OŠO�Vœ[­¨nÑ=Ô=ÀÈ¸ÐOÑPÔPÐPÐPØˆr   )r   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rG   Úboolr   r&   r   Ú	coroutineÚstrrK   © r   r   r   r      sÕ   € € € € € ðð ð(ð ð ð ð

! ð 
!°ð 
!Àð 
!Èð 
!ð 
!ð 
!ð 
!ð3 ð 3¨cð 3°dð 3ð 3ð 3ð 3ð 	„]à23ðð ØðØ"ðØ,/ðà	5ðð ð ñ „]ðð ð r   r   )r   r@   Útornado.concurrentr   Útornador   Útornado.ioloopr   Útornado.netutilr   r   rE   ÚTYPE_CHECKINGr   r	   r
   r   r   r   rS   r   r   ú<module>rY      sá   ðØ €€€Ø €€€à %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à €€€à	Ôð 9Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ðOð Oð Oð Oð O�Hñ Oô Oð Oð Oð Or   