U
    Vh                     @   s   d dl Z d dlZd dlZd dlZd dlZddlmZ ejrFd dlm	Z	 e
dZG dd de jZejdd	eejeef d
ddZejdd	eeedddZeejeef dddZejeejeef f ejeef dddZdS )    N   )
StrOrBytesSOCKS5ATypez'^\[(?P<address>[^\]]+)\]:(?P<port>\d+)$c                   @   s,   e Zd ZdZdZdZedd dddZdS )	AddressTypeIPV4IPV6DNr   )socks5atypereturnc                 C   sH   ddl m} ||jkrtjS ||jkr,tjS ||jkr<tjS t	|d S )Nr   r   )
socksio.socks5r   ZIPV4_ADDRESSr   r   ZDOMAIN_NAMEr	   ZIPV6_ADDRESSr   
ValueError)clsr
   r    r   O/var/www/html/arya_register/venvv2/lib/python3.8/site-packages/socksio/utils.pyfrom_socks5_atype   s    


zAddressType.from_socks5_atypeN)__name__
__module____qualname__r   r   r	   classmethodr   r   r   r   r   r      s
   r   @   )maxsize)addrr   c                 C   s   t | tr|  n| } ztjttj| fW S  tk
r   ztj	ttj
| fW  Y S  tk
r|   tj|  f Y  Y S X Y nX dS )zKDetermines the type of address and encodes it into the format SOCKS expectsN)
isinstancebytesdecoder   r   socket	inet_ptonAF_INET6OSErrorr   AF_INETr	   encode)r   r   r   r   encode_address"   s    r"   )address_typeencoded_addrr   c                 C   sJ   | t jkrttj|S | t jkr0ttj|S | t jks>t|	 S dS )z&Decodes the address from a SOCKS replyN)
r   r   r   	inet_ntopr   r   r    r	   AssertionErrorr   )r#   r$   r   r   r   decode_address/   s    

r'   )addressr   c                 C   s   t | tr|  n| } tt| }|r>|d|d } }n| d\} }}z| t|fW S  t	k
rz   t	ddY nX dS )zReturns a tuple (address: str, port: int) from an address string with a port
    i.e. '127.0.0.1:8080', '[0:0:0:0:0:0:0:1]:3080' or 'localhost:8080'.

    Note no validation is done on the domain or IP itself.
    r(   port:zInvalid address + port. Please supply a valid domain name, IPV4 or IPV6 address with the port as a suffix, i.e. `127.0.0.1:3080`, `[0:0:0:0:0:0:0:1]:3080` or `localhost:3080`N)
r   r   r   rematchIP_V6_WITH_PORT_REGEXgroup	partitionintr   )r(   r,   Zstr_port_r   r   r   split_address_port_from_string;   s    r2   c                 C   sP   t | tr<| \} }t | tr$|  } t |ttfrHt|}nt| \} }| |fS )z@Returns an (address, port) from an address string-like or tuple.)r   tupler   r   strr0   r2   )r(   r)   r   r   r   #get_address_port_tuple_from_addressR   s    


r5   )enum	functoolsr+   r   typing_typesr   TYPE_CHECKINGr   r   compiler-   Enumr   	lru_cacheTupler   r"   r4   r'   r0   r2   Unionr5   r   r   r   r   <module>   s"   


