B
    M]5                 @   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   sr  | 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	}x`t|d
 D ]P\}}|dkr|d	k	r|| }	|	|kr|||	< t||	}d	}q|d	kr|}qW dd |D }
|dk r:d|
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
    zp
            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.%ds	   !HHHHHHHHr   N)c             S   s   g | ]}t |d d qS )   N)hex).0o r   /lib/python3.7/site-packages/asn1crypto/_inet.py
<listcomp>I   s    zinet_ntop.<locals>.<listcomp>r   :z::)setsocketAF_INETAF_INET6
ValueErrorr   repr
isinstancer   	TypeErrorr   lentupler	   structZunpack	enumeratemaxjoin)address_familyZ	packed_ipZrequired_lenoctetsZruns_of_zeroZlongest_runZ
zero_indexiZoctetlengthZhexedZ
zero_startZzero_endr   r   r   	inet_ntop   sL    






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 }x4|D ],}t|}|dks|dk rd}P || qW |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 }x<|D ]4}t|d}|dks|dk rd}P || qjW t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
    zp
            address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s),
            not %s
            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
                   !BBBBFz::r   r      0r   i  	   !HHHHHHHHz?
        ip_string must be a valid ipv6 string, got %s
        N)r,   )r/   )r   r   r   r   r   r   r   r   r
   r   r   splitr   intappendr!   Zpackcount)r%   Z	ip_stringr&   errorZintsr   ZomittedZbeginendZbegin_octetsZ
end_octetsZmissingr   r   r   	inet_ptonT   sd    










r6   )Z
__future__r   r   r   r   r   r!   Z_errorsr   Z_typesr   r	   r
   r   r)   r6   r   r   r   r   <module>   s   I