
    FZj
              	       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           XC:\Users\Rodrigo\frota-trucks-cliente\python\Lib\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                     |d}i }g }| D ]7  }|d   }|j                  |d      }||k\  r|j                  |       |dz   ||<   9 || dd 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   )getappend)r   r   seenkept	addr_infor   counts          r   pop_addr_infos_interleaver&   "   sh     
D!D	1#JKK	"qyV   JqMr   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*   8   s'       a)5DH55r   c                 $   | D cg c]  }|d   |k7  s| }}t        |      t        |       k(  r,t        |      }| D cg c]  }t        |d         |k7  s| }}t        |      t        |       k(  rt        d| d      || dd yc c}w c c}w )z
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    zAddress z not found in addr_infosN)r   r*   
ValueError)r   r   air#   
match_addrs        r   remove_addr_infosr0   ?   s     $62r"v~BD6
4yC
O#.t4
#
#2'@B'HJ'VB 	 
 4yC
O#8D6)ABCCJqM 7
s   BBBB)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
	,6
S/E#sC"45
56
9  #%&y/D/Dc3PS/S)TT6\"
S/E#sC"45
5 
r   