o
    tPf                     @   s   d Z ddlmZmZmZ ddlZddlZddlZddlm	Z	 G dd de
Zdd Zed	ed
edfddZefddZeZdd ZdS )z1
Private support for parsing textual addresses.

    )absolute_importdivisionprint_functionN)hostname_typesc                   @   s   e Zd ZdS )AddressSyntaxErrorN)__name__
__module____qualname__ r
   r
   [/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/resolver/_addresses.pyr   $   s    r   c                 C   s   t | ts	|  } | d}t|dkrt| |D ]}| s"tt|dkr2|d dkr2t| qzdd |D }tjdg|R  W S    t| )	z
    Convert an IPv4 address in text form to binary struct.

    *text*, a ``text``, the IPv4 address in textual form.

    Returns a ``binary``.
       .      r   0c                 S   s   g | ]}t |qS r
   )int).0partr
   r
   r   
<listcomp>=   s    z#_ipv4_inet_aton.<locals>.<listcomp>BBBB)	
isinstancebytesencodesplitlenr   isdigitstructpack)textpartsr   intsr
   r
   r   _ipv4_inet_aton(   s    
	
r    s   (.*):(\d+\.\d+\.\d+\.\d+)$s   ::.*s   .*::$c              	   C   s  t | ts	|  } | dkrd} || }|dur9tt|d}d|d |d |d |d |d  } || }|durI| dd } n|| }|durX| dd	 } | 	d
}t
|}|dkrgtd}g }	|D ]=}
|
dkr|ryt| d}tdd| d D ]}|	d qqmt
|
}|dkrt| |dkrdd|  |
 }
|	|
 qm|dk r|st| d|	} zt| W S  tjtfy   t| w )z
    Convert an IPv6 address in text form to binary form.

    *text*, a ``text``, the IPv6 address in textual form.

    Returns a ``binary``.
    s   ::s   0::N   z{}:{:02x}{:02x}:{:02x}{:02x}r   r         :   F    Ts   0000r      0)r   r   r   match	bytearrayr    groupformatdecoder   r   SyntaxErrorr   rangeappendjoinbinascii	unhexlifyError	TypeError)r   
_v4_ending_colon_colon_start_colon_colon_endmbchunksl
seen_empty	canonicalc_lcr
   r
   r   _ipv6_inet_atonC   s^   





rA   c                 C   s6   | rt | ts	dS z||  W dS  ty   Y dS w )NFT)r   r   r   )hostparser
   r
   r   _is_addr   s   
rD   c                 C   s:   | rt | trt | trdnd}| |dd } t| tS )N%   %r   r   )r   r   strr   rD   rA   )rB   sr
   r
   r   is_ipv6_addr   s   
rI   )__doc__
__future__r   r   r   r1   rer   gevent.resolverr   
ValueErrorr   r    compilerA   rD   is_ipv4_addrrI   r
   r
   r
   r   <module>   s   
M