3 \@,�@s@ddlZddlmZGdd�dej�ZGdd�d�Zdd�ZdS) �N)�dequec@s�eZdZdZdZdZdZd'dd�Zdd�Zd d �Z d d �Z d d�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�ZdS)(� async_chatirzlatin-1NcCs(d|_g|_t�|_tjj|||�dS)N�)� ac_in_buffer�incomingr� producer_fifo�asyncore� dispatcher�__init__)�selfZsock�map�r � /usr/lib64/python3.6/asynchat.pyr Cszasync_chat.__init__cCs td��dS)Nzmust be implemented in subclass)�NotImplementedError)r �datar r r�collect_incoming_dataQsz async_chat.collect_incoming_datacCs|jj|�dS)N)r�append)r rr r r�_collect_incoming_dataTsz!async_chat._collect_incoming_datacCsdj|j�}|jdd�=|S)Nr)�joinr)r �dr r r� _get_dataWs  zasync_chat._get_datacCs td��dS)Nzmust be implemented in subclass)r)r r r r�found_terminator\szasync_chat.found_terminatorcCsBt|t�r|jrt||j�}nt|t�r8|dkr8td��||_dS)Nrz-the number of received bytes must be positive)� isinstance�str� use_encoding�bytes�encoding�int� ValueError� terminator)r Ztermr r r�set_terminator_s zasync_chat.set_terminatorcCs|jS)N)r)r r r r�get_terminatorjszasync_chat.get_terminatorcCs�y|j|j�}Wn:tk r$dStk rJ}z |j�dSd}~XnXt|t�rh|jrhtt|j �}|j ||_ �xV|j �r�t |j �}|j �}|s�|j |j �d|_ qxt|t��r|}||kr�|j |j �d|_ |j||_n2|j |j d|��|j |d�|_ d|_|j�qxt |�}|j j|�}|dk�rp|dk�rR|j |j d|��|j ||d�|_ |j�qxt|j |�}|�r�||k�r�|j |j d| ��|j | d�|_ Pqx|j |j �d|_ qxWdS)Nrr������)Zrecv�ac_in_buffer_size�BlockingIOError�OSError� handle_errorrrrrrr�lenr!rrrr�find�find_prefix_at_end)r rZwhyZlbr�nZterminator_len�indexr r r� handle_readrsR               zasync_chat.handle_readcCs |j�dS)N)� initiate_send)r r r r� handle_write�szasync_chat.handle_writecCs |j�dS)N)�close)r r r r� handle_close�szasync_chat.handle_closecCs|t|tttf�stdt|���|j}t|�|krdx>tdt|�|�D]}|j j ||||��qBWn |j j |�|j �dS)Nz#data argument must be byte-ish (%r)r) rr� bytearray� memoryview� TypeError�type�ac_out_buffer_sizer(�rangerrr.)r rZsabs�ir r r�push�s   zasync_chat.pushcCs|jj|�|j�dS)N)rrr.)r Zproducerr r r�push_with_producer�s zasync_chat.push_with_producercCsdS)Nr"r )r r r r�readable�szasync_chat.readablecCs|jp |j S)N)r� connected)r r r r�writable�szasync_chat.writablecCs|jjd�dS)N)rr)r r r r�close_when_done�szasync_chat.close_when_donecCs�x|jo|j�r|jd}|s<|jd=|dkr<|j�dS|j}y|d|�}Wn8tk r�|j�}|r||jj|�n|jd=wYnXt|t�r�|j r�t ||j �}y|j |�}Wnt k r�|j�dSX|�r|t|�ks�|t|�k�r||d�|jd<n|jd=dSWdS)Nr)rr<r1r6r4�more� appendleftrrrrr�sendr&r'r()r �firstZobsrZnum_sentr r rr.�s8  zasync_chat.initiate_sendcCs d|_|jdd�=|jj�dS)Nr)rrr�clear)r r r r�discard_bufferss zasync_chat.discard_buffers)NN)�__name__� __module__� __qualname__r$r6rrr rrrrr r!r-r/r1r9r:r;r=r>r.rDr r r rr4s*  H (rc@seZdZddd�Zdd�ZdS)�simple_producer�cCs||_||_dS)N)r� buffer_size)r rrJr r rr szsimple_producer.__init__cCsJt|j�|jkr6|jd|j�}|j|jd�|_|S|j}d|_|SdS)Nr)r(rrJ)r �resultr r rr?szsimple_producer.moreN)rI)rErFrGr r?r r r rrHs rHcCs6t|�d}x$|r0|j|d|�� r0|d8}qW|S)Nr")r(�endswith)ZhaystackZneedle�lr r rr*/s  r*)r� collectionsrr rrHr*r r r r�0s  \