o
    �õ±j¦  ã                   @   sb   d dl Z d dlZd dlZd dlT d dlZd dlmZ d dlmZm	Z	 d dl
mZ G dd„ dƒZdS )é    N)Ú*)Úlogger)ÚWSNETWriterÚWSNETReader)ÚUniProxyProtoc                   @   sL   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	ddd„ƒZ
dS )ÚWSNetworkDirectFc	           	      C   sX   d | _ d | _d | _|| _|| _|| _|| _|| _|| _|| _	t
 d¡| _d | _d | _d S )Né   )Úws_urlÚwsÚws_proxyÚ	server_ipÚserver_portÚserver_protocolÚipÚportÚin_qÚout_qÚosÚurandomÚtokenÚin_taskÚout_task)	Úselfr   r   r   r   r   r   r   Úreuse© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/network/wsnetdirect.pyÚ__init__   s   
zWSNetworkDirect.__init__c                 Ã   sN   �| j d ur| j  ¡  | jd ur| j ¡  | jd ur"| j ¡ I d H  d | _d S ©N)r   Úcancelr   r
   Úclose)r   r   r   r   Ú	terminate   s   €





zWSNetworkDirect.terminatec              
   Ã   sV  �z¡z„| j jr…z;| j  ¡ I d H }t t|ƒ¡}|jtjkr&t	 
d¡ tdƒ‚|jtjkr5t	 
d¡ tdƒ‚| j |jd f¡I d H  W n> tjyV   Y W W |  ¡ I d H  d S  ty€ } zt ¡  | j d |f¡I d H  W Y d }~W W |  ¡ I d H  d S d }~ww | j jsW n   t ¡  Y W |  ¡ I d H  d S W |  ¡ I d H  d S |  ¡ I d H  w )Nz Remote end terminated the socketz>Proxy sent error during data transmission. Killing the tunnel.)r
   ÚopenÚrecvÚCMDÚ
from_bytesÚ	bytearrayÚtypeÚCMDTypeÚOKr   ÚdebugÚ	ExceptionÚERRr   ÚputÚdataÚasyncioÚCancelledErrorr    Ú	tracebackÚ	print_exc©r   r-   ÚcmdÚer   r   r   Ú__handle_in%   s<   €

ù€ùð€€" zWSNetworkDirect.__handle_inc                 Ã   sŒ  �z¥zM| j jrN| j ¡ I d H }|d u s|dkr9W W zt| jƒ}| j  | ¡ ¡I d H  W n   Y |  ¡ I d H  d S t	| j|ƒ}| j  | ¡ ¡I d H  | j jsW n6 t
y… } z*t ¡  W Y d }~W zt| jƒ}| j  | ¡ ¡I d H  W n   Y |  ¡ I d H  d S d }~ww W zt| jƒ}| j  | ¡ ¡I d H  W n   Y |  ¡ I d H  d S zt| jƒ}| j  | ¡ ¡I d H  W n   Y |  ¡ I d H  w )Nó    )r
   r!   r   ÚgetÚWSNOKr   ÚsendÚto_bytesr    ÚWSNSocketDatar*   r0   r1   r2   r   r   r   Ú__handle_outA   sP   €
õú€
€÷€
û
zWSNetworkDirect.__handle_outc              
   Ã   sà   �zTt  d| j| jf ¡ t| jd| j| jƒ}| j | ¡ ¡I d H  | j 	¡ I d H }t
 t|ƒ¡}t  d| ¡ |jtjkrAW dS |jtjkrNtd|j ƒ‚td|jj ƒ‚ tyo } zt ¡  d|fW  Y d }~S d }~ww )Nz#WSNetworkDirect connecting... %s:%sÚTCPz WSNetworkDirect connect reply %s©TNz,Connection failed, proxy sent error. Err: %sz,Connection failed, expected CONTINUE, got %sF)r   r)   r   r   Ú
WSNConnectr   r
   r9   r:   r"   r#   r$   r%   r&   r'   ÚCONTINUEr+   r*   ÚreasonÚvaluer0   r1   )r   r3   r-   r4   r   r   r   ÚconnectU   s$   €€þzWSNetworkDirect.connectc              
   Ã   s&  �zp| j tjkrd}n| j tjkrd}nd}| jd u s%| jdks%| jdkr(d| _d|| j| jf | _t d| j ¡ t	 
| j¡I d H | _|  
¡ I d H \}}|d ur_| j d ¡I d H  d|fW S t |  ¡ ¡| _t |  ¡ ¡| _W d	S  ty’ } zt ¡  |  ¡ I d H  d|fW  Y d }~S d }~ww )
Nr
   ÚwssÚ r   iü!  z
%s://%s:%sz0WSNetworkDirect connecting to proxy server at %sFr>   )r   r   ÚCLIENT_WSNETDIRECTÚCLIENT_SSL_WSNETDIRECTr   r   r	   r   r)   Ú
websocketsrC   r
   r   r,   r.   Úcreate_taskÚ_WSNetworkDirect__handle_inr   Ú_WSNetworkDirect__handle_outr   r*   r0   r1   r    )r   ÚprotoÚ_Úerrr4   r   r   r   Úrunj   s2   €
€ýzWSNetworkDirect.runc              	   Ã   sŠ   �t  ¡ }t  ¡ }t  ¡ }t| |||t|ƒ|||ƒ}	|	 ¡ I d H \}
}|d ur)|‚t||ƒ}t||ƒ}| ¡ I d H  | ¡ I d H  ||fS r   )r.   ÚQueueÚEventr   ÚintrO   r   r   )r   r   r   Úhostr   Úwsnet_reuseÚ	out_queueÚin_queueÚclosed_eventÚclientrM   rN   ÚwriterÚreaderr   r   r   Úopen_connection†   s   €

zWSNetworkDirect.open_connectionN)F)Ú__name__Ú
__module__Ú__qualname__r   r    rJ   rK   rC   rO   Ústaticmethodr[   r   r   r   r   r      s    
	r   )r.   r   r0   Úwsnet.protocolrH   Úasysocks.unicommr   Úasysocks.network.wsnetr   r   Úasysocks.unicomm.common.proxyr   r   r   r   r   r   Ú<module>   s   