
    [j&                        d dl Z d dlmZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZ ddlmZ ddlmZ d xZxZZd	Z G d
 de j                  Z G d de j                  Z G d de j                  Z G d de j                  Zej        dej        dej        dej        dej        dej        dej        dej         dej!        di	Z"e
 G d d                      Z#e
 G d d                      Z$e
 G d d                       Z%e
 G d! d"                      Z&e
 G d# d$                      Z'e
 G d% d&                      Z( G d' d(          Z)e
 G d) d*                      Z*e
 G d+ d,                      Z+e
 G d- d.                      Z,e
 G d/ d0                      Z-e
 G d1 d2                      Z.e
 G d3 d4                      Z/ee#e%e'f         Z0ee$e&e(f         Z1ee)e*e+e-e,e.e/f         Z2 G d5 d6          Z3dS )7    N)singledispatchmethod)OptionalTypeUnion)	dataclassfield   )
ReplyError   )is_ip_address   c                       e Zd ZdZdZdZdZdS )
AuthMethodr   r	   r      N)__name__
__module____qualname__	ANONYMOUSGSSAPIUSERNAME_PASSWORDNO_ACCEPTABLE     b/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/python_socks/_protocols/socks5.pyr   r      s#        IFMMMr   r   c                   6    e Zd ZdZdZdZedefd            ZdS )AddressTyper	         verc                 T    |dk    r| j         S |dk    r| j        S t          d          )Nr      zInvalid IP version)IPV4IPV6
ValueError)clsr   s     r   from_ip_verzAddressType.from_ip_ver   s1    !888O!888O-...r   N)	r   r   r   r"   DOMAINr#   classmethodintr&   r   r   r   r   r      sH        DFD/c / / / [/ / /r   r   c                       e Zd ZdZdZdZdS )Commandr	   r   r   N)r   r   r   CONNECTBINDUDP_ASSOCIATEr   r   r   r+   r+   %   s        GDMMMr   r+   c                   2    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )	ReplyCoder   r	   r   r   r   r   r!         N)r   r   r   	SUCCEEDEDGENERAL_FAILURECONNECTION_NOT_ALLOWEDNETWORK_UNREACHABLEHOST_UNREACHABLECONNECTION_REFUSEDTTL_EXPIREDCOMMAND_NOT_SUPPORTEDADDRESS_TYPE_NOT_SUPPORTEDr   r   r   r0   r0   +   sC        IO!K !%r   r0   zRequest grantedzGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablez&Connection refused by destination hostzTTL expiredz'Command not supported or protocol errorzAddress type not supportedc                   p    e Zd ZU ee         ed<   ee         ed<    ed          Zeed<   d Z	de
fdZd	S )
AuthMethodsRequestusernamepasswordF)initmethodsc                     t          t          j        g          }| j        r&| j        r|                    t          j                   || _        d S N)	bytearrayr   r   r>   r?   appendr   rA   )selfrA   s     r   __post_init__z AuthMethodsRequest.__post_init__J   sH    Z1233= 	9T] 	9NN:7888r   returnc                 b    t          t          t          | j                  g          | j        z   S rC   )bytes	SOCKS_VERlenrA   rF   s    r   dumpszAuthMethodsRequest.dumpsR   s&    iT\!2!2344t|CCr   N)r   r   r   r   str__annotations__r   rA   rD   rG   rJ   rN   r   r   r   r=   r=   D   s         smsmE***GY***  Du D D D D D Dr   r=   c                   T    e Zd ZU dZeed<   eed<   defdZe	de
dd fd            Zd	S )
AuthMethodReplyr   r   methodrequestc                 P    | j         |j        vrt          d| j                    d S )Nz(Unexpected SOCKS authentication method: )rS   rA   r
   rF   rT   s     r   validatezAuthMethodReply.validate]   s2    ;go--UUUVVV .-r   datarH   c                 n   t          |          | j        k    rt          d          |d         }|t          k    rt          d|           	 t	          |d                   }n'# t
          $ r t          d|d         d          w xY w|t          j        k    rt          d           | ||          S )	Nz%Malformed authentication method replyr   !Unexpected SOCKS version number: r	   zInvalid authentication method: #02Xz1No acceptable authentication methods were offered)r   rS   )rL   SIZEr
   rK   r   r$   r   )r%   rX   r   rS   s       r   loadszAuthMethodReply.loadsa   s    t99  DEEE1g)FFFGGG	OQ((FF 	O 	O 	OMtAwMMMNNN	O Z---PQQQss6****s   A$ $$BN)r   r   r   r\   r)   rP   r   r=   rW   r(   rJ   r]   r   r   r   rR   rR   V   s         D	HHHW 2 W W W W + +#4 + + + [+ + +r   rR   c                   4    e Zd ZU dZeed<   eed<   defdZdS )AuthRequestr	   r>   r?   rH   c                    t                      }|                    | j                   |                    t          | j                             || j                            d          z  }|                    t          | j                             || j                            d          z  }t          |          S )Nascii)rD   rE   VERrL   r>   encoder?   rJ   rF   rX   s     r   rN   zAuthRequest.dumps|   s    {{DHC&&'''$$W---C&&'''$$W---T{{r   N)r   r   r   rb   rO   rP   rJ   rN   r   r   r   r_   r_   u   sH         
