
    Hbb4                     d    d dl Z d dlZd dlmZmZ d dlmZ d Zd Zd Z	de
deee
f         fd	ZdS )
    N)TupleOptional)urlparsec                 n    |                      d          r|                     d          r
| dd         S | S )N[]   )
startswithendswithaddresss    7/usr/lib/python3/dist-packages/ceph/deployment/utils.pyunwrap_ipv6r      s@    # 7#3#3C#8#8 qt}N    c                 p    	 t          j        |           j        dk    rd|  dS n# t          $ r Y nw xY w| S )N   r   r   )	ipaddress
ip_addressversion
ValueErrorr   s    r   	wrap_ipv6r      sZ    ((0A55!w>>>! 6    Ns   "& 
33c                 ~    t          |           } 	 t          j        |           j        dk    S # t          $ r Y dS w xY w)Nr   F)r   r   r   r   r   r   s    r   is_ipv6r      sO    '""G#G,,499   uus   . 
<<addrreturnc                 l   dt           dt          t                   dt          t          t           f         fd}dt           dt          t                   dt          t          t           f         fd}|                     d          }|                     d          }d|  }	 t          |          }nG# t          $ r:}t          |          d	k    rY d
}~dS ddt          |           d| fcY d
}~S d
}~ww xY w|j        } d
}	 |j	        }|r| d
t          d|                     } n # t          $ r |dk    rY dS d| v rY dS Y nw xY w|                     d          r|rdS |r"| d                                         r|dk    rdS | d                                         rd| v r || |          S  || |          S )a  check that an address string is valid
    Valid in this case means that a name is resolvable, or the
    IP address string is a correctly formed IPv4 or IPv6 address,
    with or without a port

    Args:
        addr (str): address

    Returns:
        Tuple[bool, str]: Validity of the address, either
                          True, address type (IPv4[:Port], IPv6[:Port], Name[:Port])
                          False, <error description>
    r   portr   c                 l    	 t          j        | d            n# t           j        $ r Y dS w xY wd|rdndfS )N)FzDNS lookup failedTz	Name:PortName)socketgetaddrinfogaierror)r   r   s     r   _dns_lookupzvalid_addr.<locals>._dns_lookup5   sY    	.tT**** 	. 	. 	.---	. D4[[f44s    ++c                     t          |           }	 t          j        |          }n# t          $ r Y dS w xY wd|rd|j         dn	d|j         fS )N)Fz"Invalid IP v4 or v6 address formatTIPvz:Port)r   r   r   r   r   )r   r   	unwrappedip_addrs       r   
_ip_lookupzvalid_addr.<locals>._ip_lookup=   sx    %%		?*955GG 	? 	? 	?>>>	?TV17?1111?VW_?V?VVVs   & 
44.:zhttp://zInvalid IPv6 URLN)Fz:Address has incorrect/incomplete use of enclosing bracketsFzUnknown urlparse error z for r	   )FzPort must be numericz]:r   )Fz+IPv4 address wrapped in brackets is invalidr      )FzInvalid partial IPv4 address)strr   intr   boolcountr   r   netlocr   lenr   isdigitisalpha)	r   r$   r)   dotscolonsaddr_as_urlreser   s	            r   
valid_addrr:   &   sK   5# 5Xc] 5uT3Y7G 5 5 5 5W WHSM WeD#I6F W W W W ::c??DZZ__F"D""KK{## K K Kq66'''VVVVVVJAJJ[JJJJJJJJJK
 :DD1x 	+)#j$jj//))*D 1 1 1Q;;000T\\000 \1 s D DCC  5Q!! 5daii44Aw 'SD[[{4&&&:dD!!!s<   B- -
C17C,C,&C1,C1>$D# #E 6E ?E )r   r!   typingr   r   urllib.parser   r   r   r   r-   r/   r:    r   r   <module>r>      s         " " " " " " " " ! ! ! ! ! !      @"S @"U49- @" @" @" @" @" @"r   