o
    �õ±jà  ã                   @   s|   d dl mZmZ d dlZG dd„ dƒZG dd„ dƒZG dd„ dƒZG d	d
„ d
ƒZd dlm	Z	 de	fdd„Z
G dd„ dƒZdS )é    )ÚWSNetworkTCPÚWSNetworkUDPNc                   @   ó   e Zd Zeddd„ƒZdS )ÚWSNETNetworkTestFc                 Ã   s�   �ddl m} t ¡ }t ¡ }t ¡ }|| t|ƒ|||ƒ}| ¡ I d H \}}	|	d ur,|	‚t||ƒ}
t||ƒ}|
 ¡ I d H  | ¡ I d H  ||
fS )Nr   )ÚWSNetworkTCPTEST)	Úasysocks.test.wsnettestr   ÚasyncioÚQueueÚEventÚintÚrunÚWSNETWriterÚWSNETReader)ÚhostÚportÚwsnet_reuser   Ú	out_queueÚin_queueÚclosed_eventÚclientÚ_ÚerrÚwriterÚreader© r   ú‰/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/network/wsnet.pyÚopen_connection   s   €

z WSNETNetworkTest.open_connectionN©F©Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r   r   r   
   ó    r   c                   @   r   )ÚWSNETNetworkFc                 Ã   s„   �t  ¡ }t  ¡ }t  ¡ }t| t|ƒ|||ƒ}| ¡ I d H \}}|d ur&|‚t||ƒ}	t||ƒ}
|	 ¡ I d H  |
 ¡ I d H  |
|	fS ©N)r   r	   r
   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   €

zWSNETNetwork.open_connectionNr   r   r   r   r   r   r$      r#   r$   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   c                 C   s   || _ || _d S r%   )r   r   )Úselfr   r   r   r   r   Ú__init__2   s   
zWSNETWriter.__init__c                 C   s   | j  |¡ d S r%   )r   Ú
put_nowait)r&   Údatar   r   r   Úwrite6   s   zWSNETWriter.writec                 C   s   | j  d ¡ | j ¡  d S r%   )r   r(   r   Úset©r&   r   r   r   Úclose9   s   zWSNETWriter.closec                 Ã   s   �t  d¡I d H  d S ©Nr   )r   Úsleepr,   r   r   r   Údrain=   s   €zWSNETWriter.drainc                 Ã   s   �d S r%   r   r,   r   r   r   r   A   ó   €zWSNETWriter.runN)r   r    r!   r'   r*   r-   r0   r   r   r   r   r   r   1   s    r   c                   @   sP   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zddd„Zdd„ Z	dd„ Z
dS )r   c                 C   s6   d | _ || _|| _d| _t ¡ | _d | _t ¡ | _	d S )Nó    )
Úwsnet_reader_typer   r   Úbufferr   r
   Údata_in_evtr   ÚLockÚ
bufferlock)r&   r   r   r   r   r   r'   F   s   
zWSNETReader.__init__c                 Ã   s®   �	 | j  ¡ I d H \}| _|d u r| jd u r| j ¡  d S | jd ur>|d ur7|dkr7|  j|j7  _| j ¡  | j ¡  d S |  j|7  _| j ¡  |dkrOnq| j ¡  d S )NTr2   )r   Úgetr   r   r+   r4   r)   r5   )r&   Úresr   r   r   Ú__handle_inO   s$   €




ïzWSNETReader.__handle_inc                 Ã   s&   �t  |  ¡ ¡| _t  d¡I d H  d S r.   )r   Úcreate_taskÚ_WSNETReader__handle_inÚhandle_taskr/   r,   r   r   r   r   d   s   €zWSNETReader.runéÿÿÿÿc              
   Ã   sZ  �z™| j  ¡ r7t| jƒdkrW dS |dkst| jƒ|k r%| j}d| _|W S | jd |… }| j|d … | _|W S | j4 I d H šO |dkr^t| jƒdkrW| j ¡  | j ¡ I d H  | j}d| _n#t| jƒdkrr| j ¡  | j ¡ I d H  | jd |… }| j|d … | _W d   ƒI d H  |W S 1 I d H s“w   Y  |W S  ty¬ } z| j  	¡  ‚ d }~ww )Nr   r2   r>   )
r   Úis_setÚlenr4   r7   r5   ÚclearÚwaitÚ	Exceptionr+   ©r&   ÚnÚtempÚer   r   r   Úreadh   sB   €


ñî
€ýzWSNETReader.readc              
   Ã   s"  �z}| j  ¡ r+t| jƒdkst| jƒ|k rtdƒ‚| jd |… }| j|d … | _|W S |dk r3tdƒ‚| j4 I d H š7 t| jƒ|k rV| j ¡  | j ¡ I d H  t| jƒ|k sB| jd |… }| j|d … | _W d   ƒI d H  |W S 1 I d H sww   Y  |W S  ty� } z| j  	¡  ‚ d }~ww )Nr   úPipe broken!é   z'Readexactly must be a positive integer!)
