o inh7 @sXdZddlmZmZddlmZmZdZ dZ ddZ dd Z d d Z d d ZddZdS)z=Fallback routines for Python's standard library socket module)unpackpack) _bytes_join_is_str cCs:t|s tdt|t|dkrtddtd|S)zR Convert an IP address from 32-bit packed binary format to string format. zstring type expected, not %s*invalid length of packed IP address stringz %d.%d.%d.%d4B)r TypeErrortypelen ValueError_unpack) packed_ipr;/usr/local/lib/python3.10/dist-packages/netaddr/fbsocket.py inet_ntoas  rc Csg}g}d}d}t|D]'\}}|dkr|dur|}|d7}n|dkr*|||fd}d}||q |dkr?|||ft|dkr|jddd|d}|D] }|d|dkr_|}qS|\} } |d| dg|| | d}|ddkr|dd|ddkr|d|S) Nr0cSs|dS)Nrr)xrrr9sz&_compact_ipv6_tokens..)key) enumerateappendr sortinsert) tokens new_tokens positions start_index num_tokensidxtoken best_positionpositionlength start_idxrrr_compact_ipv6_tokenss<   "    r*c Cs|tkrt|S|tkrzt|dkst|stdddtd|D}ttd|}d}tt |D]\}}|}|d|>}||B}q3d|krNdksUn|d ?dkrst d gd d|d d DR}t|} |dd | g}d t |Std|)zBConvert an packed IP address of the given family to string format.r cSsg|]}d|qS)%xr.0irrr Vzinet_ntop..z>8Hrl z>2HcSg|]}t|dqSr+intr-rrrr0bN:zunknown address family %d) AF_INETrAF_INET6r rrrlistrreversed_packjoinr*) afrrwordsint_valr/numword packed_ipv4ipv4_strrrr inet_ntopLs$  "" rHc Cst|rTtd|}|d}t|dkrRg}|D]4}|ds+|dr-t|dkr-|zt|}Wn ty<|w|d?dkrE||td |qt|S|td t |) a Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. Differs from inet_aton by only support decimal octets. Using octal or hexadecimal values will raise a ValueError exception. illegal IP address string %r.r0xrrrBz#argument should be a string, not %s) rrsplitr startswithr7rr?rr ) ip_string invalid_addrrrBr%octetrrr_inet_pton_af_inetks&       rScCs$|tkrt|S|tkrtd|}g}t|s|d|vr!|d|vr|dkr/ddSz |d\}}Wn tyA|wg}g}|dkrO|d}|dkrX|d}t|rd|d vrt|}| d t d |d d d | d t d |d dd t|t|} d | krdks||dt|t|} dd|Dddt | Ddd|D}z||D]} t | d} d | krdks||qWt|Sty|wd|vr|d} d|vrL| dd }|dd gdkr ||d  dvr|t| dkr|t| }| d t d |d d d | d t d |d dd dd| D}n t| dkrU|zdd| D} | D]} d | krndksq||q_Wn ty~|wdd| D}t|S|td|)z| Convert an IP address from string format to a packed string suitable for use with low-level network functions. rIrz::r+rr:rJrr,>HrrrrLcSg|] }tdt|dqSrUr+r?r7r-rrrr0zinet_pton..cSsg|]}dqS)z)encoder-rrrr0r1cSrWrXrYr-rrrr0rZr2N)rrrrr)rffffcSrWrXrYr-rrrr0rZcSr4r5r6)r.r%rrrr0r8cSsg|]}td|qS)rU)r?r-rrrr0r8zUnknown address family %d)r;rSr<rrr[rNr poprrranger7lowerr)rArPrQvaluesprefixsuffixl_prefixl_suffixrG token_countgap_sizer%rEr ipv6_prefixrrr inet_ptons             -         rhN)__doc__structrrrr?netaddr.compatrrr;r<rr*rHrSrhrrrrs / "