U
    nh                     @   s   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  ZZdZG d	d
 d
e jZG dd de jZejdejdejdejdiZeG dd dZeG dd dZG dd dZdS )    N)	dataclass)Optional   )
ReplyError   )is_ipv4_address   c                   @   s   e Zd ZdZdZdS )Commandr   r   N)__name__
__module____qualname__CONNECTBIND r   r   f/var/www/html/peyman_registration/venvv2/lib/python3.8/site-packages/python_socks/_protocols/socks4.pyr	      s   r	   c                   @   s   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   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                   @   s2   e Zd ZU eed< eed< ee ed< dd ZdS )ConnectRequesthostportuser_idc                 C   s   | j dd}d}t| jr,t| jj}nd}ttttdg}t	t
tjg}||7 }||7 }| jrt|| jd7 }|t |r|| jd7 }|t t|S )Nr   bigFTr   asciiidna)r   to_bytesr   r   	ipaddressIPv4AddresspackedbytesNULL	bytearray	SOCKS_VERr	   r   r   encodeappend)selfZ
port_bytesZinclude_hostnameZ
host_bytesdatar   r   r   dumps,   s     


zConnectRequest.dumpsN)r
   r   r   str__annotations__intr   r-   r   r   r   r   r   &   s   
r   c                   @   sF   e Zd ZU dZeed< eed< eed< eed< ee	d dddZ
d	S )
ConnectReply   rsvreplyr   r   r,   returnc                 C   s  t || jkrtd|d }|tkr:td|d dzt|d }W n( tk
rr   td|d dY nX |tjkrt|d}t||dzt	j
|d	d
 dd}W n tk
r   tdY nX zttj|d
d }W n tk
r   tdY nX | ||||d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 datar2   )r3   r4   r   r   )lenSIZEr   RSVr   
ValueErrorr   ReplyMessagesgetr0   
from_bytessocket	inet_ntopAF_INET)clsr,   r3   r4   msgr   r   r   r   r   loadsO   s*    
zConnectReply.loadsN)r
   r   r   r:   r0   r/   r   r.   classmethodr%   rE   r   r   r   r   r1   F   s   
r1   c                   @   s,   e Zd ZeedddZeedddZdS )
Connection)requestr6   c                 C   s   |  S N)r-   )r+   rH   r   r   r   sendp   s    zConnection.sendr5   c                 C   s
   t |S rI   )r1   rE   )r+   r,   r   r   r   receives   s    zConnection.receiveN)r
   r   r   r   r%   rJ   r1   rK   r   r   r   r   rG   o   s   rG   )enumr"   r@   dataclassesr   typingr   errorsr   _helpersr   r;   r&   r(   IntEnumr	   r   r   r   r   r   r=   r   r1   rG   r   r   r   r   <module>   s0     (