Your IP : 18.118.144.239
�
c��f2- � � � d Z ddlZddlmZ ddlmZ dZ eeed�� � G d� d ej � � Z G d
� d� � Z
d� 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)�deque)�_deprecatedznThe {name} module is deprecated and will be removed in Python {remove}. The recommended replacement is asyncio)� � )�removec � � e Zd ZdZdZdZdZdZdd�Zd� Z d� Z
d � Zd
� Zd� Z
d� Zd
� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� 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 � � d| _ g | _ t � � | _ t j � | ||� � d S �N� )�ac_in_buffer�incomingr �
producer_fifo�asyncore�
dispatcher�__init__)�self�sock�maps �//opt/alt/python311/lib64/python3.11/asynchat.pyr zasync_chat.__init__J sB � ����
��
� #�W�W�����$�$�T�4��5�5�5�5�5r c � � t d� � ��Nzmust be implemented in subclass��NotImplementedError�r �datas r �collect_incoming_dataz async_chat.collect_incoming_dataX � � �!�"C�D�D�Dr c �: � | j � |� � d S �N)r �appendr s r �_collect_incoming_dataz!async_chat._collect_incoming_data[ s � ��
���T�"�"�"�"�"r c �N � d� | j � � }| j d d �= |S r )�joinr )r �ds r � _get_datazasync_chat._get_data^ s( � ��H�H�T�]�#�#���M�!�!�!���r c � � t d� � �r r �r s r �found_terminatorzasync_chat.found_terminatorc r r c �� � t |t � � r| j rt || j � � }n*t |t
� � r|dk rt
d� � �|| _ 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 �terms r �set_terminatorzasync_chat.set_terminatorf sj � �
�d�C� � � N�T�%6� N���t�}�-�-�D�D�
��c�
"�
"� N�t�a�x�x��L�M�M�M�����r c � � | j S r )r2 r( s r �get_terminatorzasync_chat.get_terminatorq s
� ���r c � � | � | j � � }n1# t $ r Y d S t $ r | � � � Y d S w xY wt |t � � r!| j rt t | j � � }| j
|z | _
| j
�r�t | j
� � }| � � � }|s#| �
| j
� � d| _
�n�t |t � � r�|}||k r2| �
| j
� � d| _
| j |z
| _ �nM| �
| j
d |� � � | j
|d � | _
d| _ | � � � n�t |� � }| j
� |� � }|dk rT|dk r"| �
| j
d |� � � | j
||z d � | _
| � � � nxt% | j
|� � }|r@||k r8| �
| j
d | � � � | j
| d � | _
d S | �
| j
� � d| _
| j
���d S d S )Nr r ���)�recv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr+ r, r- r. r/ r
�lenr6 r r0 r2 r) �find�find_prefix_at_end)r r �lbr2 �n�terminator_len�indexs r �handle_readzasync_chat.handle_ready s� � � ��9�9�T�3�4�4�D�D��� � � ��F�F�� � � ��������F�F� ���� �d�C� � � -�T�%6� -���d�m�,�,�D� �-��4��� �� 3 0��T�&�'�'�B��,�,�.�.�J�� 0
0��*�*�4�+<�=�=�=�$'��!�!��J��,�,� ,
0�����6�6��.�.�t�/@�A�A�A�(+�D�%�&*�o��&:�D�O�O��.�.�t�/@��!��/D�E�E�E�(,�(9�!�"�"�(=�D�%�&'�D�O��)�)�+�+�+�+� "%�Z�����)�.�.�z�:�:���B�;�;��q�y�y� �2�2�4�3D�V�e�V�3L�M�M�M�(,�(9�%��:N�:O�:O�(P�D�%� �)�)�+�+�+�+� /�t�/@�*�M�M�E�� 0� �B�;�;� �6�6�t�7H��5�&��7Q�R�R�R�04�0A�5�&�'�'�0J�D�-��� �2�2�4�3D�E�E�E�,/��)�g �� 3 0� 3 0� 3 0� 3 0� 3 0s � �
A�A�
Ac �. � | � � � d S r )�
initiate_sendr( s r �handle_writezasync_chat.handle_write� s � ��������r c �. � | � � � d S r )�closer( s r �handle_closezasync_chat.handle_close� s � ��
�
�����r c � � t |t t t f� � st dt |� � � � �| j }t |� � |k rGt dt |� � |� � D ]'}| j �
||||z � � � �(n| j �
|� � | � � � d S )Nz#data argument must be byte-ish (%r)r )r+ r. � bytearray�
memoryview� TypeError�type�ac_out_buffer_sizer>