r   r?   r@   r4   rC   r7   r5   rA   rB   r+   rD   r   r   r   Úreadexactly‘   s4   €

þù	÷	
€ýzWSNETReader.readexactlyó   
c              
   Ã   s2  �z…| j  ¡ r/| j |¡dk}|dkrtdƒ‚|t|ƒ }| jd |… }| j|d … | _|W S | j4 I d H šC | j |¡dkrT| j ¡  | j 	¡ I d H  | j |¡dks?| j |¡t|ƒ }| jd |… }| j|d … | _W d   ƒI d H  |W S 1 I d H sw   Y  |W S  ty˜ } z| j  
¡  ‚ d }~ww )Nr>   rI   )r   r?   r4   ÚfindrC   r@   r7   r5   rA   rB   r+   )r&   Ú	separatorÚposÚendrF   rG   r   r   r   Ú	readuntil®   s6   €

þù	÷	
€ýzWSNETReader.readuntilc                 Ã   s   �|   d¡I d H S )NrL   )rQ   r,   r   r   r   ÚreadlineÊ   s   €zWSNETReader.readlinec                 C   s   | j  ¡ ot| jƒdkS r.   )r   r?   r@   r4   r,   r   r   r   Úat_eofÍ   s   zWSNETReader.at_eofN)r>   )rL   )r   r    r!   r'   r<   r   rH   rK   rQ   rR   rS   r   r   r   r   r   E   s    	
)
r   )Ú	UniTargetÚtargetc                 Ã   sT   �t  ¡ }t  ¡ }t|  ¡ | j||dd�}| ¡ I d H \}}|d ur$|‚t| ||ƒS )NT)Úreuse_ws)r   r	   r   Úget_ip_or_hostnamer   r   ÚWSNETEndpoint)rU   Úin_qÚout_qÚ
connectionr   r   r   r   r   Úcreate_udp_clientÒ   s   €r\   c                   @   s„   e Zd Zdedejdejfdd„Zdd„ Zdd	d
„Zddd„Z	ddd„Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZdS )rX   rU   r   r   c                 C   s   || _ || _|| _d| _d S )NF)rU   r   r   Ú_closed)r&   rU   r   r   r   r   r   r'   Þ   s   
zWSNETEndpoint.__init__c                 C   s,   | j rd S d| _ | j d ¡ | j d ¡ d S ©NT)r]   r   r(   r   r,   r   r   r   r-   ä   s
   zWSNETEndpoint.closeNc                 Ã   s(   �|du r| j  ¡ | j jf}|  ||¡S )ú%Send a datagram to the given address.N)rU   rW   r   Úsend©r&   r)   Úaddrr   r   r   r*   ë   s   €zWSNETEndpoint.writeFc                 C  sZ   �| j s+|  ¡ I dH \}}|du r|  ¡  dS ||f}|du r#|V  n|V  | j rdS dS ©únWait for an incoming datagram and return it with
		the corresponding address.
		This method is a coroutine.
		NT)r]   Úreceiver-   )r&   Ú	with_addrr)   rb   Úresultr   r   r   rH   ñ   s   €özWSNETEndpoint.readc                 Ã   s<   �|   ¡ I dH \}}|du r|  ¡  dS |du r||fS |S rc   )re   r-   )r&   rf   r)   rb   r   r   r   Úread_one  s   €zWSNETEndpoint.read_onec                 C   s"   | j rtdƒ‚| j ||f¡ dS )r_   úEnpoint is closedN)r]   ÚIOErrorr   r(   ra   r   r   r   r`     s   zWSNETEndpoint.sendc                 Ã   sP   �| j  ¡ I dH }|du rtdƒ‚|\}}}|dur|‚|du r$tdƒ‚||fS )rd   Nri   )r   r8   rj   )r&   r9   r)   rb   r   r   r   r   re     s   €
zWSNETEndpoint.receivec                 C   s   | j rdS |  ¡  dS )z Close the transport immediately.N)r]   r-   r,   r   r   r   Úabort$  s   zWSNETEndpoint.abortc                 Ã   s   �dS r^   r   r,   r   r   r   r0   *  r1   zWSNETEndpoint.drainc                 C   s   t ƒ ‚)z-The endpoint address as a (host, port) tuple.)ÚNotImplementedErrorr,   r   r   r   Úaddress-  ó   zWSNETEndpoint.addressc                 C   s   | j S )z0Indicates whether the endpoint is closed or not.)r]   r,   r   r   r   Úclosed2  rn   zWSNETEndpoint.closedr%   r   )r   r    r!   rT   r   r	   r'   r-   r*   rH   rh   r`   re   rk   r0   Úpropertyrm   ro   r   r   r   r   rX   Ý   s    



rX   )Úwsnet.pyodide.clientr   r   r   r   r$   r   r   Úasysocks.unicomm.common.targetrT   r\   rX   r   r   r   r   Ú<module>   s     