
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \˜_  ã               @   sH  d ddddddgZ ddlZeed	ƒr2e jd
dgƒ 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G dd„ deƒZG dd„ deƒZe	d"dedœdd„ƒZe	d#dedœdd„ƒZeed	ƒ�re	d$dedœdd
„ƒZe	d%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ÚIncompleteReadErrorÚLimitOverrunErroré    NZAF_UNIXÚopen_unix_connectionÚstart_unix_serveré   )Ú
coroutines)Úcompat)Úevents)Ú	protocols)Ú	coroutine)Úloggeré   é   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )r   c                s(   t ƒ jdt|ƒ|f ƒ || _|| _d S )Nz-%d bytes read on a total of %r expected bytes)ÚsuperÚ__init__ÚlenÚpartialÚexpected)Úselfr   r   )Ú	__class__© ú'/usr/lib64/python3.6/asyncio/streams.pyr       s    zIncompleteReadError.__init__c             C   s   t | ƒ| j| jffS )N)Útyper   r   )r   r   r   r   Ú
__reduce__&   s    zIncompleteReadError.__reduce__)Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   )r   r   r      s   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )r   c                s   t ƒ j|ƒ || _d S )N)r   r   Úconsumed)r   Úmessager#   )r   r   r   r   0   s    zLimitOverrunError.__init__c             C   s   t | ƒ| jd | jffS )Nr   )r   Úargsr#   )r   r   r   r   r   4   s    zLimitOverrunError.__reduce__)r   r    r!   r   r   r"   r   r   )r   r   r   *   s   )ÚloopÚlimitc      	      +   sb   |d krt jƒ }t||d�}t||d�‰ |j‡ fdd„| |f|ŽE d H \}}t|ˆ ||ƒ}||fS )N)r'   r&   )r&   c                  s   ˆ S )Nr   r   )Úprotocolr   r   Ú<lambda>Q   s    z!open_connection.<locals>.<lambda>)r   Úget_event_loopr   r   Zcreate_connectionr   )	ÚhostÚportr&   r'   ÚkwdsÚreaderÚ	transportÚ_Úwriterr   )r(   r   r   8   s     c            +   s8   ˆd krt jƒ ‰‡ ‡‡fdd„}ˆj|||f|ŽE d H S )Nc                 s   t ˆˆd�} t| ˆ ˆd�}|S )N)r'   r&   )r&   )r   r   )r.   r(   )Úclient_connected_cbr'   r&   r   r   Úfactoryq   s    zstart_server.<locals>.factory)r   r*   Zcreate_server)r2   r+   r,   r&   r'   r-   r3   r   )r2   r'   r&   r   r   V   s    c            +   s`   |d krt jƒ }t||d�}t||d�‰ |j‡ fdd„| f|ŽE d H \}}t|ˆ ||ƒ}||fS )N)r'   r&   )r&   c                  s   ˆ S )Nr   r   )r(   r   r   r)   †   s    z&open_unix_connection.<locals>.<lambda>)r   r*   r   r   Zcreate_unix_connectionr   )Úpathr&   r'   r-   r.   r/   r0   r1   r   )r(   r   r	   }   s    c            +   s6   ˆd krt jƒ ‰‡ ‡‡fdd„}ˆj||f|ŽE d H S )Nc                 s   t ˆˆd�} t| ˆ ˆd�}|S )N)r'   r&   )r&   )r   r   )r.   r(   )r2   r'   r&   r   r   r3   ‘   s    z"start_unix_server.<locals>.factory)r   r*   Zcreate_unix_server)r2   r4   r&   r'   r-   r3   r   )r2   r'   r&   r   r
   Š   s    c               @   s:   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zed
