HEX
Server: LiteSpeed
System: Linux 112.webhostingindonesia.co.id 5.14.0-570.62.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 10:10:59 EST 2025 x86_64
User: iyfwylsv (10313)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/fail2ban/compat/__pycache__/asynchat.cpython-39.opt-2.pyc
a


V)�Iw��@shdZzddlZWney.ddlmZYn0ddlmZGdd�dej�ZGdd	�d	�Zd
d�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�)�asyncore)�dequec@s�eZdZdZdZdZdZdZd(dd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�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()irzlatin-1NcCs(d|_g|_t�|_tj�|||�dS�N�)�ac_in_buffer�incomingr�
producer_fifor�
dispatcher�__init__)�selfZsock�map�r�</usr/lib/python3.9/site-packages/fail2ban/compat/asynchat.pyrFszasync_chat.__init__cCstd��dS�Nzmust be implemented in subclass��NotImplementedError�r
�datarrr�collect_incoming_dataTsz async_chat.collect_incoming_datacCs|j�|�dS�N)r	�appendrrrr�_collect_incoming_dataWsz!async_chat._collect_incoming_datacCsd�|j�}|jdd�=|Sr)�joinr	)r
�drrr�	_get_dataZszasync_chat._get_datacCstd��dSrr�r
rrr�found_terminator_szasync_chat.found_terminatorcCsBt|t�r|jrt||j�}nt|t�r8|dkr8td��||_dS)zdSet the input delimiter.

        Can be a fixed string of any length, an integer, or None.
        rz-the number of received bytes must be positiveN)�
isinstance�str�use_encoding�bytes�encoding�int�
ValueError�
terminator)r
Ztermrrr�set_terminatorbs
zasync_chat.set_terminatorcCs|jSr)r&rrrr�get_terminatormszasync_chat.get_terminatorcCs�z|�|j�}Wn.ty$YdSty>|��YdS0t|t�r\|jr\tt|j	�}|j
||_
|j
�r�t|j
�}|��}|s�|�
|j
�d|_
qht|t��r|}||kr�|�
|j
�d|_
|j||_n2|�
|j
d|��|j
|d�|_
d|_|��qht|�}|j
�|�}|dk�r`|dk�rB|�
|j
d|��|j
||d�|_
|��qht|j
|�}|�r�||k�r�|�
|j
d|��|j
|d�|_
�q�qh|�
|j
�d|_
qhdS)Nrr���)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorrr r!r"r#r�lenr(rr$r&r�find�find_prefix_at_end)r
rZlbr&�nZterminator_len�indexrrr�handle_readusR

	



zasync_chat.handle_readcCs|��dSr)�
initiate_sendrrrr�handle_write�szasync_chat.handle_writecCs|��dSr)�closerrrr�handle_close�szasync_chat.handle_closecCsxt|tttf�stdt|���|j}t|�|kr`tdt|�|�D]}|j	�
||||��q@n|j	�
|�|��dS)Nz#data argument must be byte-ish (%r)r)rr"�	bytearray�
memoryview�	TypeError�type�ac_out_buffer_sizer.�ranger
rr4)r
rZsabs�irrr�push�s�zasync_chat.pushcCs|j�|�|��dSr)r
rr4)r
Zproducerrrr�push_with_producer�szasync_chat.push_with_producercCsdS)z4predicate for inclusion in the readable for select()rrrrrr�readable�szasync_chat.readablecCs|jp|jS)z4predicate for inclusion in the writable for select())r
�	connectedrrrr�writable�szasync_chat.writablecCs|j�d�dS)zAautomatically close this channel once the outgoing queue is emptyN)r
rrrrr�close_when_done�szasync_chat.close_when_donecCs|j�r|j�r|jd}|s:|jd=|dur:|��dS|j}z|d|�}Wn8ty�|��}|rx|j�|�n|jd=YqYn0t|t�r�|j	r�t
||j�}z|�|�}Wnt
y�|��YdS0|�r|t|�ks�|t|�k�r||d�|jd<n|jd=dSdS)Nr)r
rBr7r<r:�more�
appendleftrr r!r"r#�sendr,r-r.)r
�firstZobsrZnum_sentrrrr4�s8

zasync_chat.initiate_sendcCs d|_|jdd�=|j��dSr)rr	r
�clearrrrr�discard_buffersszasync_chat.discard_buffers)NN)�__name__�
__module__�__qualname__�__doc__r*r<r!r#rrrrrr'r(r3r5r7r?r@rArCrDr4rJrrrrr7s,
H(rc@seZdZddd�Zdd�ZdS)�simple_producer�cCs||_||_dSr)r�buffer_size)r
rrQrrrrszsimple_producer.__init__cCsJt|j�|jkr6|jd|j�}|j|jd�|_|S|j}d|_|SdSr)r.rrQ)r
�resultrrrrEszsimple_producer.moreN)rP)rKrLrMrrErrrrrOs
rOcCs0t|�d}|r,|�|d|��s,|d8}q|S)Nr)r.�endswith)ZhaystackZneedle�lrrrr02s
r0)
rNr�ImportError��collectionsrrrrOr0rrrr�<module>s\