U
    g5                     @   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rttd|t|| tjkrd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|}qd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   4/tmp/pip-unpacked-wheel-etcy_95o/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}|sg }|D ].}t|}|dks|dk rd} q|| q~|rttdt|tjd| S d
}|d}|dkrd}nj|dkr|d}t|dk}nH|d\}}|d}	|d}
dt|	 t|
 }|	dg|  |
 }|sg }|D ]8}t|d}|dks|dk rd} 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