
    i                     `   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y)    N)	dataclass)Optional   )
ReplyError   )is_ipv4_address   c                       e Zd ZdZdZy)Commandr   r   N)__name__
__module____qualname__CONNECTBIND     Q/root/searxng-venv/lib/python3.12/site-packages/python_socks/_protocols/socks4.pyr   r      s    GDr   r   c                       e Zd ZdZdZdZdZy)	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                   8    e Zd ZU eed<   eed<   ee   ed<   d Zy)ConnectRequesthostportuser_idc                 F   | 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                  j                  d      z  }|j                  t               |r3|| j                  j                  d      z  }|j                  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    YY''51
 499%"..tyy9@@J#dD!45J)W__56

<<DLL''00DDDII$$V,,DKKT{r   N)r   r   r   str__annotations__intr   r6   r   r   r   r   r   &   s    
I
Ic]r   r   c                   T    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
y	)
ConnectReply   rsvreplyr    r!   r5   returnc                 N   t        |      | j                  k7  rt        d      |d   }|t        k7  rt        d|d   d      	 t	        |d         }|t        j                  k7  r#t        j                  |d      }t        ||      	 t        j                  |d	d
 d      }	 t        j                  t        j                  |d
d       } | ||||      S # t
        $ r t        d|d   d      w xY w# t
        $ r t        d      w xY w# t
        $ r t        d      w xY w)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?   t9 6771g#:9$q'$HII	Dd1g&E I---##E?;CSU33	2>>$q)u>=D	2##FNND1I>D s%d>>#  	D3DGD>BCC	D  	2011	2
  	2011	2s$   C 
C7 %'D C47DD$N)r   r   r   rD   r9   r8   r   r7   classmethodr+   rO   r   r   r   r;   r;   F   s<    D	H
I
I? ?> ? ?r   r;   c                   ,    e Zd ZdedefdZdedefdZy)
Connectionrequestr?   c                 "    |j                         S N)r6   )r1   rS   s     r   sendzConnection.sendp   s    }}r   r5   c                 ,    t         j                  |      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   s(    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	dll 
! ! 0((*FV##Z	   > $? $? $?P( (r   