o
    Uj
                  	   @   s  d Z ddlZddlZddlmZ deeeeef eeeef B eeef B dB dee dB fddZ		dd	ee d
edB ddfddZ
deeef eeeeef B deejef eejeeef B fddZd	ee deeef eeeeef B ddfddZdS )z'Utility functions for aiohappyeyeballs.    N   )AddrInfoTypeaddrreturnc                 C   s   | du rdS | d }| d }d|v }|r6d}d}t | }|dkr$| d }|dkr,| d }||||f} tj}n||f} tj}|tjtjd| fgS )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   :          )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r   hostportis_ipv6flowinfoscopeidaddr_lenfamily r   O/opt/telega-widget/.venv/lib/python3.10/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infos	   s$   r   
addr_infos
interleavec                 C   s`   |du rd}i }g }| D ]}|d }| |d}||kr!|| |d ||< q|| dd< dS )z
    Pop addr_info from the list of addr_infos by family up to interleave times.

    The interleave parameter is used to know how many addr_infos for
    each family should be popped of the top of the list.
    Nr   r   )getappend)r   r   seenkept	addr_infor   countr   r   r   pop_addr_infos_interleave"   s   	
r#   c                 C   s   t | d g| dd R S )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_addressr   r   r   r   _addr_tuple_to_ip_address8   s   r'   c                    sl    fdd| D }t |t | krt fdd| D }t |t | kr.td  d|| dd< dS )z
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    c                    s   g | ]
}|d   kr|qS r   .0air&   r   r   
<listcomp>I   s    z%remove_addr_infos.<locals>.<listcomp>c                    s    g | ]}t |d   kr|qS r(   )r'   r*   )
match_addrr   r   r-   M   s    zAddress z not found in addr_infosN)r   r'   
ValueError)r   r   r    r   )r   r.   r   remove_addr_infos?   s   

r0   )N)__doc__r$   r   typesr   tuplestrintlistr   r#   IPv4AddressIPv6Addressr'   r0   r   r   r   r   <module>   s:    ,



