????

Your IP : 216.73.217.84


Current Path : /proc/self/root/lib/python3.9/site-packages/pycriu/__pycache__/
Upload File :
Current File : //proc/self/root/lib/python3.9/site-packages/pycriu/__pycache__/criu.cpython-39.opt-1.pyc

a

?9j�"�@s�ddlZddlZddlZddlZddlZddlmZdZGdd�d�Z	Gdd�de	�Z
Gdd�de	�ZGd	d
�d
e	�ZGdd�de
�ZGd
d�de�ZGdd�de�ZGdd�d�ZdS)�Nz./criu_service.socketc@s8eZdZdZdZdZdZdZdZdZ	dd�Z
dd	�ZdS)
�
_criu_commz/
    Base class for communication classes.
    r��NcCsdS)z�
        Connect to criu and return socket object.
        daemon -- is for whether or not criu should daemonize if executing criu from binary(comm_bin).
        N���self�daemonrr�//usr/lib/python3.9/site-packages/pycriu/criu.py�connectsz_criu_comm.connectcCsdS)z'
        Disconnect from criu.
        Nr�rrrr	�
disconnectsz_criu_comm.disconnect)�__name__�
__module__�__qualname__�__doc__�COMM_SK�COMM_FD�COMM_BIN�	comm_type�comm�skr
rrrrr	r
src@s(eZdZdZdd�Zdd�Zdd�ZdS)	�
_criu_comm_skz.
    Communication class for unix socket.
    cCs|j|_||_dS�N)rrr)rZsk_pathrrr	�__init__+sz_criu_comm_sk.__init__cCs^t�tjtj�|_z|j�|j�Wn2ty>td��YntyVtd��Yn0|jS)NzSocket file not found.zService not running.)�socket�AF_UNIX�SOCK_SEQPACKETrr
r�FileNotFoundError�ConnectionRefusedErrorrrrr	r
/sz_criu_comm_sk.connectcCs|j��dSr�r�closerrrr	r<sz_criu_comm_sk.disconnectN�r
rrrrr
rrrrr	r&s
rc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�
_criu_comm_fdz2
    Communication class for file descriptor.
    cCs|j|_||_dSr)rrr�r�fdrrr	rEsz_criu_comm_fd.__init__cCst�|jtjtj�|_|jSr)rZfromfdrrrrrrrr	r
Is�z_criu_comm_fd.connectcCs|j��dSrrrrrr	rOsz_criu_comm_fd.disconnectNr!rrrr	r"@sr"c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_criu_comm_binz)
    Communication class for binary.
    cCs|j|_||_d|_d|_dSr)rrr�swrkr)rZbin_pathrrr	rXsz_criu_comm_bin.__init__cst�tjtj��t��dtj�}t��dtj|tjB�t��dtj�}t��dtj|tj@�|�_t	�
�}|dkrƇ�fdd�}|r�t	�
�}|dkr�t	��|�q�t	�d�q�|�n|r�t	�
|d��d��t�d�d�d��d�_�d�_�jS)Nrrcsht�d�t�d�t�d��d�t�dt����t��j�jdd�d��g�t�	d�dS)Nrrr�ir&z%d)
�osr �send�struct�pack�getpid�execvpr�fileno�_exitr�Zcssrrr	�	exec_criuls


��z)_criu_comm_bin.connect.<locals>.exec_criur'�)rZ
socketpairrr�fcntlZF_GETFDZF_SETFDZ
FD_CLOEXECrr(�fork�setsidr/�waitpidr r*�unpack�recvr&r)rr�flags�pr1rr0r	r
^s,
z_criu_comm_bin.connectcCs"|j��|jst�|jd�dS)Nr)rr rr(r6r&rrrr	r�s
z_criu_comm_bin.disconnectNr!rrrr	r%Ss0r%c@s eZdZdZdZdZdd�ZdS)�
CRIUExceptionz?
    Exception class for handling and storing criu errors.
    NcCs|jSr)�_strrrrr	�__str__�szCRIUException.__str__)r
rrr�typr<r=rrrr	r;�sr;c@seZdZdZdd�ZdS)�CRIUExceptionInternalzC
    Exception class for handling and storing internal errors.
    cCs"||_dtj�|j�|f|_dS)Nz!%s failed with internal error: %s)r>�rpc�
