o
    2fd                     @   s  d Z ddlZddlZddlZddlZeedre d7 Z ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ dZdedddZdedddZeedrld edddZd edddZG dd dejZG dd deejZG dd dZG dd dZdS )!)StreamReaderStreamWriterStreamReaderProtocolopen_connectionstart_server    NAF_UNIX)open_unix_connectionstart_unix_server   )
coroutines)events)
exceptions)format_helpers)	protocols)logger)sleepi   )limitc          	         sb   	 t  }t||d}t||d |j fdd| |fi |I d H \}}t| ||}||fS )Nr   loopr   c                          S N r   protocolr   a/home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/asyncio/streams.py<lambda>0       z!open_connection.<locals>.<lambda>)r   get_running_loopr   r   create_connectionr   )	hostportr   kwdsr   reader	transport_writerr   r   r   r      s   r   c                   s8   	 t   fdd}j|||fi |I d H S )Nc                        t d} t|  d}|S Nr   r   r   r   r#   r   client_connected_cbr   r   r   r   factoryN   
   zstart_server.<locals>.factory)r   r   create_server)r,   r    r!   r   r"   r-   r   r+   r   r   5   s
   r   c                   s`   	 t  }t||d}t||d |j fdd| fi |I d H \}}t| ||}||fS )Nr   r   c                      r   r   r   r   r   r   r   r   b   r   z&open_unix_connection.<locals>.<lambda>)r   r   r   r   Zcreate_unix_connectionr   )pathr   r"   r   r#   r$   r%   r&   r   r   r   r   Z   s   r   c                   s6   	 t   fdd}j||fi |I d H S )Nc                     r'   r(   r)   r*   r+   r   r   r-   k   r.   z"start_unix_server.<locals>.factory)r   r   Zcreate_unix_server)r,   r0   r   r"   r-   r   r+   r   r	   f   s
   r	   c                   @   s@   e Zd Z	 dddZdd Zdd Zdd	 Zd
d Zdd ZdS )FlowControlMixinNc                 C   s4   |d u rt jdd| _n|| _d| _d | _d| _d S )N   )
stacklevelF)r   _get_event_loop_loop_paused_drain_waiter_connection_lost)selfr   r   r   r   __init__~   s   
zFlowControlMixin.__init__c                 C   s$   d| _ | j rtd|  d S d S )NTz%r pauses writing)r6   r5   	get_debugr   debugr9   r   r   r   pause_writing   s   
zFlowControlMixin.pause_writingc                 C   sN   d| _ | j rtd|  | j}|d ur#d | _| s%|d  d S d S d S )NFz%r resumes writing)r6   r5   r;   r   r<   r7   done
set_resultr9   waiterr   r   r   resume_writing   s   
zFlowControlMixin.resume_writingc                 C   sX   d| _ | jsd S | j}|d u rd S d | _| rd S |d u r%|d  d S || d S NT)r8   r6   r7   r?   r@   set_exceptionr9   excrB   r   r   r   connection_lost   s   z FlowControlMixin.connection_lostc                    s>   | j rtd| jsd S | j}| j }|| _|I d H  d S )NzConnection lost)r8   ConnectionResetErrorr6   r7   r5   create_futurerA   r   r   r   _drain_helper   s   
zFlowControlMixin._drain_helperc                 C   s   t r   )NotImplementedErrorr9   streamr   r   r   _get_close_waiter      z"FlowControlMixin._get_close_waiterr   )	__name__
__module____qualname__r:   r>   rC   rH   rK   rO   r   r   r   r   r1   t   s    
		r1   c                       sd   e Zd Z	 dZd fdd	Zedd Zdd Z fdd	Zd
d Z	dd Z
dd Zdd Z  ZS )r   Nc                    sn   t  j|d |d urt|| _|j| _nd | _|d ur || _d| _d | _d | _	|| _
d| _| j | _d S )Nr   F)superr:   weakrefref_stream_reader_wr_source_traceback_strong_reader_reject_connection_stream_writer
_transport_client_connected_cb	_over_sslr5   rJ   _closed)r9   Zstream_readerr,   r   	__class__r   r   r:      s   
zStreamReaderProtocol.__init__c                 C   s   | j d u rd S |   S r   )rW   r=   r   r   r   _stream_reader   s   
z#StreamReaderProtocol._stream_readerc                 C   s   | j rddi}| jr| j|d< | j| |  d S || _| j}|d ur*|| |dd u| _	| j
d urWt|| || j| _| 
|| j}t|rR| j| d | _d S d S )NmessagezpAn open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.Zsource_tracebackZ
sslcontext)rZ   rX   r5   Zcall_exception_handlerabortr\   rb   set_transportget_extra_infor^   r]   r   r[   r   ZiscoroutineZcreate_taskrY   )r9   r$   contextr#   resr   r   r   connection_made   s2   




z$StreamReaderProtocol.connection_madec                    sx   | j }|d ur|d u r|  n|| | j s+|d u r%| jd  n| j| t | d | _d | _	d | _
d S r   )rb   feed_eofrE   r_   r?   r@   rT   rH   rW   r[   r\   )r9   rG   r#   r`   r   r   rH      s   



