ó
    ë‰h!  ã                   óä   • S SK r S SKrS SKrS SKrS SKrS SKJr   " S S5      r " S S\5      r	 " S S\5      r
 " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S5      rg)é    Nc                   ó<   • \ rS rSrSrSrSrSrSrSr	Sr
S rS rS	rg)
Ú
_criu_commé   z'
Base class for communication classes.
r   é   é   Nc                 ó   • g)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Údaemons     Ú-/usr/lib/python3/dist-packages/pycriu/criu.pyÚconnectÚ_criu_comm.connect   s   € ð
 	ó    c                 ó   • g)z
Disconnect from criu.
Nr	   ©r   s    r   Ú
disconnectÚ_criu_comm.disconnect   s   € ð 	r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚCOMM_SKÚCOMM_FDÚCOMM_BINÚ	comm_typeÚcommÚskr   r   Ú__static_attributes__r	   r   r   r   r      s1   † ñð €GØ€GØ€HØ€IØ€DØ	€Bòõr   r   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú_criu_comm_ské%   z&
Communication class for unix socket.
c                 ó2   • U R                   U l        Xl        g ©N)r   r   r   )r   Úsk_paths     r   Ú__init__Ú_criu_comm_sk.__init__*   s   € ØŸ™ˆŒØ�	r   c                 óÔ   • [         R                   " [         R                  [         R                  5      U l        U R                  R	                  U R
                  5        U R                  $ r%   )ÚsocketÚAF_UNIXÚSOCK_SEQPACKETr   r   r   r
   s     r   r   Ú_criu_comm_sk.connect.   s;   € Ü—-’-¤§¡´×0EÑ0EÓFˆŒØ�‰�‰˜Ÿ	™	Ô"à�w‰wˆr   c                 ó8   • U R                   R                  5         g r%   ©r   Úcloser   s    r   r   Ú_criu_comm_sk.disconnect4   ó   € Ø�‰�‰�r   ©r   r   r   N©	r   r   r   r   r   r'   r   r   r    r	   r   r   r"   r"   %   s   † ñòòõr   r"   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú_criu_comm_fdé8   z*
Communication class for file descriptor.
c                 ó2   • U R                   U l        Xl        g r%   )r   r   r   ©r   Úfds     r   r'   Ú_criu_comm_fd.__init__=   s   € ØŸ™ˆŒØ�	r   c                 ó    • [         R                  " U R                  [         R                  [         R                  5      U l        U R
                  $ r%   )r*   Úfromfdr   r+   r,   r   r
   s     r   r   Ú_criu_comm_fd.connectA   s2   € Ü—-’- §	¡	¬6¯>©>Ü &× 5Ñ 5ó7ˆŒð �w‰wˆr   c                 ó8   • U R                   R                  5         g r%   r/   r   s    r   r   Ú_criu_comm_fd.disconnectG   r2   r   r3   Nr4   r	   r   r   r6   r6   8   s   † ñòòõr   r6   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú_criu_comm_binéK   z!