criu_req_type�Namer<)rr>�srrr	r�s�zCRIUExceptionInternal.__init__N)r
rrrrrrrr	r?�sr?c@s eZdZdZdd�Zdd�ZdS)�CRIUExceptionExternalzC
    Exception class for handling and storing criu RPC errors.
    cCs ||_||_||_|��|_dSr)r>�resp_typ�errno�_gen_error_strr<)rZreq_typrErFrrr	r�szCRIUExceptionExternal.__init__cCs�dtj�|j�f}|j|jkr0|d|jf7}|d|jf7}|jtjkrV|d7}nL|jtjkrx|jtjkrx|d7}n*|jtj	kr�|jtj
kr�|d7}n|d7}|S)Nz%s failed: zUnexpected response type %d: zError(%d): zBad optionszNo process with such pidz)Process with requested pid already existsZUnknown)r@rArBr>rErFZEBADRQC�DUMPZESRCH�RESTOREZEEXIST)rrCrrr	rG�s


z$CRIUExceptionExternal._gen_error_strN)r
rrrrrGrrrr	rD�srDc@steZdZdZdZdZdd�Zefdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�criuz 
    Call criu through RPC.
    NcCs"|�d�tjdd�|_d|_dS)NrJ���)Z
images_dir_fd)�
use_binaryr@Z	criu_opts�optsrrrrr	r�s
z
criu.__init__cCst|�|_dS)zZ
        Access criu using unix socket which that belongs to criu service daemon.
        N)r�_comm)rZsk_namerrr	�use_sk�szcriu.use_skcCst|�|_dS)z0
        Access criu using provided fd.
        N)r"rNr#rrr	�use_fd�szcriu.use_fdcCst|�|_dS)zO
        Access criu by execing it using provided path to criu binary.
        N)r%rN)rZbin_namerrr	rL�szcriu.use_binaryc
Cs�d}|jtjkr |j�d�s d}zx|js6|j�|�}n|j}|jrH||_|�	|�
��|�t|�dt
jt
jB���}|js�|j��t��}|�|�Wn4ty�}zt|jt|���WYd}~n
d}~00|S)zA
        As simple as send request and receive response.
        F�pidTrN)�typer@rHrMZHasFieldrrNr
�	keep_openr)ZSerializeToStringr8�lenrZ	MSG_TRUNCZMSG_PEEKrZ	criu_respZParseFromString�	Exceptionr?�str)r�reqrrC�buf�resp�errr	�_send_req_and_recv_resp�s$
&zcriu._send_req_and_recv_respcCsDt��}tj|_|j�|j�|�|�}|js@t|j|j|j	��dS)zB
        Checks whether the kernel support is up-to-date.
        N)
r@�criu_reqZCHECKrRrM�	MergeFromr[�successrD�cr_errno�rrWrYrrr	�checks
z
criu.checkcCsFt��}tj|_|j�|j�|�|�}|js@t|j|j|j	��|j
S�zC
        Checkpoint a process/tree identified by opts.pid.
        )r@r\rHrRrMr]r[r^rDr_�dumpr`rrr	rcs
z	criu.dumpcCsFt��}tj|_|j�|j�|�|�}|js@t|j|j|j	��|j
Srb)r@r\ZPRE_DUMPrRrMr]r[r^rDr_rcr`rrr	�pre_dump+s
z
criu.pre_dumpcCsFt��}tj|_|j�|j�|�|�}|js@t|j|j|j	��|j
S)z)
        Restore a process/tree.
        )r@r\rIrRrMr]r[r^rDr_�restorer`rrr	re:s
zcriu.restorecCsLt��}tj|_|j�|j�d|_|�|�}|jsFt	|j|j|j
��|jS)NT)r@r\ZPAGE_SERVER_CHLDrRrMr]rSr[r^rDr_Zpsr`rrr	�page_server_chldIs
zcriu.page_server_chldcCs>t��}tj|_||_|�|�}|js8t|j|j|j��|j	Sr)
r@r\ZWAIT_PIDrRrQr[r^rDr_�status)rrQrWrYrrr	�wait_pidVs
z
criu.wait_pid)r
rrrrMrNr�CR_DEFAULT_SERVICE_ADDRESSrOrPrLr[rarcrdrerfrhrrrr	rJ�s#

rJ)rrFr3r(r*Zpycriu.rpc_pb2Zrpc_pb2r@rirrr"r%rUr;r?rDrJrrrr	�<module>sA"