X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=doc%2Forb%2Fmarshalling;h=e56e350a0d3eebc3c991906f4ad856a9112fc42c;hp=ab429bb8e853ee0e27a0e02154c8dbb6ff96f98b;hb=b5cbe98949d5b279965d607c9618d404b26d4760;hpb=d32da4b91b9a403ae9d65c48fbb25c1abbb5083f diff --git a/doc/orb/marshalling b/doc/orb/marshalling index ab429bb..e56e350 100644 --- a/doc/orb/marshalling +++ b/doc/orb/marshalling @@ -37,6 +37,26 @@ for 32-bit architectures and 32 for 64-bit architectures. Object references are encoded as pointer-sized offsets into the objlist array. +Virtual structs are prefaced with a header, which consists of +the following, in order: +1. 128-bit GUID of the most derived vstruct type +2. 160-bit SHA-1 of the vstruct type info +3. 32-bit objlist-offset of an introspection object +4. 32-bit length of vstruct, including header, and all referenced +data chunks, which must be contiguously appended to the vstruct body +5. 32-bit reserved field + +The requirement for all referenced data chunks to be contiguous with +the vstruct means that scatter-gather and zero-copy cannot be done; +however, it prevents the loss of derived-type data when only a base +type is known at unmarshalling time (the derived-type data could +later be accessed through introspection, or be passed to another +process that does know the derived type). For this reason, vstructs +should generally not be used to pass large chunks of data. + +The introspection object reference may be NULL; in this case, the +SHA-1 field is ignored. + Op1: Get Interface List -----------------------