d„ ƒZdS )ÚFlowControlMixinNc             C   s0   |d krt jƒ | _n|| _d| _d | _d| _d S )NF)r   r*   Ú_loopÚ_pausedÚ_drain_waiterÚ_connection_lost)r   r&   r   r   r   r   ¤   s    zFlowControlMixin.__init__c             C   s    d| _ | jjƒ rtjd| ƒ d S )NTz%r pauses writing)r7   r6   Ú	get_debugr   Údebug)r   r   r   r   Úpause_writing­   s    
zFlowControlMixin.pause_writingc             C   sF   d| _ | jjƒ rtjd| ƒ | j}|d k	rBd | _|jƒ sB|jd ƒ d S )NFz%r resumes writing)r7   r6   r:   r   r;   r8   ÚdoneÚ
set_result)r   Úwaiterr   r   r   Úresume_writing³   s    
zFlowControlMixin.resume_writingc             C   sV   d| _ | jsd S | j}|d kr"d S d | _|jƒ r4d S |d krH|jd ƒ n
|j|ƒ d S )NT)r9   r7   r8   r=   r>   Úset_exception)r   Úexcr?   r   r   r   Úconnection_lost¿   s    z FlowControlMixin.connection_lostc             c   s<   | j rtdƒ‚| jsd S | j}| jjƒ }|| _|E d H  d S )NzConnection lost)r9   ÚConnectionResetErrorr7   r8   r6   Úcreate_future)r   r?   r   r   r   Ú_drain_helperÏ   s    
zFlowControlMixin._drain_helper)N)	r   r    r!   r   r<   r@   rC   r   rF   r   r   r   r   r5   š   s
   

	r5   c                   sB   e Zd Zd‡ fdd„	Zdd„ Z‡ fdd„Zdd	„ Zd
d„ Z‡  ZS )r   Nc                s*   t ƒ j|d� || _d | _|| _d| _d S )N)r&   F)r   r   Ú_stream_readerÚ_stream_writerÚ_client_connected_cbÚ	_over_ssl)r   Zstream_readerr2   r&   )r   r   r   r   å   s
    zStreamReaderProtocol.__init__c             C   sd   | j j|ƒ |jdƒd k	| _| jd k	r`t|| | j | jƒ| _| j| j | jƒ}tj	|ƒr`| jj
|ƒ d S )NZ
sslcontext)rG   Úset_transportÚget_extra_inforJ   rI   r   r6   rH   r   ZiscoroutineZcreate_task)r   r/   Úresr   r   r   Úconnection_madeì   s    


z$StreamReaderProtocol.connection_madec                sF   | j d k	r*|d kr| j jƒ  n| j j|ƒ tƒ j|ƒ d | _ d | _d S )N)rG   Úfeed_eofrA   r   rC   rH   )r   rB   )r   r   r   rC   ø   s    
z$StreamReaderProtocol.connection_lostc             C   s   | j j|ƒ d S )N)rG   Ú	feed_data)r   Údatar   r   r   Údata_received  s    z"StreamReaderProtocol.data_receivedc             C   s   | j jƒ  | jrdS dS )NFT)rG   rO   rJ   )r   r   r   r   Úeof_received  s    
z!StreamReaderProtocol.eof_received)NN)	r   r    r!   r   rN   rC   rR   rS   r"   r   r   )r   r   r   Ü   s
   	
