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  zz| j jrz;| 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  zzM| 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   