o
    -˜Žj
  ã                	   @   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   úS/var/www/kodo/Anonymous/send/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:    ,ÿ

þÿÿÿ
þÿ
þÿþý