
    i                     P   d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ ddl	m
Z
 d xZZd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iZe G d d                      Ze G d d                      Z G d d          ZdS )    N)	dataclass)Optional   )
ReplyError   )is_ipv4_address   c                       e Zd ZdZdZdS )Commandr   r   N)__name__
__module____qualname__CONNECTBIND     e/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/python_socks/_protocols/socks4.pyr   r      s        GDDDr   r   c                       e Zd ZdZdZdZdZdS )	ReplyCodeZ   [   \   ]   N)r   r   r   REQUEST_GRANTEDREQUEST_REJECTED_OR_FAILEDCONNECTION_FAILEDAUTHENTICATION_FAILEDr   r   r   r   r      s'        O!% r   r   zRequest grantedzRequest rejected or failedzLRequest rejected because SOCKS server cannot connect to identd on the clientzPRequest rejected because the client program and identd report different user-idsc                   @    e Zd ZU eed<   eed<   ee         ed<   d ZdS )ConnectRequesthostportuser_idc                 J   | j                             dd          }d}t          | j                  rt	          j        | j                  j        }n$d}t          t          t          t          dg          }t          t          t          j        g          }||z  }||z  }| j        r|| j                            d          z  }|                    t                     |r7|| j                            d          z  }|                    t                     t          |          S )Nr   bigFTr   asciiidna)r!   to_bytesr   r    	ipaddressIPv4AddresspackedbytesNULL	bytearray	SOCKS_VERr   r   r"   encodeappend)self
port_bytesinclude_hostname
host_bytesdatas        r   dumpszConnectRequest.dumps,   s   Y''511
 49%% 	6".ty99@JJ#dD!455J)W_566

< 	1DL''000DD 	DI$$V,,,DKKT{{r   N)r   r   r   str__annotations__intr   r6   r   r   r   r   r   &   sG         
III
IIIc]    r   r   c                   \    e Zd ZU dZeed<   eed<   eed<   eed<   ede	dd fd            Z
d	S )
ConnectReply   rsvreplyr    r!   r5   returnc                    t          |          | j        k    rt          d          |d         }|t          k    rt          d|d         d          	 t	          |d                   }n'# t
          $ r t          d|d         d          w xY w|t          j        k    r,t                              |d          }t          ||          	 t          
                    |d	d
         d          }n# t
          $ r t          d          w xY w	 t          j        t          j        |d
d                   }n# t
          $ r t          d          w xY w | ||||          S )NzMalformed connect replyr   zUnexpected reply version: z#02Xr   zInvalid reply code: zUnknown error)
error_coder   r	   r$   )	byteorderzInvalid port datar<   )r=   r>   r    r!   )lenSIZEr   RSVr   
ValueErrorr   ReplyMessagesgetr9   
from_bytessocket	inet_ntopAF_INET)clsr5   r=   r>   msgr!   r    s          r   loadszConnectReply.loadsO   s   t99  67771g#::H$q'HHHIII	Dd1g&&EE 	D 	D 	DBDGBBBCCC	D I---##E?;;CSU3333	2>>$qs)u>==DD 	2 	2 	20111	2	2#FND1I>>DD 	2 	2 	20111	2 ss%d>>>>s$   A+ +$B$C4 4D'D: :EN)r   r   r   rD   r9   r8   r   r7   classmethodr+   rO   r   r   r   r;   r;   F   sn         D	HHH
III
III? ?> ? ? ? [? ? ?r   r;   c                   .    e Zd ZdedefdZdedefdZdS )
Connectionrequestr?   c                 *    |                                 S N)r6   )r1   rS   s     r   sendzConnection.sendp   s    }}r   r5   c                 6    t                               |          S rU   )r;   rO   )r1   r5   s     r   receivezConnection.receives   s    !!$'''r   N)r   r   r   r   r+   rV   r;   rX   r   r   r   rR   rR   o   sX        N u    (E (l ( ( ( ( ( (r   rR   )enumr(   rJ   dataclassesr   typingr   errorsr   _helpersr   rE   r,   r.   IntEnumr   r   r   r   r   r   rG   r   r;   rR   r   r   r   <module>r_      s         ! ! ! ! ! !             & & & & & & d	    dl   
! ! ! ! ! ! ! ! 0(*FV#Z	        > $? $? $? $? $? $? $? $?P( ( ( ( ( ( ( ( ( (r   