OwlCyberSecurity - MANAGER
Edit File: asynchat.cpython-310.opt-1.pyc
o ����S�g�-����������������������@���s^���d�Z�ddlZddlmZ�ddlmZ�ededd��G�dd ��d ej�ZG�d d��d�Z dd ��Z dS�)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)�deque)�warnzlThe asynchat module is deprecated and will be removed in Python 3.12. The recommended replacement is asyncio����)� stacklevelc�������������������@���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��|�_tj�|�||��d�S��N�����)�ac_in_buffer�incomingr���� producer_fifo�asyncore� dispatcher�__init__)�selfZsock�map��r����//opt/alt/python310/lib64/python3.10/asynchat.pyr���K���s���zasync_chat.__init__c�����������������C�������t�d���Nzmust be implemented in subclass��NotImplementedError�r����datar���r���r����collect_incoming_dataY�������z async_chat.collect_incoming_datac�����������������C���s���|�j��|��d�S��N)r ����appendr���r���r���r����_collect_incoming_data\���s���z!async_chat._collect_incoming_datac�����������������C���s���d��|�j�}|�jd�d��=�|S�r���)�joinr ���)r����dr���r���r���� _get_data_���s���zasync_chat._get_datac�����������������C���r���r���r����r���r���r���r����found_terminatord���r���zasync_chat.found_terminatorc�����������������C���sB���t�|t�r|�jrt||�j�}n t�|t�r|dk�rtd��||�_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_terminatorg���s ��� zasync_chat.set_terminatorc�����������������C���s���|�j�S�r���)r*���r!���r���r���r����get_terminatorr���s���zasync_chat.get_terminatorc�����������������C���s���z|���|�j�}W�n�ty���Y�d�S��ty���|�����Y�d�S�w�t|t�r.|�jr.tt|�j �}|�j |�|�_ |�j r�t|�j �}|����}|sL|�� |�j ��d|�_ n�t|t�r�|}||k�rg|�� |�j ��d|�_ |�j|�|�_np|�� |�j d�|����|�j |d���|�_ d|�_|�����nVt|�}|�j �|�}|dkr�|dkr�|�� |�j d�|����|�j ||�d���|�_ |�����n+t|�j |�}|r�||kr�|�� |�j d�|�����|�j |�d���|�_ d�S�|�� |�j ��d|�_ |�j s7d�S�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���Zlbr*����nZterminator_len�indexr���r���r����handle_readz���sV���� �zasync_chat.handle_readc�����������������C�������|������d�S�r���)� initiate_sendr!���r���r���r����handle_write��������zasync_chat.handle_writec�����������������C���r8���r���)�closer!���r���r���r����handle_close����r;���zasync_chat.handle_closec�����������������C���sx���t�|tttf�stdt|���|�j}t|�|kr0tdt|�|�D�]}|�j � ||||�����q n|�j � |��|�����d�S�)Nz#data argument must be byte-ish (%r)r���)r#���r&���� bytearray� memoryview� TypeError�type�ac_out_buffer_sizer2����ranger���r���r9���)r���r���Zsabs�ir���r���r����push����s�����zasync_chat.pushc�����������������C���s���|�j��|��|�����d�S�r���)r���r���r9���)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����readable����s���zasync_chat.readablec�����������������C���s���|�j�p|�j�S�)z4predicate for inclusion in the writable for select())r���� connectedr!���r���r���r����writable����s���zasync_chat.writablec�����������������C���s���|�j��d��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��|�j�r�|�jr�|�j�d�}|s|�j�d=�|d�u�r|�����d�S�|�j}z|d�|��}W�n�ty@���|���}|r:|�j��|��n|�j�d=�Y�q�w�t|t�rO|�j rOt ||�j�}z|��|�}W�n�t yd���|�����Y�d�S�w�|r�|t|�k�ss|t|�k�r~||d���|�j�d<�d�S�|�j�d=�d�S�d�S�d�S�)Nr���)r���rI���r=���rB���r@����more� appendleftr#���r$���r%���r&���r'����sendr0���r1���r2���)r����firstZobsr���Znum_sentr���r���r���r9�������s@��� ����zasync_chat.initiate_sendc�����������������C���s ���d|�_�|�jd�d��=�|�j����d�S�r���)r ���r ���r����clearr!���r���r���r����discard_buffers��s���zasync_chat.discard_buffers)NN)�__name__� __module__�__qualname__�__doc__r.���rB���r%���r'���r���r���r���r ���r"���r+���r,���r7���r:���r=���rE���rF���rH���rJ���rK���r9���rQ���r���r���r���r���r���<���s.���� H(r���c�������������������@���s���e�Zd�Zddd�Zdd��ZdS�)�simple_producer����c�����������������C���s���||�_�||�_d�S�r���)r����buffer_size)r���r���rX���r���r���r���r�����s��� zsimple_producer.__init__c�����������������C���sF���t�|�j�|�jkr|�jd�|�j��}|�j|�jd���|�_|S�|�j}d|�_|S�r���)r2���r���rX���)r����resultr���r���r���rL�����s���zsimple_producer.moreN)rW���)rR���rS���rT���r���rL���r���r���r���r���rV�����s���� rV���c�����������������C���sD���t�|�d�}|r |��|d�|���s |d8�}|r |��|d�|���r|S�)NrG���)r2����endswith)ZhaystackZneedle�lr���r���r���r4���7��s ����r4���)rU���r����collectionsr����warningsr����DeprecationWarningr ���r���rV���r4���r���r���r���r����<module>���s�����\