z$StreamReaderProtocol.connection_lostc                 C   s    | j }|d ur|| d S d S r   )rb   	feed_data)r9   datar#   r   r   r   data_received  s   z"StreamReaderProtocol.data_receivedc                 C   s$   | j }|d ur|  | jrdS dS )NFT)rb   rj   r^   )r9   r#   r   r   r   eof_received  s   z!StreamReaderProtocol.eof_receivedc                 C      | j S r   )r_   rM   r   r   r   rO        z&StreamReaderProtocol._get_close_waiterc                 C   sD   z| j }W n
 ty   Y d S w | r| s |  d S d S d S r   )r_   AttributeErrorr?   	cancelled	exception)r9   closedr   r   r   __del__  s   
zStreamReaderProtocol.__del__NN)rQ   rR   rS   rX   r:   propertyrb   ri   rH   rm   rn   rO   ru   __classcell__r   r   r`   r   r      s    
r   c                   @   st   e Zd Z	 dd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdddZdd ZdS )r   c                 C   s4   || _ || _|| _|| _| j | _| jd  d S r   )r\   	_protocol_readerr5   rJ   Z_complete_futr@   )r9   r$   r   r#   r   r   r   r   r:   1  s   zStreamWriter.__init__c                 C   s@   | j jd| jg}| jd ur|d| j dd|S )N
transport=zreader=<{}> )ra   rQ   r\   rz   appendformatjoinr9   infor   r   r   __repr__;  s   
zStreamWriter.__repr__c                 C   ro   r   r\   r=   r   r   r   r$   A  s   zStreamWriter.transportc                 C      | j | d S r   )r\   writer9   rl   r   r   r   r   E     zStreamWriter.writec                 C   r   r   )r\   
writelinesr   r   r   r   r   H  r   zStreamWriter.writelinesc                 C   
   | j  S r   )r\   	write_eofr=   r   r   r   r   K     
zStreamWriter.write_eofc                 C   r   r   )r\   can_write_eofr=   r   r   r   r   N  r   zStreamWriter.can_write_eofc                 C   r   r   )r\   closer=   r   r   r   r   Q  r   zStreamWriter.closec                 C   r   r   )r\   
is_closingr=   r   r   r   r   T  r   zStreamWriter.is_closingc                    s   | j | I d H  d S r   )ry   rO   r=   r   r   r   wait_closedW  s   zStreamWriter.wait_closedNc                 C   s   | j ||S r   )r\   rf   )r9   namedefaultr   r   r   rf   Z  s   zStreamWriter.get_extra_infoc                    sP   	 | j d ur| j  }|d ur|| j rtdI d H  | j I d H  d S )Nr   )rz   rs   r\   r   r   ry   rK   )r9   rG   r   r   r   drain]  s   



zStreamWriter.drainr   )rQ   rR   rS   r:   r   rw   r$   r   r   r   r   r   r   r   rf   r   r   r   r   r   r   '  s    	


r   c                   @   s   e Zd ZdZedfddZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd&ddZd'ddZd d! Zd"d# Zd$d% ZdS )(r   Nc                 C   sz   |dkrt d|| _|d u rt | _n|| _t | _d| _d | _d | _	d | _
d| _| j r;ttd| _d S d S )Nr   zLimit cannot be <= 0Fr
   )
ValueError_limitr   r4   r5   	bytearray_buffer_eof_waiter
_exceptionr\   r6   r;   r   extract_stacksys	_getframerX   )r9   r   r   r   r   r   r:   {  s"   

zStreamReader.__init__c                 C   s   dg}| j r|t| j  d | jr|d | jtkr'|d| j  | jr3|d| j | jr?|d| j | jrK|d| j | j	rS|d d	
d
|S )Nr   z byteseofzlimit=zwaiter=z
exception=r{   Zpausedr|   r}   )r   r~   lenr   r   _DEFAULT_LIMITr   r   r\   r6   r   r   r   r   r   r   r     s    


zStreamReader.__repr__c                 C   ro   r   )r   r=   r   r   r   rs     rp   zStreamReader.exceptionc                 C   s8   || _ | j}|d urd | _| s|| d S d S d S r   )r   r   rr   rE   rF   r   r   r   rE     s   zStreamReader.set_exceptionc                 C   s4   	 | j }|d urd | _ | s|d  d S d S d S r   )r   rr   r@   rA   r   r   r   _wakeup_waiter  s   zStreamReader._wakeup_waiterc                 C   s
   || _ d S r   r   )r9   r$   r   r   r   re     s   
zStreamReader.set_transportc                 C   s2   | j rt| j| jkrd| _ | j  d S d S d S )NF)r6   r   r   r   r\   resume_readingr=   r   r   r   _maybe_resume_transport  s   z$StreamReader._maybe_resume_transportc                 C   s   d| _ |   d S rD   )r   r   r=   r   r   r   rj     s   zStreamReader.feed_eofc                 C   s   	 | j o| j S r   )r   r   r=   r   r   r   at_eof  s   zStreamReader.at_eofc                 C   s   |sd S | j | |   | jd ur:| js<t| j d| j kr>z| j  W n ty4   d | _Y d S w d| _d S d S d S d S )N   T)	r   extendr   r\   r6   r   r   Zpause_readingrL   r   r   r   r   rk     s    

zStreamReader.feed_datac                    s`   	 | j d urt| d| jrd| _| j  | j | _ z| j I d H  W d | _ d S d | _ w )NzF() called while another coroutine is already waiting for incoming dataF)r   RuntimeErrorr6   r\   r   r5   rJ   )r9   	func_namer   r   r   _wait_for_data  s   

