HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/lib/python3.9/site-packages/cockpit/__pycache__/transports.cpython-39.opt-1.pyc
a

���e�C�@s*dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZmZmZmZmZmZmZmZddlmZmZej�d�Zdd�ZdZe�e�Z d	Z!Gd
d�dej"�Z#Gdd
�d
ej$�Z%Gdd�d�Z&Gdd�de#ej'�Z'Gdd�de#�Z(Gdd�d�Z)dS)zKBi-directional asyncio.Transport implementations based on file descriptors.�N)�Any�ClassVar�Deque�Dict�List�Optional�Sequence�Tuple�)�
JsonObject�get_intz	libc.so.6cGstj|�dkrtd��dS)Nrzprctl() failed)�libc6�prctl�OSError)�args�r�6/usr/lib/python3.9/site-packages/cockpit/transports.pyr'sric	seZdZUdZeeed<ejed<ej	ed<e
eeed<eed<eed<e
ed<e
ed	<e
ed
<dZe
ed<dCejej	eee
eeefd��fdd�
Zdd�dd�Ze
d�dd�Zdd�dd�Zdd�dd�Zdd�dd�Zdd�dd�ZdDe
edd�d d!�Ze
d�d"d#�Zdd�d$d%�Zed�d&d'�Zeeefd�d(d)�ZdEe
ee
edd*�d+d,�Z dd�d-d.�Z!dd�d/d0�Z"dd�d1d2�Z#edd3�d4d5�Z$edd3�d6d7�Z%dd�d8d9�Z&ej'd�d:d;�Z(e
d�d<d=�Z)ej'dd>�d?d@�Z*dd�dAdB�Z+�Z,S)F�
_Transporti�
BLOCK_SIZE�_loop�	_protocol�_queue�_in_fd�_out_fd�_closing�_is_reading�_eofF�_eio_is_eof���N)�loop�protocol�in_fd�out_fd�extracs�t��|�||_||_t�d||||�d|_d|_d|_d|_	||_
||_t�
|d�||krnt�
|d�|j�|�|��dS)Nz/Created transport %s for protocol %s, fds %d %dF)�super�__init__rr�logger�debugrrrrrr�os�set_blockingZconnection_made�resume_reading)�selfrr r!r"r#��	__class__rrr%Bsz_Transport.__init__��returnc
Cs�t�d||j|j�zt�|jtj�}Wnfty<YdSt	y�}z<|j
rb|jtjkrbd}n|�
|�WYd}~dSWYd}~n
d}~00|dkr�t�dt|��|j�|�n(t�d�|��|j��}|s�|��dS)NzRead ready on %s %s %d�z  read %d bytesz	  got EOF)r&r'rrr(�readrr�BlockingIOErrorrr�errnoZEIO�abort�lenZ
data_received�
_close_readerZeof_received�close)r+�data�excZ	keep_openrrr�_read_ready]s$
$

z_Transport._read_readycCs|jS�N)r�r+rrr�
is_readingvsz_Transport.is_readingcCs|��d|_dS�Nr)�
pause_readingrr<rrrr6ysz_Transport._close_readercCs|jr|j�|j�d|_dS�NF)rr�
remove_readerrr<rrrr?}sz_Transport.pause_readingcCs,|js(|jdkr(|j�|j|j�d|_dS)NrT)rrr�
add_readerr:r<rrrr*�sz_Transport.resume_readingcCsdSr;rr<rrr�_close�sz_Transport._close)r9r/cCs.d|_|��|��|j�|�|��dS�NT)rr6�_remove_write_queuerZconnection_lostrC)r+r9rrrr4�s
z_Transport.abortcCst�dSr;��NotImplementedErrorr<rrr�
can_write_eof�sz_Transport.can_write_eofcCsd|_|jdur|��dSrD)rr�_write_eof_nowr<rrr�	write_eof�s
z_Transport.write_eofcCs"|jdurdStdd�|jD��S)Nrcss|]}t|�VqdSr;)r5)�.0�blockrrr�	<genexpr>�r0z3_Transport.get_write_buffer_size.<locals>.<genexpr>)r�sumr<rrr�get_write_buffer_size�s
z _Transport.get_write_buffer_sizecCsdS)N)rrrr<rrr�get_write_buffer_limits�sz"_Transport.get_write_buffer_limits)�high�lowr/cCsdSr;r)r+rQrRrrr�set_write_buffer_limits�sz"_Transport.set_write_buffer_limitscCst�dSr;rFr<rrrrI�sz_Transport._write_eof_nowc
Cs�zt�|j|j�}WnDty*d}Yn0tyX}z|�|�WYd}~dSd}~00|r�|j��}t|�|kr�|j�	||d��q�|t|�8}qZ|js�|�
�|jr�|��|j
r�|��dS�Nr)r(�writevrrr2rr4�popleftr5�
appendleftrErrIr)r+�n_bytesr9rLrrr�_write_ready�s&