c               @   sf   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d„Zedd„ ƒZdS )r   c             C   s   || _ || _|| _|| _d S )N)Ú
_transportÚ	_protocolÚ_readerr6   )r   r/   r(   r.   r&   r   r   r   r     s    zStreamWriter.__init__c             C   s:   | j jd| j g}| jd k	r,|jd| j ƒ ddj|ƒ S )Nztransport=%rz	reader=%rz<%s>ú )r   r   rT   rV   ÚappendÚjoin)r   Úinfor   r   r   Ú__repr__!  s    
zStreamWriter.__repr__c             C   s   | j S )N)rT   )r   r   r   r   r/   '  s    zStreamWriter.transportc             C   s   | j j|ƒ d S )N)rT   Úwrite)r   rQ   r   r   r   r\   +  s    zStreamWriter.writec             C   s   | j j|ƒ d S )N)rT   Ú
writelines)r   rQ   r   r   r   r]   .  s    zStreamWriter.writelinesc             C   s
   | j jƒ S )N)rT   Ú	write_eof)r   r   r   r   r^   1  s    zStreamWriter.write_eofc             C   s
   | j jƒ S )N)rT   Úcan_write_eof)r   r   r   r   r_   4  s    zStreamWriter.can_write_eofc             C   s
   | j jƒ S )N)rT   Úclose)r   r   r   r   r`   7  s    zStreamWriter.closeNc             C   s   | j j||ƒS )N)rT   rL   )r   ÚnameÚdefaultr   r   r   rL   :  s    zStreamWriter.get_extra_infoc             c   sN   | j d k	r | j jƒ }|d k	r |‚| jd k	r:| jjƒ r:d V  | jjƒ E d H  d S )N)rV   Ú	exceptionrT   Z
is_closingrU   rF   )r   rB   r   r   r   Údrain=  s    	



zStreamWriter.drain)N)r   r    r!   r   r[   Úpropertyr/   r\   r]   r^   r_   r`   rL   r   rd   r   r   r   r   r     s   

c               @   sÎ   e 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edd„ ƒZedd„ ƒZed'dd„ƒZed)dd„ƒZed d!„ ƒZejr¼ed"d#„ ƒZed$d%„ ƒZejrÊd&d#„ ZdS )*r   Nc             C   sZ   |dkrt dƒ‚|| _|d kr*tjƒ | _n|| _tƒ | _d| _d | _d | _	d | _
d| _d S )Nr   zLimit cannot be <= 0F)Ú
ValueErrorÚ_limitr   r*   r6   Ú	bytearrayÚ_bufferÚ_eofÚ_waiterÚ
_exceptionrT   r7   )r   r'   r&   r   r   r   r   X  s    zStreamReader.__init__c             C   sª   dg}| j r |jdt| j ƒ ƒ | jr0|jdƒ | jtkrJ|jd| j ƒ | jr`|jd| j ƒ | jrv|jd| j ƒ | jrŒ|jd| j ƒ | j	rœ|jdƒ d	d
j
|ƒ S )Nr   z%d bytesÚeofzl=%dzw=%rze=%rzt=%rZpausedz<%s>rW   )ri   rX   r   rj   rg   Ú_DEFAULT_LIMITrk   rl   rT   r7   rY   )r   rZ   r   r   r   r[   k  s     


zStreamReader.__repr__c             C   s   | j S )N)rl   )r   r   r   r   rc   }  s    zStreamReader.exceptionc             C   s0   || _ | j}|d k	r,d | _|jƒ s,|j|ƒ d S )N)rl   rk   Ú	cancelledrA   )r   rB   r?   r   r   r   rA   €  s    zStreamReader.set_exceptionc             C   s*   | j }|d k	r&d | _ |jƒ s&|jd ƒ d S )N)rk   ro   r>   )r   r?   r   r   r   Ú_wakeup_waiter‰  s
    zStreamReader._wakeup_waiterc             C   s
   || _ d S )N)rT   )r   r/   r   r   r   rK   ‘  s    zStreamReader.set_transportc             C   s*   | j r&t| jƒ| jkr&d| _ | jjƒ  d S )NF)r7   r   ri   rg   rT   Úresume_reading)r   r   r   r   Ú_maybe_resume_transport•  s    z$StreamReader._maybe_resume_transportc             C   s   d| _ | jƒ  d S )NT)rj   rp   )r   r   r   r   rO   š  s    zStreamReader.feed_eofc             C   s   | j o| j S )N)rj   ri   )r   r   r   r   Úat_eofž  s    zStreamReader.at_eofc             C   sv   |sd S | j j|ƒ | jƒ  | jd k	rr| j rrt| j ƒd| j krry| jjƒ  W n tk