zStreamReader._wait_for_datac              
      s   	 d}t |}z| |I d H }W |S  tjy) } z	|jW  Y d }~S d }~w tjyW } z"| j||jrC| jd |j| = n| j	  | 
  t|jd d }~ww )N   
r   )r   	readuntilr   IncompleteReadErrorpartialLimitOverrunErrorr   
startswithconsumedclearr   r   args)r9   sepseplenlineer   r   r   readline  s$   

zStreamReader.readliner   c                    s  	 t |}|dkrtd| jd ur| jd}	 t | j}|| |krA| j||}|dkr0n-|d | }|| jkrAtd|| jrTt	| j}| j
  t|d | dI d H  q|| jkrhtd|| jd ||  }| jd || = |   t	|S )	Nr   z,Separator should be at least one-byte stringTr
   z2Separator is not found, and chunk exceed the limitr   z2Separator is found, but chunk is longer than limit)r   r   r   r   findr   r   r   r   bytesr   r   r   r   )r9   	separatorr   offsetbuflenZisepchunkr   r   r   r     sD   





 zStreamReader.readuntilr   c                    s   	 | j d ur
| j |dkrdS |dk r.g }	 | | jI d H }|s#n|| qd|S | js<| js<| dI d H  t| jd | }| jd |= | 	  |S )Nr       Tread)
r   r   r   r~   r   r   r   r   r   r   )r9   nZblocksblockrl   r   r   r   r   t  s*   


zStreamReader.readc                    s   	 |dk r
t d| jd ur| j|dkrdS t| j|k rA| jr2t| j}| j  t||| 	dI d H  t| j|k st| j|krSt| j}| j  nt| jd | }| jd |= | 
  |S )Nr   z*readexactly size can not be less than zeror   readexactly)r   r   r   r   r   r   r   r   r   r   r   )r9   r   Z
incompleterl   r   r   r   r     s,   



zStreamReader.readexactlyc                 C   s   | S r   r   r=   r   r   r   	__aiter__  rP   zStreamReader.__aiter__c                    s    |   I d H }|dkrt|S )Nr   )r   StopAsyncIteration)r9   valr   r   r   	__anext__  s
   zStreamReader.__anext__)r   )r   )rQ   rR   rS   rX   r   r:   r   rs   rE   r   re   r   rj   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   w  s&    	

[2)r   rv   r   )__all__socketr   warningsrU   hasattr r   r   r   r   r   logr   Ztasksr   r   r   r   r   r	   ZProtocolr1   r   r   r   r   r   r   r   <module>   s@    

"DoP