3 \�_�@sHdddddddgZddlZeed �r2ejd d g�d d lmZd dlmZd dlmZd dlmZd dlm Z d dl m Z d!Z Gdd�de �ZGdd�de�Ze d"de d�dd��Ze d#de d�dd��Zeed ��re d$de d�dd ��Ze d%de d�dd ��ZGdd�dej�ZGdd�deej�ZGdd�d�ZGd d�d�ZdS)&� StreamReader� StreamWriter�StreamReaderProtocol�open_connection� start_server�IncompleteReadError�LimitOverrunError�NZAF_UNIX�open_unix_connection�start_unix_server�)� coroutines)�compat)�events)� protocols)� coroutine)�logger��cs$eZdZ�fdd�Zdd�Z�ZS)rcs(t�jdt|�|f�||_||_dS)Nz-%d bytes read on a total of %r expected bytes)�super�__init__�len�partial�expected)�selfrr)� __class__��'/usr/lib64/python3.6/asyncio/streams.pyr szIncompleteReadError.__init__cCst|�|j|jffS)N)�typerr)rrrr� __reduce__&szIncompleteReadError.__reduce__)�__name__� __module__� __qualname__rr� __classcell__rr)rrrs cs$eZdZ�fdd�Zdd�Z�ZS)rcst�j|�||_dS)N)rr�consumed)r�messager#)rrrr0s zLimitOverrunError.__init__cCst|�|jd|jffS)Nr)r�argsr#)rrrrr4szLimitOverrunError.__reduce__)rr r!rrr"rr)rrr*s )�loop�limitc +sb|dkrtj�}t||d�}t||d��|j�fdd�||f|�EdH\}}t|�||�}||fS)N)r'r&)r&cs�S)Nrr)�protocolrr�Qsz!open_connection..)r�get_event_looprrZcreate_connectionr) �host�portr&r'�kwds�reader� transport�_�writerr)r(rr8s   c+s8�dkrtj�����fdd�}�j|||f|�EdHS)Ncst��d�}t|��d�}|S)N)r'r&)r&)rr)r.r()�client_connected_cbr'r&rr�factoryqs zstart_server..factory)rr*Z create_server)r2r+r,r&r'r-r3r)r2r'r&rrVsc+s`|dkrtj�}t||d�}t||d��|j�fdd�|f|�EdH\}}t|�||�}||fS)N)r'r&)r&cs�S)Nrr)r(rrr)�sz&open_unix_connection..)rr*rrZcreate_unix_connectionr)�pathr&r'r-r.r/r0r1r)r(rr }s  c+s6�dkrtj�����fdd�}�j||f|�EdHS)Ncst��d�}t|��d�}|S)N)r'r&)r&)rr)r.r()r2r'r&rrr3�s z"start_unix_server..factory)rr*Zcreate_unix_server)r2r4r&r'r-r3r)r2r'r&rr �sc@s:eZdZd dd�Zdd�Zdd�Zdd �Zed d ��ZdS) �FlowControlMixinNcCs0|dkrtj�|_n||_d|_d|_d|_dS)NF)rr*�_loop�_paused� _drain_waiter�_connection_lost)rr&rrrr�s  zFlowControlMixin.__init__cCs d|_|jj�rtjd|�dS)NTz%r pauses writing)r7r6� get_debugr�debug)rrrr� pause_writing�s zFlowControlMixin.pause_writingcCsFd|_|jj�rtjd|�|j}|dk rBd|_|j�sB|jd�dS)NFz%r resumes writing)r7r6r:rr;r8�done� set_result)r�waiterrrr�resume_writing�s  zFlowControlMixin.resume_writingcCsVd|_|jsdS|j}|dkr"dSd|_|j�r4dS|dkrH|jd�n |j|�dS)NT)r9r7r8r=r>� set_exception)r�excr?rrr�connection_lost�s z FlowControlMixin.connection_lostccs<|jrtd��|jsdS|j}|jj�}||_|EdHdS)NzConnection lost)r9�ConnectionResetErrorr7r8r6� create_future)rr?rrr� _drain_helper�s zFlowControlMixin._drain_helper)N) rr r!rr<r@rCrrFrrrrr5�s   r5csBeZdZd �fdd� Zdd�Z�fdd�Zdd �Zd d �Z�ZS) rNcs*t�j|d�||_d|_||_d|_dS)N)r&F)rr�_stream_reader�_stream_writer�_client_connected_cb� _over_ssl)rZ stream_readerr2r&)rrrr�s zStreamReaderProtocol.__init__cCsd|jj|�|jd�dk |_|jdk r`t|||j|j�|_|j|j|j�}tj |�r`|jj |�dS)NZ sslcontext) rG� set_transport�get_extra_inforJrIrr6rHr Z iscoroutineZ create_task)rr/�resrrr�connection_made�s    z$StreamReaderProtocol.connection_madecsF|jdk r*|dkr|jj�n |jj|�t�j|�d|_d|_dS)N)rG�feed_eofrArrCrH)rrB)rrrrC�s    z$StreamReaderProtocol.connection_lostcCs|jj|�dS)N)rG� feed_data)r�datarrr� data_receivedsz"StreamReaderProtocol.data_receivedcCs|jj�|jrdSdS)NFT)rGrOrJ)rrrr� eof_receiveds z!StreamReaderProtocol.eof_received)NN) rr r!rrNrCrRrSr"rr)rrr�s   c@sfeZdZdd�Zdd�Zedd��Zdd�Zd d �Zd d �Z d d�Z dd�Z ddd�Z e dd��ZdS)rcCs||_||_||_||_dS)N)� _transport� _protocol�_readerr6)rr/r(r.r&rrrrszStreamWriter.__init__cCs:|jjd|jg}|jdk r,|jd|j�ddj|�S)Nz transport=%rz reader=%rz<%s>� )rrrTrV�append�join)r�inforrr�__repr__!s zStreamWriter.__repr__cCs|jS)N)rT)rrrrr/'szStreamWriter.transportcCs|jj|�dS)N)rT�write)rrQrrrr\+szStreamWriter.writecCs|jj|�dS)N)rT� writelines)rrQrrrr].szStreamWriter.writelinescCs |jj�S)N)rT� write_eof)rrrrr^1szStreamWriter.write_eofcCs |jj�S)N)rT� can_write_eof)rrrrr_4szStreamWriter.can_write_eofcCs |jj�S)N)rT�close)rrrrr`7szStreamWriter.closeNcCs|jj||�S)N)rTrL)r�name�defaultrrrrL:szStreamWriter.get_extra_infoccsN|jdk r |jj�}|dk r |�|jdk r:|jj�r:dV|jj�EdHdS)N)rV� exceptionrTZ is_closingrUrF)rrBrrr�drain=s    zStreamWriter.drain)N)rr r!rr[�propertyr/r\r]r^r_r`rLrrdrrrrrs   c@s�eZdZedfdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dd�Z dd�Z dd�Z edd��Zedd��Zed'dd��Zed)dd��Zed d!��Zejr�ed"d#��Zed$d%��Zejr�d&d#�ZdS)*rNcCsZ|dkrtd��||_|dkr*tj�|_n||_t�|_d|_d|_d|_ d|_ d|_ dS)NrzLimit cannot be <= 0F) � ValueError�_limitrr*r6� bytearray�_buffer�_eof�_waiter� _exceptionrTr7)rr'r&rrrrXs zStreamReader.__init__cCs�dg}|jr |jdt|j��|jr0|jd�|jtkrJ|jd|j�|jr`|jd|j�|jrv|jd|j�|jr�|jd|j�|j r�|jd�d d j |�S) Nrz%d bytes�eofzl=%dzw=%rze=%rzt=%rZpausedz<%s>rW) rirXrrjrg�_DEFAULT_LIMITrkrlrTr7rY)rrZrrrr[ks    zStreamReader.__repr__cCs|jS)N)rl)rrrrrc}szStreamReader.exceptioncCs0||_|j}|dk r,d|_|j�s,|j|�dS)N)rlrk� cancelledrA)rrBr?rrrrA�s zStreamReader.set_exceptioncCs*|j}|dk r&d|_|j�s&|jd�dS)N)rkror>)rr?rrr�_wakeup_waiter�s zStreamReader._wakeup_waitercCs ||_dS)N)rT)rr/rrrrK�szStreamReader.set_transportcCs*|jr&t|j�|jkr&d|_|jj�dS)NF)r7rrirgrT�resume_reading)rrrr�_maybe_resume_transport�sz$StreamReader._maybe_resume_transportcCsd|_|j�dS)NT)rjrp)rrrrrO�szStreamReader.feed_eofcCs|jo |j S)N)rjri)rrrr�at_eof�szStreamReader.at_eofc Csv|sdS|jj|�|j�|jdk rr|j rrt|j�d|jkrry|jj�Wntk rjd|_YnXd|_dS)NrT) ri�extendrprTr7rrgZ pause_reading�NotImplementedError)rrQrrrrP�s   zStreamReader.feed_datac csV|jdk rtd|��|jr,d|_|jj�|jj�|_z|jEdHWdd|_XdS)NzH%s() called while another coroutine is already waiting for incoming dataF)rk� RuntimeErrorr7rTrqr6rE)rZ func_namerrr�_wait_for_data�s   zStreamReader._wait_for_dataccs�d}t|�}y|j|�EdH}Wn�tk rB}z|jSd}~Xnftk r�}zJ|jj||j�rv|jd|j|�=n |jj�|j �t |j d��WYdd}~XnX|S)N� r) r� readuntilrrrri� startswithr#�clearrrrfr%)r�sep�seplen�line�errr�readline�s  zStreamReader.readlinerxccs�t|�}|dkrtd��|jdk r(|j�d}x�t|j�}|||kr||jj||�}|dkr\P|d|}||jkr|td|��|jr�t|j�}|jj �t |d��|j d�EdHq.W||jkr�td|��|jd||�}|jd||�=|j �t|�S)Nrz,Separator should be at least one-byte stringr z2Separator is not found, and chunk exceed the limitryz2Separator is found, but chunk is longer than limit�����) rrfrlri�findrgrrj�bytesr{rrwrr)rZ separatorr}�offsetZbuflenZisep�chunkrrrry�s:         zStreamReader.readuntilr ccs�|jdk r|j�|dkrdS|dkrZg}x&|j|j�EdH}|sBP|j|�q*Wdj|�S|j rz|j rz|jd�EdHt|jd|��}|jd|�=|j �|S)Nr��read) rlr�rgrXrYrirjrwr�rr)r�nZblocks�blockrQrrrr�Ps$   zStreamReader.readccs�|dkrtd��|jdk r |j�|dkr,dSxFt|j�|krr|jr`t|j�}|jj�t||��|jd�EdHq.Wt|j�|kr�t|j�}|jj�nt|jd|��}|jd|�=|j �|S)Nrz*readexactly size can not be less than zeror�� readexactly) rfrlrrirjr�r{rrwrr)rr�Z incompleterQrrrr��s&       zStreamReader.readexactlycCs|S)Nr)rrrr� __aiter__�szStreamReader.__aiter__ccs|j�EdH}|dkrt�|S)Nr�)r��StopAsyncIteration)r�valrrr� __anext__�szStreamReader.__anext__cCs|S)Nr)rrrrr��s)rxr�)r�)rr r!rnrr[rcrArprKrrrOrsrPrrwr�ryr�r�r ZPY35r�r�ZPY352rrrrrVs,    [ 2 *  i)NN)NN)N)N)�__all__Zsocket�hasattrrt�r r rrr�logrrn�EOFErrorr� Exceptionrrrr r ZProtocolr5rrrrrrr�s@       "  B3G