U v`%@sdZddlmZddlZddlmZdZdZdZZ dZ dZ dZ dZ dZdZdZdZdZdZd ZdZdZGd d d ejZd d ZddZddZddZddZddZddZddZ dS)zRemote Procedure Call.)absolute_importN)dpktc@s\eZdZdZdddeffZGdddejZGdddejZ Gd d d ejZ d d Z d S)RPCzRemote Procedure Call. RFC 5531: https://tools.ietf.org/html/rfc5531 TODO: Longer class information.... Attributes: __hdr__: Header fields of RPC. TODO. )xidIrdirr c@s0eZdZddeffZddZddZddZd S) zRPC.Authflavorr cCs@tj||td|jddd}|jdd||_dS)N>Irr)rPacketunpackstructdata)selfbufnr`/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/rpc.pyr9szRPC.Auth.unpackcCsdt|jS)N)lenrrrrr__len__>szRPC.Auth.__len__cCs$|tdt|jt|jS)Nr)Zpack_hdrrpackrrbytesrrrr __bytes__AszRPC.Auth.__bytes__N)__name__ __module__ __qualname__ AUTH_NONE__hdr__rrrrrrrAuth6s r$c@s(eZdZdZddZddZddZdS) zRPC.Call))rpcversr r)progr r)versr r)procr rcCs\tj||t|j|_t|jt|jd|_|jt|jt|jd|_dSN) rrrr r$rcredrverfrrrrrrLszRPC.Call.unpackcCs tt|Sr))rrrrrrrRszRPC.Call.__len__cCs>tj|tt|dttt|dtt|jS)Nr*r+)rrrrgetattrr r$rrrrrrUs zRPC.Call.__bytes__N)rr r!r#rrrrrrrCallDsr.c@sDeZdZddeffZGdddejZGdddejZddZ d S) z RPC.Replystatr c@s0eZdZddeffZddZddZddZd S) zRPC.Reply.Acceptr/r cCst||_|t|jd}td|ddd|_|jtkrR|dd|_n4|jt krtd|dd\|_ |_ |dd|_dS)Nrrr>II ) r r$r+rrrr/SUCCESSr PROG_MISMATCHlowhighr,rrrras   zRPC.Reply.Accept.unpackcCs0|jtkrd}nd}t|jd|t|jS)Nrrr)r/r3rr+rrrrrrrks zRPC.Reply.Accept.__len__cCsF|jtkr0t|jtd|j|j|j|jSt|jt j |S)N>III) r/r3rr+rrr4r5rrrrrrrrrrs zRPC.Reply.Accept.__bytes__N)rr r!r2r#rrrrrrrAccept^s  r8c@s0eZdZddeffZddZddZddZd S) zRPC.Reply.Rejectr/r cCstj|||jtkrHtd|jdd\|_|_|jdd|_n6|jt kr~td|jddd|_ |jdd|_dS)Nr0rrrr) rrrr/ RPC_MISMATCHrrr4r5 AUTH_ERRORwhyr,rrrr{s  zRPC.Reply.Reject.unpackcCs6|jtkrd}n|jtkr d}nd}d|t|jS)Nrrr)r/r9r:rrr6rrrrs   zRPC.Reply.Reject.__len__cCsT|jtkr&td|j|j|j|jS|jtkrHtd|j|j|jSt j |S)Nr7r0) r/r9rrr4r5rr:r;rrrrrrrrs   zRPC.Reply.Reject.__bytes__N)rr r!r:r#rrrrrrrRejectxs   r<cCsPtj|||jtkr.||j|_|_n|jtkrL| |j|_|_ dSr)) rrrr/ MSG_ACCEPTEDr8raccept MSG_DENIEDr<rejectr,rrrrs   zRPC.Reply.unpackN) rr r!r=r#rrr8r<rrrrrReply[s rAcCsPtj|||jtkr.||j|_|_n|jtkrL| |j|_|_ dSr)) rrrr CALLr.rcallREPLYrAZreplyr,rrrrs   z RPC.unpackN) rr r!__doc__rBr#rrr$r.rArrrrrr %s @r cCsRg}|rN|dr4||dd}|||j}q|drBqNqtdq|S)Nrzinvalid XDR list) startswithappendrrZ UnpackError)clsrZl_prrrunpack_xdrlists    rLcGsdtt|dS)NrFrG)joinmapr)argsrrr pack_xdrlistsrPcCsfddlm}t}|jtks"t|d}t||ks:tt|}|jtksRtt|dksbtdS)Nr unhexlifyZ0000000000000000r) binasciirRr r$r r"AssertionErrorrr)rRZauth1rZauth2rrr test_auths  rUcCsddlm}t}|jdks"t|jdks0t|jdks>t|jdksLt|d}t ||ksdtt|}|jdks|t|jdkst|jdkst|jdkstt |dkstt ||kstdS)NrrQrZ@0000000200000000000000000000000000000000000000000000000000000000 ) rSrRr r.r%rTr&r'r(rr)rRZcall1rZcall2rrr test_calls"  rWcCsddlm}t}|jtks"tt|dks2t|d}t|}|jtksRtt||ksbtt|dksrt|d}t|}|jt kstt||kstt|dkstdS)NrrQrGZ0000000000000000000000000000000000000000000000000Z0000000010000000000000000FFFFFFFF0000000000000000) rSrRr rAr/r=rTrrr?)rRZreply1Z buf_acceptedZreply_acceptedZ buf_deniedZ reply_deniedrrr test_replys$   rYcCsddlm}tj}|jtks$t|d}tj|}|jtksFtt|dksVtt ||ksft|d}tj|}|jt kstt|dkstt ||kstdS)NrrQZ(0000000000000000000000000000000000000000Z(0000000000000000000000020000000000000000) rSrRr rAr8r/r2rTrrr3)rRZaccept1Z buf_successZaccept_successZbuf_prog_mismatchZaccept_prog_mismatchrrr test_accepts"    r[cCsddlm}tj}|jtks$t|d}tj|}t||ksHt|j dksVt|j dksdtt |dkstt|d}tj|}t||kstt |dkst|d}tj|}t||kstt |dkstdS)NrrQZ(0000000000000000FFFFFFFF0000000000000000lrZZ(0000000100000000FFFFFFFF0000000000000000Z(0000000200000000FFFFFFFF0000000000000000) rSrRr rAr<r/r:rTrr4r5r)rRZreject1Zbuf_rpc_mismatchZreject2Zbuf_auth_errorZreject3Z buf_otherZreject4rrr test_rejects.     r\cCsrddlm}t}|jdks t|jtks.t|d}t|}t||ksNt|d}t|}t||ksntdS)NrrQZP00000000000000000000000200000000000000000000000000000000000000000000000000000000Z@0000000000000001000000000000000000000000000000000000000000000000)rSrRr r rTr rBr)rRZrpcZbuf_callZrpc_callZ buf_replyZ rpc_replyrrrtest_rpc8s  r])!rE __future__rrrrBrDr"Z AUTH_NULLZ AUTH_UNIXZ AUTH_SHORTZAUTH_DESr=r?r2Z PROG_UNAVAILr3Z PROC_UNAVAILZ GARBAGE_ARGSZ SYSTEM_ERRr9r:rr rLrPrUrWrYr[r\r]rrrrs8  ~ &