
    .Kf                        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                  rd dlm	Z	  ej                  d      Z G d de j                        Z ej                  d	      d
edej                  eef   fd       Z ej                  d	      dededefd       Zdedej                  eef   fdZdej,                  eej                  eef   f   dej                  eef   fdZy)    N   )
StrOrBytesSOCKS5ATypez'^\[(?P<address>[^\]]+)\]:(?P<port>\d+)$c                   *    e Zd ZdZdZdZedd       Zy)AddressTypeIPV4IPV6DNc                     ddl m} ||j                  k(  rt        j                  S ||j
                  k(  rt        j                  S ||j                  k(  rt        j                  S t        |      )Nr   r   )
socksio.socks5r   IPV4_ADDRESSr   r	   DOMAIN_NAMEr   IPV6_ADDRESSr
   
ValueError)clssocks5atyper   s      H/var/www/html/Backend/venv/lib/python3.12/site-packages/socksio/utils.pyfrom_socks5_atypezAddressType.from_socks5_atype   s\    .+222###K333>>!K444###%%    N)r   r   returnr   )__name__
__module____qualname__r	   r
   r   classmethodr    r   r   r   r      s#    DD	B	& 	&r   r   @   )maxsizeaddrr   c                    t        | t              r| j                         n| } 	 t        j                  t        j                  t
        j                  |       fS # t        $ ri 	 t        j                  t        j                  t
        j                  |       fcY S # t        $ r% t        j                  | j                         fcY cY S w xY ww xY w)zKDetermines the type of address and encodes it into the format SOCKS expects)
isinstancebytesdecoder   r
   socket	inet_ptonAF_INET6OSErrorr	   AF_INETr   encode)r   s    r   encode_addressr*   "   s     'tU34;;=D1!1!1&//4!HHH 1	1##V%5%5fnnd%KKK 	1>>4;;=00	11s/   3A 	C
"3BC
)CC
CC
address_typeencoded_addrc                 (   | t         j                  k(  r$t        j                  t        j                  |      S | t         j
                  k(  r$t        j                  t        j                  |      S | t         j                  k(  sJ |j                         S )z&Decodes the address from a SOCKS reply)	r   r
   r$   	inet_ntopr&   r	   r(   r   r#   )r+   r,   s     r   decode_addressr/   /   so     {'''>>	))	)=={~~---""$$r   addressc                 <   t        | t              r| j                         n| } t        j                  t
        |       }|r#|j                  d      |j                  d      }} n| j                  d      \  } }}	 | t        |      fS # t        $ r t        d      dw xY w)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.
    r0   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   )r0   r5   str_port_s       r   split_address_port_from_stringr<   ;   s     #-We"<gnn'GHH*G4E!KK	2EKK4G&005HH%% ;
 		s   8B Bc                     t        | t              rJ| \  } }t        | t              r| j                         } t        |t        t        f      rt        |      }| |fS t        |       \  } }| |fS )z@Returns an (address, port) from an address string-like or tuple.)r!   tupler"   r#   strr9   r<   )r0   r2   s     r   #get_address_port_tuple_from_addressr@   R   sj     '5!gu%nn&GdS%L)t9D D= 7w?D=r   )enum	functoolsr4   r$   typing_typesr   TYPE_CHECKINGr   r   compiler6   Enumr   	lru_cacheTupler"   r*   r?   r/   r9   r<   Unionr@   r   r   r   <module>rK      s     	   	* #

#MN &$)) &$ R 	1 	1[%5G(H 	1 !	1 R % %E %c % !%J 6<<S;Q .\\*fll:s?&CCD\\#s(r   