May 2001
Intermediate to advanced
304 pages
6h 12m
English
The xdrlib module converts between Python datatypes and Sun’s external data
representation (XDR), as Example 4-7 illustrates.
Example 4-7. Using the xdrlib Module
File: xdrlib-example-1.py
import xdrlib
#
# create a packer and add some data to it
p = xdrlib.Packer()
p.pack_uint(1)
p.pack_string("spam")
data = p.get_buffer()
print "packed:", repr(data)
#
# create an unpacker and use it to decode the data
u = xdrlib.Unpacker(data)
print "unpacked:", u.unpack_uint(), repr(u.unpack_string())
u.done()
packed: '\000\000\000\001\000\000\000\004spam'
unpacked: 1 'spam'The XDR format is used by Sun’s remote procedure call (RPC) protocol. Example 4-8 is an incomplete (and rather contrived) example showing how to build an RPC request package.
Example 4-8. Using the xdrlib Module to Send an RPC Call Package
File: xdrlib-example-2.py import xdrlib # some constants (see the RPC specs for details) RPC_CALL = 1 RPC_VERSION = 2 MY_PROGRAM_ID = 1234 # assigned by Sun MY_VERSION_ID = 1000 MY_TIME_PROCEDURE_ID = 9999 AUTH_NULL = 0 transaction = 1 p = xdrlib.Packer() # send a Sun RPC call package p.pack_uint(transaction) p.pack_enum(RPC_CALL) p.pack_uint(RPC_VERSION) p.pack_uint(MY_PROGRAM_ID) p.pack_uint(MY_VERSION_ID) p.pack_uint(MY_TIME_PROCEDURE_ID) p.pack_enum(AUTH_NULL) p.pack_uint(0) p.pack_enum(AUTH_NULL) p.pack_uint(0) print repr(p.get_buffer())'\000\000\000\001\000\000\000\001\000\000\000\002\000\000\004\322\000\000\003\350\000\000\'\017\000\000\000\000\000\000\000\000\000 ...
Read now
Unlock full access