ó k°x]c@sŒddlZddlZddlZddlZddlZddlmZddlmZddlmZde eƒkr™ej e_ ej e_ ndZdZd Zd „Zd efd „ƒYZd d`d„ƒYZddad„ƒYZddbd„ƒYZddcd„ƒYZdddd„ƒYZdded„ƒYZddfd„ƒYZddgd„ƒYZddhd„ƒYZi;eejƒd6eejƒd 6eejƒd!6eej ƒd"6eej!ƒd#6eej"ƒd$6eej#ƒd%6eƒd&6eej$ƒd'6eej%ƒd(6eej&eƒƒd)6eej'ƒd*6eƒd+6eej(ƒd,6eej)ƒd-6eej*ƒd.6eej+ƒd/6eej,ƒd06eej-ƒd16eej.ƒd26eej/ƒd36eej0ƒd46eej1ƒd56eej2ƒd66eej3ƒd76eej4ƒd86eej5ƒd96eej6ƒd:6eej7ƒd;6eej8ƒd<6eej9ƒd=6eej:ƒd>6eej;ƒd?6eej<ƒd@6eej=ƒdA6eej>ƒdB6eej?ƒdC6eej@ƒdD6eejAƒdE6eejBƒdF6eejCƒdG6eejDƒdH6eejEƒdI6eejFƒdJ6eejGƒdK6eejHƒdL6eejIƒdM6eejJeƒƒdN6eejJeƒƒdO6eejKeƒƒdP6eejLeƒƒdQ6eejMeƒƒdR6eejNeƒƒdS6eejOƒdT6eejPƒdU6eejQƒdV6eejRƒdW6eejSƒdX6eejTƒdY6ZUdZ„ZVeWeWd[„ZXd\„ZYeWd]„ZZd^„Z[d_„Z\dS(iiÿÿÿÿNi(tmagic(tpb(tpb2dictt encodebytesiiicCs|d|dBdS(Ni((txty((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pytround_up>stMagicExceptioncBseZd„ZRS(cCs ||_dS(N(R(tselfR((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyt__init__Cs(t__name__t __module__R (((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyRBst entry_handlercBsPeZdZdd„Zeed„Zed„Zd„Zd„Z d„Z RS(sp Generic class to handle loading/dumping criu images entries from/to bin format to/from dict(json). cCs||_||_dS(s= Sets payload class and extra handler class. N(tpayloadt extra_handler(RR R((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR Os c Csòg}xåtríi}|jƒ}|jdƒ}|dkr@Pntjd|ƒ\}|j|j|ƒƒtj||ƒ}|jrÝ|rÁd„} |jj||ƒ} d| | ƒ|dtextra( tTrueR treadtstructtunpacktParseFromStringRRtskiptloadtappend( Rtftprettyt no_payloadtentriestentrytpbufftbuftsizeRtpl_size((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR#Vs$     cCstj|ƒ}|j||ƒS(sD Same as load(), but takes a string as an argument. (tiotBytesIOR#(RtsR&R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pytloadsscCs©x¢|D]š}|jddƒ}|jƒ}tj||ƒ|jƒ}t|ƒ}|jtj d|ƒƒ|j|ƒ|j r|r|j j |||ƒqqWdS(s³ Convert criu image entries from dict(json) format to binary. Takes a list of entries and a file-like object to write entries in binary format to. RRN( tpoptNoneR Rtdict2pbtSerializeToStringtlentwriteRtpackRtdump(RR(R%R)RR*tpb_strR,((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR9ˆs     cCs)tjdƒ}|j||ƒ|jƒS(sf Same as dump(), but doesn't take file-like object and just returns a string. R(R.R/R9R(RR(R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pytdumpsscCsed}xXtr`|jdƒ}|dkr.Pntjd|ƒ\}|j|dƒ|d7}q W|S(sI Counts the number of top-level object in the image file iiRRi(RRRR tseek(RR%R(R+R,((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pytcount¦s  N( R R t__doc__R3R tFalseR#R1R9R;R=(((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR Is +   tpagemap_handlercBsDeZdZeed„Zed„Zd„Zd„Zd„ZRS(s¦ Special entry handler for pagemap.img, which is unique in a way that it has a header of pagemap_head type followed by entries of pagemap_entry type. cCs’g}tjƒ}xytr|jdƒ}|dkr:Pntjd|ƒ\}|j|j|ƒƒ|jtj||ƒƒtj ƒ}qW|S(NiRR( Rt pagemap_headRRRR R!R$Rt pagemap_entry(RR%R&R'R(R*R+R,((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR#¿s   cCstj|ƒ}|j||ƒS(N(R.R/R#(RR0R&R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR1ÏscCs{tjƒ}xh|D]`}tj||ƒ|jƒ}t|ƒ}|jtjd|ƒƒ|j|ƒtj ƒ}qWdS(NR( RRARR4R5R6R7RR8RB(RR(R%R*titemR:R,((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR9Ós     cCs)tjdƒ}|j||ƒ|jƒS(NR(R.R/R9R(RR(R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR;ÞscCstdƒj|ƒdS(Ni(R R3R=(RR%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR=ãs( R R R>R?R#R1R9R;R=(((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR@¸s   tghost_file_handlercBs5eZeed„Zed„Zd„Zd„ZRS(c Cs}g}tjƒ}|jdƒ}tjd|ƒ\}|j|j|ƒƒtj||ƒ}|jr7|j|ƒxt r3tj ƒ} |jdƒ}|dkr¨Pntjd|ƒ\}| j|j|ƒƒtj| |ƒ} |r|j | j t jƒntj|j| j ƒƒ| d<|j| ƒqwWnB|rS|j dt jƒntj|jƒƒ|d<|j|ƒ|S(NiRRRi(Rtghost_file_entryRRR R!RtchunksR$Rtghost_chunk_entryR<R6tostSEEK_CURtbase64RtSEEK_END( RR%R&R'R(tgfR+R,tg_entrytgcR)((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR#és2       cCstj|ƒ}|j||ƒS(N(R.R/R#(RR0R&R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR1 scCstjƒ}|jdƒ}tj||ƒ|jƒ}t|ƒ}|jtj d|ƒƒ|j|ƒ|j rúxŸ|D]z}tj ƒ}tj||ƒ|jƒ}t|ƒ}|jtj d|ƒƒ|j|ƒ|jt j |dƒƒqyWn|jt j |dƒƒdS(NiRR(RRER2RR4R5R6R7RR8RFRGRJt decodebytes(RR(R%R*RCR:R,((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR9s"          !cCs)tjdƒ}|j||ƒ|jƒS(NR(R.R/R9R(RR(R%((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR;#s(R R R?R#R1R9R;(((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyRDès!  tpipes_data_extra_handlercBs#eZd„Zd„Zd„ZRS(cCs%|j}|j|ƒ}tj|ƒS(N(tbytesRRJR(RR%tploadR,tdata((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR#0s cCs tj|ƒ}|j|ƒdS(N(RJROR7(RRR%RRRS((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR95scCs|j|jtjƒ|jS(N(R<RQRHRI(RR%RR((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR"9s(R R R#R9R"(((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyRP/s  tsk_queues_extra_handlercBs#eZd„Zd„Zd„ZRS(cCs%|j}|j|ƒ}tj|ƒS(N(tlengthRRJR(RR%RRR,RS((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR#?s cCs tj|ƒ}|j|ƒdS(N(RJROR7(RRR%t_unusedRS((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR9DscCs|j|jtjƒ|jS(N(R<RURHRI(RR%RR((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyR"Hs(R R R#R9R"(((s8/usr/lib/python2.7/site-packages/pycriu/images/images.pyRT>s  ttcp_stream_extra_handlercBs#eZd„Zd„Zd„ZRS(cCsTi}|j|jƒ}|j|jƒ}tj|ƒ|d(s¸       o0G 1