U
    ÈZj5  ã                   @   s`   d dl mZmZmZmZ d dlZd dlZddlmZ ddl	m
Z
mZmZmZ dd„ Zdd	„ ZdS )
é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_functionNé   )Úunwrap)Úbyte_clsÚbytes_to_listÚstr_clsÚ	type_namec                 C   sn  | t tjtjgƒkr6ttdttjƒttjƒt| ƒƒƒ‚t|tƒsRt	tdt
|ƒƒƒ‚| tjkr`dnd}t|ƒ|kr„ttd|t|ƒƒƒ‚| tjkrždtt|ƒƒ S t d|¡}i }d}d	}t|d
 ƒD ]P\}}|dk�r|d	k	�r|| }	|	|krö|||	< t||	ƒ}d	}qÂ|d	krÂ|}qÂdd„ |D ƒ}
|dk �r6d |
¡S || }|| }d |
d	|… ¡d d |
|d	… ¡ S )a  
    Windows compatibility shim for socket.inet_ntop().

    :param address_family:
        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6

    :param packed_ip:
        A byte string of the network form of an IP address

    :return:
        A unicode string of the IP address
    úp
            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
            not %s
            zA
            packed_ip must be a byte string, not %s
            é   é   zA
            packed_ip must be %d bytes long - is %d
            z%d.%d.%d.%dó	   !HHHHHHHHr   N)éÿÿÿÿc                 S   s   g | ]}t |ƒd d… ‘qS )é   N)Úhex)Ú.0Úo© r   úS/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/asn1crypto/_inet.pyÚ
<listcomp>I   s     zinet_ntop.<locals>.<listcomp>r   ú:ú::)ÚsetÚsocketÚAF_INETÚAF_INET6Ú
ValueErrorr   ÚreprÚ
isinstancer   Ú	TypeErrorr   ÚlenÚtupler	   ÚstructÚunpackÚ	enumerateÚmaxÚjoin)Úaddress_familyZ	packed_ipZrequired_lenÚoctetsZruns_of_zeroZlongest_runZ
zero_indexÚiÚoctetÚlengthZhexedZ
zero_startZzero_endr   r   r   Ú	inet_ntop   sR    ù

üû





r.   c                 C   sÄ  | t tjtjgƒkr6ttdttjƒttjƒt| ƒƒƒ‚t|tƒsRt	tdt
|ƒƒƒ‚| tjkrÒ| d¡}t|ƒdk}|s®g }|D ].}t|ƒ}|dksš|dk r¢d} q®| |¡ q~|rÄttdt|ƒƒƒ‚tjd|žŽ S d
}| d¡}|dkrîd}nj|dk�r| d¡}t|ƒdk}nH| d¡\}}| d¡}	| d¡}
dt|	ƒ t|
ƒ }|	dg|  |
 }|�s®g }|D ]8}t|dƒ}|dk�sˆ|dk �r’d} �q | |¡ �qftjd|žŽ S ttdt|ƒƒƒ‚dS )a  
    Windows compatibility shim for socket.inet_ntop().

    :param address_family:
        socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6

    :param ip_string:
        A unicode string of an IP address

    :return:
        A byte string of the network form of the IP address
    r   zD
            ip_string must be a unicode string, not %s
            Ú.r   éÿ   r   Tz‡
                ip_string must be a dotted string with four integers in the
                range of 0 to 255, got %s
                ó   !BBBBFr   r   r   é   Ú0r   iÿÿ  r   z?
        ip_string must be a valid ipv6 string, got %s
        N)r1   )r   )r   r   r   r   r   r   r   r    r
   r!   r   Úsplitr"   ÚintÚappendr$   ÚpackÚcount)r)   Z	ip_stringr*   ÚerrorZintsr   ZomittedÚbeginÚendZbegin_octetsZ
end_octetsÚmissingr   r   r   Ú	inet_ptonT   sl    ù

ü

û





ür=   )Ú
__future__r   r   r   r   r   r$   Ú_errorsr   Ú_typesr   r	   r
   r   r.   r=   r   r   r   r   Ú<module>   s   I