CMMMMMMu      r   r_   c                   H    e Zd ZU dZeed<   eed<   ededd fd            ZdS )	AuthReplyr   r   statusrX   rH   c                     t          |          | j        k    rt          d          |d         }|t          j        k    rt          d          |d         }|t
          k    rt          d           | ||          S )NzMalformed auth replyr   zInvalid authentication responser	   z,Username and password authentication failure)r   rg   )rL   r\   r
   r_   rb   AUTH_GRANTED)r%   rX   r   rg   s       r   r]   zAuthReply.loads   s    t99  34441g+/!!>???a\!!KLLLss6****r   N)	r   r   r   r\   r)   rP   r(   rJ   r]   r   r   r   rf   rf      sY         D	HHHKKK+ +; + + + [+ + +r   rf   c                   <    e Zd ZU eed<   eed<   defdZdefdZdS )ConnectRequesthostportrH   c                     t          t          t          j        t          g          }||                                 z  }t          |          S rC   )rD   rK   r+   r,   RSV_build_addr_requestrJ   rd   s     r   rN   zConnectRequest.dumps   s:    )W_c:;;((***T{{r   c                    | j                             dd          }t          | j                  rSt	          j        | j                  }t                              |j                  }t          |g          |j
        z   |z   S t          j        }| j                            d          }t          |t          |          g          |z   |z   S )Nr   bigidna)rm   to_bytesr   rl   	ipaddress
ip_addressr   r&   versionrJ   packedr'   rc   rL   )rF   rm   ipaddress_typerl   s        r   rp   z"ConnectRequest._build_addr_request   s    y!!!U++## 	B%di00B&222:>>L,((294t;;&-L9##F++D,D		233d:TAAr   N)	r   r   r   rO   rP   r)   rJ   rN   rp   r   r   r   rk   rk      se         
III
IIIu    

BU 
B 
B 
B 
B 
B 
Br   rk   c                   h    e Zd ZU eed<   eed<   eed<   eed<   eed<   d Zede	dd fd	            Z
d
S )ConnectReplyr   replyrsv
bound_host
bound_portc                     d S rC   r   rM   s    r   rW   zConnectReply.validate   s    r   rX   rH   c                 4   |st          d          |d         }|t          k    rt          d|d          	 t          |d                   }n?# t          $ r t          d          t          $ r t          d|d         d          w xY w|t          j        k    r,t                              |d          }t          ||	          	 |d
         }n# t          $ r t          d          w xY w|t          k    rt          dt          d          	 |d         }|dd         }|dd          }n# t          $ r t          d          w xY w|t          j
        k    r t          j        t          j        |          }	np|t          j        k    r t          j        t          j        |          }	n@|t          j        k    r|dd                                          }	nt          d|d          t$                              |d          }
 | ||||	|
          S )NzEmpty connect replyr   rZ   r[   r	   zMalformed connect replyzInvalid reply code: zUnknown error)
error_coder   zThe reserved byte must be r   r   zInvalid address type: rr   )r   r}   r~   r   r   )r
   rK   r0   
