OwlCyberSecurity - MANAGER
Edit File: asynchat.cpython-36.opt-1.pyc
3 � \@,������������������@���sD���d�Z�ddlZddlmZ�G�dd��dej�ZG�dd��d�Zdd ��ZdS�) a���A class supporting chat-style (command/response) protocols. This class adds support for 'chat' style protocols - where one side sends a 'command', and the other sends a response (examples would be the common internet protocols - smtp, nntp, ftp, etc..). The handle_read() method looks at the input stream for the current 'terminator' (usually '\r\n' for single-line responses, '\r\n.\r\n' for multi-line output), calling self.found_terminator() on its receipt. for example: Say you build an async nntp client using this class. At the start of the connection, you'll have self.terminator set to '\r\n', in order to process the single-line greeting. Just before issuing a 'LIST' command you'll set it to '\r\n.\r\n'. The output of the LIST command will be accumulated (using your own 'collect_incoming_data' method) up to the terminator, and then control will be returned to you - by calling your self.found_terminator() method. �����N)�dequec���������������@���s����e�Zd�ZdZdZdZdZdZd(dd�Zdd ��Z d d��Z dd ��Zdd��Zdd��Z dd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zd d!��Zd"d#��Zd$d%��Zd&d'��ZdS�))� async_chatz�This is an abstract class. You must derive from this class, and add the two methods collect_incoming_data() and found_terminator()i���r���zlatin-1Nc�������������C���s(���d|�_�g�|�_t��|�_tjj|�||��d�S�)N�����)�ac_in_buffer�incomingr���� producer_fifo�asyncore� dispatcher�__init__)�selfZsock�map��r ���� /usr/lib64/python3.6/asynchat.pyr ���C���s����zasync_chat.__init__c�������������C���s���t�d��d�S�)Nzmust be implemented in subclass)�NotImplementedError)r����datar ���r ���r����collect_incoming_dataQ���s����z async_chat.collect_incoming_datac�������������C���s���|�j�j|��d�S�)N)r����append)r���r���r ���r ���r����_collect_incoming_dataT���s����z!async_chat._collect_incoming_datac�������������C���s���dj�|�j�}|�jd�d��=�|S�)Nr���)�joinr���)r����dr ���r ���r���� _get_dataW���s����zasync_chat._get_datac�������������C���s���t�d��d�S�)Nzmust be implemented in subclass)r���)r���r ���r ���r����found_terminator\���s����zasync_chat.found_terminatorc�������������C���sB���t�|t�r|�jrt||�j�}nt�|t�r8|dk�r8td��||�_dS�)zdSet the input delimiter. Can be a fixed string of any length, an integer, or None. r���z-the number of received bytes must be positiveN)� isinstance�str�use_encoding�bytes�encoding�int� ValueError� terminator)r���Ztermr ���r ���r����set_terminator_���s ����zasync_chat.set_terminatorc�������������C���s���|�j�S�)N)r���)r���r ���r ���r����get_terminatorj���s����zasync_chat.get_terminatorc�������������C���s���y|�j�|�j�}W�n:�tk r$���d�S��tk rJ�}�z|�j���d�S�d�}~X�nX�t|t�rh|�jrhtt|�j �}|�j |�|�_ �xV|�j �r�t|�j �}|�j��}|s�|�j |�j ��d|�_ qxt|t��r|}||k�r�|�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���|�_ P�qx|�j |�j ��d|�_ qxW�d�S�)Nr���r����������)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr���r���r���r���r���r����lenr!���r���r���r���r����find�find_prefix_at_end)r���r���ZwhyZlbr����nZterminator_len�indexr ���r ���r����handle_readr���sR���� zasync_chat.handle_readc�������������C���s���|�j����d�S�)N)� initiate_send)r���r ���r ���r����handle_write����s����zasync_chat.handle_writec�������������C���s���|�j����d�S�)N)�close)r���r ���r ���r����handle_close����s����zasync_chat.handle_closec�������������C���s|���t�|tttf�stdt|���|�j}t|�|krdx>tdt|�|�D�]}|�j j ||||�����qBW�n|�j j |��|�j���d�S�)Nz#data argument must be byte-ish (%r)r���)r���r���� bytearray� memoryview� TypeError�type�ac_out_buffer_sizer(����ranger���r���r.���)r���r���Zsabs�ir ���r ���r����push����s���� zasync_chat.pushc�������������C���s���|�j�j|��|�j���d�S�)N)r���r���r.���)r���Zproducerr ���r ���r����push_with_producer����s����zasync_chat.push_with_producerc�������������C���s���dS�)z4predicate for inclusion in the readable for select()r"���r ���)r���r ���r ���r����readable����s����zasync_chat.readablec�������������C���s���|�j�p|�j�S�)z4predicate for inclusion in the writable for select())r���� connected)r���r ���r ���r����writable����s����zasync_chat.writablec�������������C���s���|�j�jd��dS�)zAautomatically close this channel once the outgoing queue is emptyN)r���r���)r���r ���r ���r����close_when_done����s����zasync_chat.close_when_donec�������������C���s���x|�j�o|�j�r|�j�d�}|s<|�j�d=�|d�kr<|�j���d�S�|�j}y|d�|��}W�n8�tk r����|j��}|r||�j�j|��n|�j�d=�wY�nX�t|t�r�|�j r�t ||�j�}y|�j|�}W�n�t k r����|�j���d�S�X�|�r|t|�k�s�|t|�k��r||d���|�j�d<�n|�j�d=�d�S�W�d�S�)Nr���)r���r<���r1���r6���r4����more� appendleftr���r���r���r���r����sendr&���r'���r(���)r����firstZobsr���Znum_sentr ���r ���r���r.�������s8���� zasync_chat.initiate_sendc�������������C���s ���d|�_�|�jd�d��=�|�jj���d�S�)Nr���)r���r���r����clear)r���r ���r ���r����discard_buffers��s����zasync_chat.discard_buffers)NN)�__name__� __module__�__qualname__�__doc__r$���r6���r���r���r ���r���r���r���r���r ���r!���r-���r/���r1���r9���r:���r;���r=���r>���r.���rD���r ���r ���r ���r���r���4���s,��� H(r���c���������������@���s���e�Zd�Zddd�Zdd��ZdS�)�simple_producer����c�������������C���s���||�_�||�_d�S�)N)r����buffer_size)r���r���rK���r ���r ���r���r �����s����zsimple_producer.__init__c�������������C���sJ���t�|�j�|�jkr6|�jd�|�j��}|�j|�jd���|�_|S�|�j}d|�_|S�d�S�)Nr���)r(���r���rK���)r����resultr ���r ���r���r?�����s����zsimple_producer.moreN)rJ���)rE���rF���rG���r ���r?���r ���r ���r ���r���rI�����s��� rI���c�������������C���s6���t�|�d�}x$|r0|�j|d�|����r0|d8�}qW�|S�)Nr"���)r(����endswith)ZhaystackZneedle�lr ���r ���r���r*���/��s����r*���)rH���r����collectionsr���r ���r���rI���r*���r ���r ���r ���r����<module>/���s����\