
8aW                 @   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   s  |  t  t j t j g  k rQ t t d t t j  t t j  t |      t | t  s{ t	 t d t
 |     |  t j k r d n d } t |  | k r t t d | t |     |  t j k r d t t |   St j d |  } i  } d } d	 } x t | d  D]n \ } } | d k rz| d	 k	 r| | }	 |	 | k rb| | |	 <t | |	  } d	 } q| d	 k r| } qWd d   | D }
 | d k  rd j |
  S| | } | | } d j |
 d	 |   d d j |
 | d	   S)a  
    Windows compatiblity 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   Nr   c             S   s&   g  |  ] } t  |  d  d   q S)   N)hex).0o r   2/usr/lib/python3/dist-packages/asn1crypto/_inet.py
<listcomp>I   s   	 zinet_ntop.<locals>.<listcomp>r   :z::)r   )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octetZlengthZhexedZ
zero_startZzero_endr   r   r   	inet_ntop   sL    

	


r(   c             C   st  |  t  t j t j g  k rQ t t d t t j  t t j  t |      t | t  s{ t	 t d t
 |     |  t j k r1| j d  } t |  d k } | s g  } xF | D]> } t |  } | d k s | d k  r d } P| j |  q W| r!t t d t |     t j d	 |  Sd
 } | j d  } | d k r[d } n | d k r| j d  } t |  d k } nb | j d  \ } } | j d  }	 | j d  }
 d t |	  t |
  } |	 d g | |
 } | sUg  } xI | D]A } t | d  } | d k s-| d k  r4d } P| j |  q Wt j d |  St t d t |     d S)a  
    Windows compatiblity 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
                s   !BBBBFz::r   r      0r   i  s	   !HHHHHHHHz?
        ip_string must be a valid ipv6 string, got %s
        N)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    	r3   )Z
__future__r   r   r   r   r   r!   Z_errorsr   Z_typesr   r	   r
   r   r(   r3   r   r   r   r   <module>   s   ""I