IndexErrorr$   r3   ReplyMessagesgetro   r   r"   socket	inet_ntopAF_INETr#   AF_INET6r'   decoder)   
from_bytes)r%   rX   r   r}   msgr~   	addr_typebnd_host_databnd_port_databnd_hostbnd_ports              r   r]   zConnectReply.loads   sr    	423331g)KKKKLLL	Dd1g&&EE 	8 	8 	86777 	D 	D 	DBDGBBBCCC	D I'''##E?;;CSU3333	8q'CC 	8 	8 	86777	8 #::D#DDDEEE	8QI 2JM IMM 	8 	8 	86777	8 ((('FFHH+***'GGHH+,,,$QRR(//11HHFiFFFGGG>>-77s
 
 
 	
s#   A <BC C.D2 2EN)r   r   r   r)   rP   r0   rO   rW   r(   rJ   r]   r   r   r   r|   r|      s         	HHH	HHHOOOOOO   4
 4
> 4
 4
 4
 [4
 4
 4
r   r|   c                       e Zd ZdS ) StateServerWaitingForAuthMethodsN)r   r   r   r   r   r   r   r      s        Dr   r   c                       e Zd ZU eed<   dS )StateClientSentAuthMethodsrX   N)r   r   r   r=   rP   r   r   r   r   r      s         
r   r   c                       e Zd ZU eed<   dS )StateServerWaitingForAuthrX   N)r   r   r   rR   rP   r   r   r   r   r      s         
r   r   c                   *    e Zd ZU dZee         ed<   dS )StateClientAuthenticatedNrX   )r   r   r   rX   r   rf   rP   r   r   r   r   r     s'          $D(9
$$$$$r   r   c                       e Zd ZU eed<   dS )StateClientSentAuthRequestrX   N)r   r   r   r_   rP   r   r   r   r   r   
  s         
r   r   c                       e Zd ZU eed<   dS )StateClientSentConnectRequestrX   N)r   r   r   rk   rP   r   r   r   r   r     s         
r   r   c                       e Zd ZU eed<   dS )StateServerConnectedrX   N)r   r   r   r|   rP   r   r   r   r   r     s         
r   r   c                       e Zd Zd Zededefd            Zej        de	defd            Z
ej        dedefd            Zej        dedefd            Zdedefd	Zd
ee         fdZed             ZdS )
Connectionc                 ,    t                      | _        d S rC   )r   _staterM   s    r   __init__zConnection.__init__1  s    688r   rT   rH   c                 0    t          d|j                   )NzInvalid request type: )RuntimeError	__class__rV   s     r   sendzConnection.send4  s    GG4EGGHHHr   c                     |                      t                    st          d          t          |          | _        |                                S )Nz0Server is not currently waiting for auth methods)	_state_isr   r   r   r   rN   rV   s     r   _send_auth_methodszConnection._send_auth_methods8  sD    ~~>?? 	SQRRR099}}r   c                     |                      t                    st          d          t          |          | _        |                                S )Nz2Server is not currently waiting for authentication)r   r   r   r   r   rN   rV   s     r   
_send_authzConnection._send_auth?  sD    ~~788 	USTTT099}}r   c                     |                      t                    st          d          t          |          | _        |                                S )NzClient is not authenticated)r   r   r   r   r   rN   rV   s     r   _send_connectzConnection._send_connectF  sC    ~~677 	><===3G<<}}r   rX   c                    |                      t                    ryt                              |          }|                    | j        j                   |j        t          j	        k    rt          |          | _        nt                      | _        |S |                      t                    r1t                              |          }t          |          | _        |S |                      t                    r1t                              |          }t!          |          | _        |S t#          d| j                   )N)rX   zInvalid connection state: )r   r   rR   r]   rW   r   rX   rS   r   r   r   r   r   rf   r   r|   r   r   )rF   rX   r}   s      r   receivezConnection.receiveM  s    >>455 	#))$//ENN4;+,,,|z;;;7UCCC688L>>455 	OOD))E2>>>DKL>>788 	 &&t,,E.E:::DKLEEEFFFr   	state_clsc                     | j         j        |u S rC   )stater   )rF   r   s     r   r   zConnection._state_ise  s    z#y00r   c                     | j         S rC   )r   rM   s    r   r   zConnection.stateh  s
    {r   N)r   r   r   r   r   RequestrJ   r   registerr=   r   r_   r   rk   r   Replyr   r   ConnectionStater   propertyr   r   r   r   r   r   0  sL       9 9 9 IG I I I I I 
]*<     ] 
]+ %    ] 
]^     ]GE Ge G G G G014#8 1 1 1 1   X  r   r   )4enum	functoolsr   ru   r   typingr   r   r   dataclassesr   r   errorsr
   _helpersr   ro   NULLri   rK   IntEnumr   r   r+   r0   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r=   rR   r_   rf   rk   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s    * * * * * *      ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (       $ $ $ $ $ $     d\	       / / / / /$, / / /    dl   	& 	& 	& 	& 	& 	& 	& 	& *=$&I!#8 2 "J=#%N(*F
 D D D D D D D D" + + + + + + + +<          + + + + + + + +, B B B B B B B B, ?
 ?
 ?
 ?
 ?
 ?
 ?
 ?
D	 	 	 	 	 	 	 	                 % % % % % % % %                          		 $!: : : : : : : : : :r   