o
    j                     @   sf   d dl Z d dlZd dlZd dlZd dlZd dlZdZG dd dejZG dd dZ	G dd dZ
dS )	    N   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )SOCKS4CDCode      Z   [   \   ]   N)	__name__
__module____qualname__REQ_CONNECTREQ_BINDREP_GRANTED
REP_FAILEDREP_FAILED_NOCONNREP_FAILED_USRID_MISMATCH r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/protocol/socks4.pyr      s    r   c                   @   sN   e Zd Zdd Zedd ZedddZedd	 Zed
d Zdd Z	dS )SOCKS4Requestc                 C   s$   d| _ tj| _d | _d | _d | _d S )N   )VNr   r   CDDSTPORTDSTIPUSERIDselfr   r   r   __init__   s
   
zSOCKS4Request.__init__c                 C      t t| S N)r   from_bufferioBytesIOdatar   r   r   
from_bytes      zSOCKS4Request.from_bytesNc              
      Z   zt j| d|dI d H }t|d fW S  ty, } z
d |fW  Y d }~S d }~ww )N    timeout)asynciowait_for	readuntilr   r&   	Exceptionreaderr+   ter   r   r   from_streamreader"      zSOCKS4Request.from_streamreaderc                 C   s   t  }tj| dddd|_ttj| dddd|_tj| dddd|_t	| d|_
d|_ttD ]}| d}|dkrG |S | j|7  _q9|S )	Nr   bigF	byteordersignedr   r       r   )r   intr&   readr   r   r   r   	ipaddressIPv4Addressr   r   rangeSOCKS4_USERID_MAC_LEN)buffo_xr   r   r   r!   *   s   
zSOCKS4Request.from_bufferc                 C   s`   t  }| jjddu rtj | j|_t	| j
|_| j|_| jd u r.td d|_|S )NSERVERTr   ascii)r   protocolname
startswithr   r   endpoint_portr   r=   
ip_addressendpoint_ipr   useridr   osurandomhexencode)targetrB   r   r   r   from_target9   s   
zSOCKS4Request.from_targetc                 C   sb   | j jdddd}|| jjjdddd7 }|| jjdddd7 }|| jj7 }|| j7 }|d7 }|S )Nr   r6   Fr7   r   r)   )r   to_bytesr   valuer   r   packedr   r   r2   r   r   r   rT   F   s   
zSOCKS4Request.to_bytesr    )
r
   r   r   r   staticmethodr&   r4   r!   rS   rT   r   r   r   r   r      s    


r   c                   @   sB   e Zd Zdd Zedd ZedddZedd	 Zd
d ZdS )SOCKS4Replyc                 C   s   d| _ d | _d | _d | _d S )Nr   )r   r   r   r   r   r   r   r   r   P   s   
zSOCKS4Reply.__init__c                 C   r   r    )rY   r!   r"   r#   r$   r   r   r   r&   V   r'   zSOCKS4Reply.from_bytesNc              
      r(   )N   r*   )r,   r-   readexactlyrY   r&   r/   r0   r   r   r   r4   Z   r5   zSOCKS4Reply.from_streamreaderc                 C   sh   t  }tj| dddd|_ttj| dddd|_tj| dddd|_t	| d|_
|S )Nr   r6   Fr7   r   r   )rY   r;   r&   r<   r   r   r   r   r=   r>   r   )rA   rB   r   r   r   r!   b   s   zSOCKS4Reply.from_bufferc                 C   sP   | j jdddd}|| jjjdddd7 }|| jjdddd7 }|| jj7 }|S )Nr   r6   Fr7   r   )r   rT   r   rU   r   r   rV   rW   r   r   r   rT   k   s
   zSOCKS4Reply.to_bytesr    )	r
   r   r   r   rX   r&   r4   r!   rT   r   r   r   r   rY   O   s    

rY   )r"   rN   enumr=   socketr,   r@   Enumr   r   rY   r   r   r   r   <module>   s   	9