3 bW @ s d Z ddlZddlZddlZddlZddlmZmZm Z ej dZdd Zej dZ ej d Zej d Zdd ZdZdd ZdS )zIPv6 helper functions. N )xrangebinary_typemaybe_decodes 0+([0-9a-f]+)c C s t | dkrtdtj| }g }d}t |}xJ||k rx|||d }tj|}|dk rd|jd}|j| |d7 }q0W d}d}d} d} xNtdD ]B}|| d kr| r|}|| }||kr| }|}d} q| s|} d } qW | rd}|| }||k r| }|}|dkr|dkrb|dks4|dkrb|d d krb|dkrDd} nd} | t j j| dd }n,dj|d| d dj||| d }n dj|}t |S )zConvert a network format IPv6 address into text. @param address: the binary address @type address: string @rtype: string @raises ValueError: the address isn't 16 bytes long z IPv6 addresses are 16 bytes longr Nr F 0T s ffffs ::s ::ffff: :)len ValueErrorbinasciiZhexlify _leading_zeromatchgroupappendr dnsipv4 inet_ntoajoinr )addresshexchunksilchunkmZ best_startZbest_lenstartZ last_was_zeroendZcurrent_lenprefix r$ /usr/lib/python3.6/ipv6.pyr s^ r s (.*):(\d+\.\d+\.\d+\.\d+)$s ::.*s .*::$c C s t | ts| j } | dkrd} tj| }|dk rvttjj|j d}d|j dj |d |d |d |d f j } tj| }|dk r| dd } ntj| }|dk r| dd } | j d }t|}|d krtjjd}g }x|D ]}|dkr.|r tjjd }xftdd | d D ]}|jd qW qt|} | dkrHtjj| dkrbdd| | }|j| qW |d k r| rtjjdj|} y tj| S tjtfk r tjjY nX dS )zConvert a text format IPv6 address into network format. @param text: the textual address @type text: string @rtype: string @raises dns.exception.SyntaxError: the text was not properly formatted s ::s 0::N z%s:%02x%02x:%02x%02xr r r r F Ts 0000r r r ) isinstancer encode _v4_endingr bytearrayr r inet_atonr decode_colon_colon_start_colon_colon_endsplitr Z exceptionSyntaxErrorr r r r Z unhexlifyError TypeError) textr br r Z seen_emptyZ canonicalcr Zlcr$ r$ r% r- b sR r- s c C s | j tS )N) startswith_mapped_prefix)r r$ r$ r% is_mapped s r<