z_Transport._write_readycCs,|jdur(|j��|j�|j�d|_dSr;)rrZresume_writingrZ
remove_writerrr<rrrrE�s

z_Transport._remove_write_queue)r8r/cCs.|j�|j|j�t�|f�|_|j��dSr;)	rZ
add_writerrrY�collections�dequerrZ
pause_writing�r+r8rrr�_create_write_queue�sz_Transport._create_write_queuec
Cs�|jdurJ|j�|�t|j�tkrFd�|j�}|j��|j�|�dSzt�|j|�}WnDt	yrd}Yn0t
y�}z|�|�WYd}~dSd}~00|t|�kr�|�||d��dS)Nr0r)
r�appendr5�IOV_MAX�join�clearr(�writerr2rr4r])r+r8Zall_datarXr9rrrrb�s 


z_Transport.writecCs2|jr
dSd|_|��|jdur&dS|��dSrD)rr6rr4r<rrrr7�s
z_Transport.closecCs|jSr;)rr<rrr�get_protocol�sz_Transport.get_protocolcCs|jSr;)rr<rrr�
is_closing�sz_Transport.is_closing)r r/cCst�dSr;rF)r+r rrr�set_protocol�sz_Transport.set_protocolcCs|��dSr;)rCr<rrr�__del__sz_Transport.__del__)rrN)N)NN)-�__name__�
__module__�__qualname__rr�int�__annotations__�asyncio�AbstractEventLoop�Protocolrr�bytes�boolrr�str�objectr%r:r=r6r?r*rC�	Exceptionr4rHrJrOr	rPrSrIrYrEr]rbr7ZBaseProtocolrcrdrerf�
__classcell__rrr,rr3sP


��
rc@seZdZdZdd�dd�ZdS)�SubprocessProtocolzBAn extension to asyncio.Protocol for use with SubprocessTransport.Nr.cCst�dS)z"Called when subprocess has exited.NrFr<rrr�process_exitedsz!SubprocessProtocol.process_exited)rgrhri�__doc__rvrrrrrusruc@seZdZed�dd�ZdS)�
WindowSize)�valuecCst|d�|_t|d�|_dS)N�rows�cols)rrzr{)r+ryrrrr%szWindowSize.__init__N)rgrhrirr%rrrrrx
srxcsneZdZUdZdZeeed<dZeeed<dZ	eded<eded<e
ejd	�d
d��Z
e
ejejd�d
d��Zdd�eed�dd�Zeedd�dd�Zddd�ejeeeeeeed��fdd�Zedd�dd�Zed	�dd�Zdd	�d d!�Zed	�d"d#�Zeed	�d$d%�Zeejd&�d'd(�Ze j!dd)�d*d+�Z"dd	�d,d-�Z#dd	�d.d/�Z$dd	�d0d1�Z%�Z&S)2�SubprocessTransporta�A bi-directional transport speaking with stdin/out of a subprocess.

    Note: this is not really a normal SubprocessTransport.  Although it
    implements the entire API of asyncio.SubprocessTransport, it is not
    designed to be used with asyncio.SubprocessProtocol objects.  Instead, it
    pair with normal Protocol objects which also implement the
    SubprocessProtocol defined in this module (which only has a
    process_exited() method).  Whatever the protocol writes is sent to stdin,
    and whatever comes from stdout is given to the Protocol via the
    .data_received() function.

    If stderr is configured as a pipe, the transport will separately collect
    data from it, making it available via the .get_stderr() method.
    N�_returncode�_pty_fdzsubprocess.Popen[bytes]�_process�Spooler�_stderrr.c	Cs@z t�t�t��d��t��WSttfy6Yn0t��SrT)	r(r7�
pidfd_open�getpidrlZPidfdChildWatcher�AttributeErrorrZSafeChildWatcherrrrr�_create_watcher)s
z#SubprocessTransport._create_watcher)rr/cCs:d}t||d�}|dur6t��}|�|�t|||�|S)NZ!_cockpit_transports_child_watcher)�getattrr|r�Zattach_loop�setattr)rZquarkZwatcherrrr�_get_watcher3s
z SubprocessTransport._get_watcherF��reset�r�r/cCs(|jdur |jj|d�jdd�SdSdS)Nr��replace)�errors�)r��get�decode)r+r�rrr�
get_stderr?s
zSubprocessTransport.get_stderr)�pid�coder/cCs(||_t�d|j�|js$|j��dS)NzProcess exited with status %d)r}r&r'rrrv)r+r�r�rrr�_exitedEs
zSubprocessTransport._exited)�pty�window)rr rr�r��kwargscs�fdd�}�rvt��\|_}|dur0|�|�||d<tj|f|||dd�|��|_t�|�|j|j}	}
d|_n8tj|ftj	tj	|d�|��|_|jj
��}	|jj��}
|jj
dur�t||jj
���|_nd|_t��|||	|
�|�|��|jj|j�dS)Ncs$tttj��r t�dtjd�dSrT)r�
SET_PDEATHSIG�signal�SIGTERM�fcntl�ioctl�termiosZ	TIOCSCTTYr�r�rr�
preexec_fnasz0SubprocessTransport.__init__.<locals>.preexec_fn�stderrT)�stdin�stdoutr�Zstart_new_session)r�r�r�)r(�openptyr~�set_window_size�
subprocess�Popenrr7r�PIPEr��filenor�r�r�r�r$r%r�Zadd_child_handlerr�r�)r+rr rr�r�r�r�Z
session_fdr!r"r,r�rr%Ws6

