
    F/jj              	       F   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   z  eeef   z  dz  dee   dz  fdZ		 ddee   d	edz  ddfd
Z
deeef   eeeeef   z  deej                  ef   eej                  eeef   z  fdZdee   deeef   eeeeef   z  ddfdZy)z'Utility functions for aiohappyeyeballs.    N   )AddrInfoTypeaddrreturnc                    | y| d   }| d   }d|v }|r:d}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familys           T/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infosr   	   s     |7D7DTkGt9q=1gGq=AwHdHg.d|V''););RFGG    
addr_infos
interleavec                     i }|d}g }| D ]6  }|d   }||vrd||<   ||   |k  r|j                  |       ||xx   dz  cc<   8 |D ]  }| j                  |        y)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   )appendremove)r   r   seen	to_remove	addr_infor   s         r   pop_addr_infos_interleaver%   "   s     D
$&I 	1DL<*$Y'V  %	)$%r   c                 @    t        j                  | d         g| dd S )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r   s    r   _addr_tuple_to_ip_addressr)   :   s'       a)5DH55r   c                 <   g }| D ]  }|d   |k(  s|j                  |        |r|D ]  }| j                  |        yt        |      }| D ]%  }|t        |d         k(  s|j                  |       ' |r|D ]  }| j                  |        yt        d| d      )z
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    NzAddress z not found in addr_infos)r    r!   r)   
ValueError)r   r   bad_addrs_infosr$   bad_addr_info
match_addrs         r   remove_addr_infosr0   A   s     +-O .	R=D ""9-. , 	-Mm,	-*40J .	29R=AA""9-. , 	-Mm,	-
xv%=>
??r   )N)__doc__r'   r   typesr   tuplestrintlistr   r%   IPv4AddressIPv6Addressr)   r0    r   r   <module>r:      s,   -   H
S#s"
#eCcM&:
:U38_
Lt
SH	,$H4 >B%\"%03d
%	%06
S/E#sC"45
56
9  #%&y/D/Dc3PS/S)TT6@\"@
S/E#sC"45
5@ 
@r   