Communication class for binary.
c                 óN   • U R                   U l        Xl        S U l        S U l        g r%   )r   r   r   Úswrkr   )r   Úbin_paths     r   r'   Ú_criu_comm_bin.__init__P   s    € ØŸ™ˆŒØŒ	ØˆŒ	Øˆ�r   c                 óô  ^ ^• [         R                  " [         R                  [         R                  5      m[        R                  " TS   [        R
                  5      n[        R                  " TS   [        R                  U[        R                  -  5        [        R                  " TS   [        R
                  5      n[        R                  " TS   [        R                  U[        R                  ) -  5        UT l        [        R                  " 5       nUS:X  ae  UU 4S jnU(       aO  [        R                  " 5       nUS:X  a  [        R                  " 5         U" 5         O=[        R                  " S5        O&U" 5         OU(       a  [        R                  " US5        TS   R                  5         [        R                   " STS   R#                  S5      5      S   T l        TS   T l        T R&                  $ )Nr   r   c                  ó²  >• [         R                  " S5        [         R                  " S5        [         R                  " S5        T S   R                  [        R                  " S[         R
                  " 5       5      5        [         R                  " TR                  TR                  SST S   R                  5       -  /5        [         R                  " S5        g )Nr   r   r   ÚirE   z%d)
Úosr0   ÚsendÚstructÚpackÚgetpidÚexecvr   ÚfilenoÚ_exit)Úcssr   s   €€r   Ú	exec_criuÚ)_criu_comm_bin.connect.<locals>.exec_criud   s„   ø€ Ü—’˜”Ü—’˜”Ü—’˜”à�A‘—‘œFŸKšK¨¬R¯YªY«[Ó9Ô:Ü—’˜Ÿ™ØŸ)™) VØ  Q¡§¡£Ñ0ð2ô3ô —’˜•r   rJ   é   )r*   Ú
socketpairr+   r,   ÚfcntlÚF_GETFDÚF_SETFDÚ
FD_CLOEXECr   rK   ÚforkÚsetsidrR   Úwaitpidr0   rM   ÚunpackÚrecvrE   r   )r   r   ÚflagsÚprT   rS   s   `    @r   r   Ú_criu_comm_bin.connectV   sB  ù€ ä×Ò¤§¡´×0EÑ0EÓFˆÜ—’˜C ™F¤E§M¡MÓ2ˆÜ�Š�C˜‘FœEŸM™M¨5´5×3CÑ3CÑ+CÔDÜ—’˜C ™F¤E§M¡MÓ2ˆÜ�Š�C˜‘FœEŸM™M¨5´E×4DÑ4DÐ3DÑ+DÔEàˆŒä�GŠG‹Iˆà�‹6ö	ö ô —G’G“I�à˜“6Ü—I’I”Ká•Kä—H’H˜Q•Ká•æÜ—
’
˜1˜aÔ àˆA‰�‰ŒÜ—M’M # s¨1¡v§{¡{°1£~Ó6°qÑ9ˆŒ	Ø�a‘&ˆŒà�w‰wˆr   c                 óž   • U R                   R                  5         U R                  (       d"  [        R                  " U R
                  S5        g g )Nr   )r   r0   r   rK   r^   rE   r   s    r   r   Ú_criu_comm_bin.disconnect†   s-   € Ø�‰�‰ŒØ�{�{Ü�JŠJ�t—y‘y !Õ$ð r   )r   r   r   r   rE   Nr4   r	   r   r   rB   rB   K   s   † ñòò.õ`%r   rB   c                   ó&   • \ rS rSrSrSrSrS rSrg)ÚCRIUExceptionéŒ   z7
Exception class for handling and storing criu errors.
Nc                 ó   • U R                   $ r%   )Ú_strr   s    r   Ú__str__ÚCRIUException.__str__“   s   € Ø�y‰yÐr   r	   )	r   r   r   r   r   Útyprj   rk   r    r	   r   r   rg   rg   Œ   s   † ñð €CØ€Dõr   rg   c                   ó   • \ rS rSrSrS rSrg)ÚCRIUExceptionInternalé—   z;
Exception class for handling and storing internal errors.
c                 óz   • Xl         [        R                  R                  U R                   5      < SU< 3U l        g )Nz failed with internal error: )rm   ÚrpcÚcriu_req_typeÚNamerj   )r   rm   Úss      r   r'   ÚCRIUExceptionInternal.__init__œ   s*   € ØŒä×Ñ×"Ñ" 4§8¡8Ö,ªað1ˆ�	r   )rj   rm   N)r   r   r   r   r   r'   r    r	   r   r   ro   ro   —   s   † ñõ1r   ro   c                   ó$   • \ rS rSrSrS rS rSrg)ÚCRIUExceptionExternalé¢   z;
Exception class for handling and storing criu RPC errors.
c                 óR   • Xl         X l        X0l        U R                  5       U l        g r%   )rm   Úresp_typÚerrnoÚ_gen_error_strrj   )r   Úreq_typr{   r|   s       r   r'   ÚCRIUExceptionExternal.__init__§   s!   € ØŒØ ŒØŒ
Ø×'Ñ'Ó)ˆ�	r   c                 ó4  • [         R                  R                  U R                  5      < S3nU R                  U R                  :w  a  USU R                  4-  -  nUSU R
                  4-  -  nU R
                  [
        R                  :X  a  US-  nU R                  [         R                  :X  a#  U R
                  [
        R                  :X  a  US-  nU R                  [         R                  :X  a#  U R
                  [
        R                  :X  a  US-  nUS-  nU$ )Nz	 failed: zUnexpected response type %d: zError(%d): zBad optionszNo process with such pidz)Process with requested pid already existsÚUnknown)rr   rs   rt   rm   r{   r|   ÚEBADRQCÚDUMPÚESRCHÚRESTOREÚEEXIST)r   ru   s     r   r}   Ú$CRIUExceptionExternal._gen_error_str­   sÙ   € Ü ×.Ñ.×3Ñ3°D·H±HÖ=Ð@ˆà�8‰8�t—}‘}Ó$ØÐ0°D·M±MÐ3DÑDÑDˆAà	ˆ]˜dŸj™j˜^Ñ+Ñ+ˆà�:‰:œŸ™Ó&Ø�ÑˆAà�8‰8”s—x‘xÓØ�z‰zœUŸ[™[Ó(ØÐ/Ñ/�à�8‰8”s—{‘{Ó"Ø�z‰zœUŸ\™\Ó)ØÐ@Ñ@�à	ˆY‰ˆàˆr   )rj   r|   r{   rm   N)r   r   r   r   r   r'   r}   r    r	   r   r   rx   rx   ¢   s   † ñò*õr   rx   c                   ób   • \ rS rSrSrSrSrS rS rS r	S r
S rS	 rS
 rS rS rS rS rSrg)ÚcriuéÅ   z
Call criu through RPC.
Nc                 óh   • U R                  S5        [        R                  " 5       U l        S U l        g )Nr‰   )Ú
use_binaryrr   Ú	criu_optsÚoptsr   r   s    r   r'   Úcriu.__init__Í   s"   € Ø�‰˜ÔÜ—M’M“OˆŒ	Øˆ�r   c                 ó$   • [        U5      U l        g)zJ
Access criu using unix socket which that belongs to criu service daemon.
N)r"   Ú_comm)r   Úsk_names     r   Úuse_skÚcriu.use_skÒ   s   € ô # 7Ó+ˆ�
r   c                 ó$   • [        U5      U l        g)z 
Access criu using provided fd.
N)r6   r‘   r9   s     r   Úuse_fdÚcriu.use_fdØ   s   € ô # 2Ó&ˆ�
r   c                 ó$   • [        U5      U l        g)z?
Access criu by execing it using provided path to criu binary.
N)rB   r‘   )r   Úbin_names     r   rŒ   Úcriu.use_binaryÞ   s   € ô $ HÓ-ˆ�
r   c           	      ó   • SnUR                   [        R                  :X  a"  UR                  R	                  S5      (       d  Sn U R
                  (       d  U R                  R                  U5      nOU R
                  nUR                  (       a  X0l        UR                  UR                  5       5        UR                  [        UR                  S[        R                  [        R                  -  5      5      5      nUR                  (       d  U R                  R!                  5         [        R"                  " 5       nUR%                  U5        U$ ! [&         a$  n[)        UR                   [+        U5      5      eSnAff = f)z1
As simple as send request and receive response.
FÚpidTr   N)Útyperr   rƒ   rŽ   ÚHasFieldr   r‘   r   Ú	keep_openrL   ÚSerializeToStringr`   Úlenr*   Ú	MSG_TRUNCÚMSG_PEEKr   Ú	criu_respÚParseFromStringÚ	Exceptionro   Ústr)r   Úreqr   ru   ÚbufÚrespÚes          r   Ú_send_req_and_recv_respÚcriu._send_req_and_recv_respä   s  € ð ˆØ�8‰8”s—x‘xÓ¨¯©×(9Ñ(9¸%×(@Ñ(@ØˆFð	:Ø—7—7Ø—J‘J×&Ñ& vÓ.‘à—G‘G�à�}�}Ø”à�F‰F�3×(Ñ(Ó*Ô+à—&‘&œ˜QŸV™V A¤v×'7Ñ'7¼&¿/¹/Ñ'IÓJÓKÓLˆCà—=—=Ø—
‘
×%Ñ%Ô'ä—=’=“?ˆDØ× Ñ  Ô%ð ˆøô ó 	:Ü'¨¯©´#°a³&Ó9Ð9ûð	:ús   ÁD	E Å
E=ÅE8Å8E=c                 óò   • [         R                  " 5       n[         R                  Ul        U R	                  U5      nUR
                  (       d+  [        UR                  UR                  UR                  5      eg)z2
Checks whether the kernel support is up-to-date.
N)rr   Úcriu_reqÚCHECKr�   r¬   Úsuccessrx   Úcr_errno©r   r¨   rª   s      r   ÚcheckÚ
criu.check  sQ   € ô �lŠl‹nˆÜ—9‘9ˆŒà×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKð r   c                 óR  • [         R                  " 5       n[         R                  Ul        UR                  R                  U R                  5        U R                  U5      nUR                  (       d+  [        UR                  UR                  UR                  5      eUR                  $ ©z3
Checkpoint a process/tree identified by opts.pid.
)rr   r¯   rƒ   r�   rŽ   Ú	MergeFromr¬   r±   rx   r²   Údumpr³   s      r   r¹   Ú	criu.dump  sl   € ô �lŠl‹nˆÜ—8‘8ˆŒØ�‰×Ñ˜4Ÿ9™9Ô%à×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKà�y‰yÐr   c                 óR  • [         R                  " 5       n[         R                  Ul        UR                  R                  U R                  5        U R                  U5      nUR                  (       d+  [        UR                  UR                  UR                  5      eUR                  $ r·   )rr   r¯   ÚPRE_DUMPr�   rŽ   r¸   r¬   r±   rx   r²   r¹   r³   s      r   Úpre_dumpÚcriu.pre_dump"  sl   € ô �lŠl‹nˆÜ—<‘<ˆŒØ�‰×Ñ˜4Ÿ9™9Ô%à×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKà�y‰yÐr   c                 óR  • [         R                  " 5       n[         R                  Ul        UR                  R                  U R                  5        U R                  U5      nUR                  (       d+  [        UR                  UR                  UR                  5      eUR                  $ )z
Restore a process/tree.
)rr   r¯   r…   r�   rŽ   r¸   r¬   r±   rx   r²   Úrestorer³   s      r   rÀ   Úcriu.restore1  sl   € ô �lŠl‹nˆÜ—;‘;ˆŒØ�‰×Ñ˜4Ÿ9™9Ô%à×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKà�|‰|Ðr   c                 ó`  • [         R                  " 5       n[         R                  Ul        UR                  R                  U R                  5        SUl        U R                  U5      nUR                  (       d+  [        UR                  UR                  UR                  5      eUR                  $ )NT)rr   r¯   ÚPAGE_SERVER_CHLDr�   rŽ   r¸   rŸ   r¬   r±   rx   r²   Úpsr³   s      r   Úpage_server_chldÚcriu.page_server_chld@  sr   € Ü�lŠl‹nˆÜ×'Ñ'ˆŒØ�‰×Ñ˜4Ÿ9™9Ô%ØˆŒà×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKà�w‰wˆr   c                 ó  • [         R                  " 5       n[         R                  Ul        Xl        U R                  U5      nUR                  (       d+  [        UR                  UR                  UR                  5      eUR                  $ r%   )
rr   r¯   ÚWAIT_PIDr�   rœ   r¬   r±   rx   r²   Ústatus)r   rœ   r¨   rª   s       r   Úwait_pidÚcriu.wait_pidM  sY   € Ü�lŠl‹nˆÜ—<‘<ˆŒØŒà×+Ñ+¨CÓ0ˆà�|�|Ü'¨¯©°$·)±)¸T¿]¹]ÓKÐKà�{‰{Ðr   )r‘   rŽ   r   )r   r   r   r   r   rŽ   r‘   r'   r“   r–   rŒ   r¬   r´   r¹   r½   rÀ   rÅ   rÊ   r    r	   r   r   r‰   r‰   Å   sL   † ñð €Dà€Eòò
,ò'ò.ò!òF
Lòòòòõ
r   r‰   )r*   r|   rX   rK   rM   Úpycriu.rpc_pb2Úrpc_pb2rr   r   r"   r6   rB   r¦   rg   ro   rx   r‰   r	   r   r   Ú<module>rÎ      sy   ðó Û Û Û 	Û å ÷ñ ô2�Jô ô&�Jô ô&>%�Zô >%ôB�Iô ô1˜Mô 1ô ˜Mô  ÷FRò Rr   