��
��zSubprocessTransport.__init__)�sizer/c	Cs$t�|jtjt�d|j|j��dS)NZ2H4x)	r�r�r~r�Z
TIOCSWINSZ�struct�packrzr{)r+r�rrrr��sz#SubprocessTransport.set_window_sizecCs|jjduSr;)rr�r<rrrrH�sz!SubprocessTransport.can_write_eofcCs|jj��d|_dSr>)rr�r7rr<rrrrI�sz"SubprocessTransport._write_eof_nowcCs|jjSr;)rr�r<rrr�get_pid�szSubprocessTransport.get_pidcCs|jSr;)r}r<rrr�get_returncode�sz"SubprocessTransport.get_returncode)�fdr/cCst�dSr;rF)r+r�rrr�get_pipe_transport�sz&SubprocessTransport.get_pipe_transport)�sigr/cCsp|jdur t�d||jj�dSz&t�|jj|�t�d||jj�Wn$tyjt�d||jj�Yn0dS)Nz3won't attempt %s to process %i.  It exited already.zsent %s to process %iz3can't send %s to process %i.  It's exited just now.)r}r&r'rr�r(�kill�ProcessLookupError)r+r�rrr�send_signal�s
zSubprocessTransport.send_signalcCs|�tj�dSr;)r�r�r�r<rrr�	terminate�szSubprocessTransport.terminatecCs|�tj�dSr;)r�r��SIGKILLr<rrrr��szSubprocessTransport.killcCsz|jdurt�|j�d|_|jdurv|jjdurF|jj��d|j_z|��Wn"tytt�d|jj	�Yn0dS)Nzcan't kill %i due to EPERM)
r~r(r7rr�r��PermissionErrorr&r'r�r<rrrrC�s

zSubprocessTransport._close)'rgrhrirwr}rrjrkr~r�staticmethodrlZAbstractChildWatcherr�rmr�rprqr�r�rurrxrr%r�rHrIr�r��	Transportr�r�ZSignalsr�r�r�rCrtrrr,rr|s>
	��/r|csNeZdZdZd
ejejeed��fdd�
Ze	d�dd	�Z
d
d�dd�Z�ZS)�StdioTransportz�A bi-directional transport that corresponds to stdin/out.

    Can talk to just about anything:
        - files
        - pipes
        - character devices (including terminals)
        - sockets
    rr
)rr r�r�cst��||||�dSr;)r$r%)r+rr r�r�r,rrr%�szStdioTransport.__init__r.cCsdSr@rr<rrrrH�szStdioTransport.can_write_eofNcCstd��dS)NzCan't write EOF to stdout)�RuntimeErrorr<rrrrI�szStdioTransport._write_eof_now)rr
)
rgrhrirwrlrmrnrjr%rprHrIrtrrr,rr��s	r�c@s�eZdZUdZejed<eed<ee	ed<ejed�dd�Z
dd	�d
d�Zed	�dd
�Z
dd�ee	d�dd�Zdd	�dd�Zdd	�dd�ZdS)r�z�Consumes data from an fd, storing it in a buffer.

    This makes a copy of the fd, so you don't have to worry about holding it
    open.
    r�_fd�	_contents)rr�cCs@||_d|_g|_t�|�|_t�|jd�|�|j|j�dS)NrF)rr�r�r(�dupr)rBr:)r+rr�rrrr%�szSpooler.__init__Nr.cCs^zt�|jd�}Wn(ty&YdSty:d}Yn0|dkrR|j�|�n|��dS)Ni r0)r(r1r�r2rr�r^r7r\rrrr:�s
zSpooler._read_readycCs,|jdkrdSt�|jgggd�gggfkS)NrFr)r��selectr<rrr�	_is_readys
zSpooler._is_readyFr�r�cCs,|��r|��qd�|j�}|r(g|_|S)Nr0)r�r:r`r�)r+r��resultrrrr�s
zSpooler.getcCs.|jdkr*|j�|j�t�|j�d|_dSr>)r�rrAr(r7r<rrrr7s
z
Spooler.closecCs|��dSr;)r7r<rrrrfszSpooler.__del__)rgrhrirwrlrmrkrjrror%r:rpr�r�r7rfrrrrr��s


	r�)*rwrlrZZctypesr3r�Zloggingr(r�r�r�r�r��typingrrrrrrrr	ZjsonutilrrZcdllZLoadLibraryr
rr�Z	getLoggerrgr&r_r�rrnrurxr|r�r�rrrr�<module>s6(
T9