rj   d | _Y nX d| _d S )Nr   T)	ri   Úextendrp   rT   r7   r   rg   Zpause_readingÚNotImplementedError)r   rQ   r   r   r   rP   ¢  s    
zStreamReader.feed_datac             c   sV   | j d k	rtd| ƒ‚| jr,d| _| jjƒ  | jjƒ | _ z| j E d H  W d d | _ X d S )NzH%s() called while another coroutine is already waiting for incoming dataF)rk   ÚRuntimeErrorr7   rT   rq   r6   rE   )r   Z	func_namer   r   r   Ú_wait_for_data¸  s    


zStreamReader._wait_for_datac             c   s¬   d}t |ƒ}y| j|ƒE d H }W n† tk
rB } z|jS d }~X nf tk
r¦ } zJ| jj||jƒrv| jd |j| …= n
| jjƒ  | j	ƒ  t
|jd ƒ‚W Y d d }~X nX |S )Nó   
r   )r   Ú	readuntilr   r   r   ri   Ú
startswithr#   Úclearrr   rf   r%   )r   ÚsepÚseplenÚlineÚer   r   r   ÚreadlineÔ  s    
 zStreamReader.readlinerx   c             c   sú   t |ƒ}|dkrtdƒ‚| jd k	r(| j‚d}x†t | jƒ}|| |kr|| jj||ƒ}|dkr\P |d | }|| jkr|td|ƒ‚| jr t| jƒ}| jj	ƒ  t
|d ƒ‚| jdƒE d H  q.W || jkrÈtd|ƒ‚| jd || … }| jd || …= | jƒ  t|ƒS )Nr   z,Separator should be at least one-byte stringr   z2Separator is not found, and chunk exceed the limitry   z2Separator is found, but chunk is longer than limitéÿÿÿÿ)r   rf   rl   ri   Úfindrg   r   rj   Úbytesr{   r   rw   rr   )r   Z	separatorr}   ÚoffsetZbuflenZisepÚchunkr   r   r   ry   ô  s:    






zStreamReader.readuntilr   c             c   s¤   | j d k	r| j ‚|dkrdS |dk rZg }x&| j| jƒE d H }|sBP |j|ƒ q*W dj|ƒS | j rz| j rz| jdƒE d H  t| jd |… ƒ}| jd |…= | j	ƒ  |S )Nr   ó    Úread)
rl   r‡   rg   rX   rY   ri   rj   rw   rƒ   rr   )r   ÚnZblocksÚblockrQ   r   r   r   r‡   P  s$    

zStreamReader.readc             c   sÂ   |dk rt dƒ‚| jd k	r | j‚|dkr,dS xFt| jƒ|k rr| jr`t| jƒ}| jjƒ  t||ƒ‚| jdƒE d H  q.W t| jƒ|kr˜t| jƒ}| jjƒ  nt| jd |… ƒ}| jd |…= | j	ƒ  |S )Nr   z*readexactly size can not be less than zeror†   Úreadexactly)
rf   rl   r   ri   rj   rƒ   r{   r   rw   rr   )r   rˆ   Z
incompleterQ   r   r   r   rŠ   ƒ  s&    




zStreamReader.readexactlyc             C   s   | S )Nr   )r   r   r   r   Ú	__aiter__®  s    zStreamReader.__aiter__c             c   s   | j ƒ E d H }|dkrt‚|S )Nr†   )r€   ÚStopAsyncIteration)r   Úvalr   r   r   Ú	__anext__²  s    zStreamReader.__anext__c             C   s   | S )Nr   )r   r   r   r   r‹   ¼  s    )rx   r�   )r�   )r   r    r!   rn   r   r[   rc   rA   rp   rK   rr   rO   rs   rP   r   rw   r€   ry   r‡   rŠ   r   ZPY35r‹   rŽ   ZPY352r   r   r   r   r   V  s,   	 [2*i   )NN)NN)N)N)Ú__all__ZsocketÚhasattrrt   Ú r   r   r   r   r   Úlogr   rn   ÚEOFErrorr   Ú	Exceptionr   r   r   r	   r
   ZProtocolr5   r   r   r   r   r   r   r   Ú<module>   s@   
"B3G