ó !;Vc@sNdZddlZejZdejfd„ƒYZdefd„ƒYZdS(sXxdr - RAD XDR support This module is the implementation of the RAD python XDR support. iÿÿÿÿNt RADUnpackercBseZdZd„ZRS(s? Override default XDR array unpacking to fit RAD architecture. cCsVg}d}xC||krQy|j|ƒƒ|d7}Wqtk rMPqXqW|S(Nii(tappendtEOFError(tselftnitemst unpack_itemtitemsti((s../common/encodings/xdr.pyt unpack_farray(s  (t__name__t __module__t__doc__R(((s../common/encodings/xdr.pyR%stRecordMarkingSocketcBsqeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z RS( s* Implementation of XDR/RPC Record Marking cCs(||_d|_t|_t|_dS(Ni(t_sockett _remainingtTruet_atlasttFalset_eof(Rtsocket((s../common/encodings/xdr.pyt__init__7s   cCs|S(N((R((s../common/encodings/xdr.pyt __enter__=scCs|jƒtS(N(tcloseR(Rtexc_typetexc_valtexc_tb((s../common/encodings/xdr.pyt__exit__@s cCstd}|}xat|ƒ|kro|jj|ƒ}t|ƒ}|dkrXt|_dS||8}||7}qW|S(s* Internal: read nbytes or else (mark EOF) ti(tlenR trecvRR(Rtnbytestalldatat remainingtdatatldata((s../common/encodings/xdr.pyt really_readDs    cCs|jdƒ}|jrdSt|ƒdks4t‚d}x,tdƒD]}|dt||ƒ}qGW|d@dk|_|d@|_dS(s) Internal: read the next fragment header iNiiliÿÿÿ(R#RRtAssertionErrortrangetordRR(RR!taccR((s../common/encodings/xdr.pyt read_headerRs cCsv|jdkr"|j|jƒnxD|j rh|j rh|jƒ|jdkr%|j|jƒq%q%Wt|_dS(s Skip this record iN(RR#RRR(R(R((s../common/encodings/xdr.pyt skip_record^s cCsšx<|js|jdkr>|js-|jr1dS|jƒqWt|j|ƒ}|jj|ƒ}|jt|ƒ8_t|ƒdkr–t|_n|S(s Read up to nbytes iR( RRRR(tminR RRR(RRtamtR!((s../common/encodings/xdr.pytreadhs cCs„d}xw|j s"|jdkr|jdkre|j|jƒ}||7}|jt|ƒ8_n |jƒ|jr dSq W|S(s Read a whole record Ri(RRR#RR(R(RRR!((s../common/encodings/xdr.pyt read_recordus   cCsitjƒ}|r,|jt|ƒdBƒn|jt|ƒƒ|jj|jƒƒ|jj|ƒdS(s# Simple non-buffered write routine lN(txdrlibtPackert pack_uintRR tsendallt get_buffer(Rtbuftlasttwpacker((s../common/encodings/xdr.pytwriteƒs  cCs3tjƒ}|jdƒ|jj|jƒƒdS(s End a record lN(R.R/R0R R1R2(Rtrpacker((s../common/encodings/xdr.pyt end_records  cCs|jjƒdS(s Close the socket N(R R(R((s../common/encodings/xdr.pyR“s(R R R RRRR#R(R)R,R-R6R8R(((s../common/encodings/xdr.pyR 4s      (R R.R/t RADPackertUnpackerRtobjectR (((s../common/encodings/xdr.pyts