Add first draft of marshalling spec
authorScott Wood <scott@buserror.net>
Sun, 27 May 2007 14:38:29 +0000 (09:38 -0500)
committerScott Wood <scott@buserror.net>
Sun, 27 May 2007 14:38:29 +0000 (09:38 -0500)
doc/orb/marshalling [new file with mode: 0644]

diff --git a/doc/orb/marshalling b/doc/orb/marshalling
new file mode 100644 (file)
index 0000000..a400d88
--- /dev/null
@@ -0,0 +1,41 @@
+segment 0, byte 0 is a request code.  Codes are:
+ 0: Invoke Method
+ 1: Get Interface List
+ 2: Return Interface List
+
+Bytes 1-3 (32-bit) and 1-7 (64-bit) are reserved, and must be zero.
+All offsets described in the rest of this file are relative to the
+first non-reserved byte (a.k.a. the message payload).  The reserved
+bytes do not need to be included in the message if the payload is
+empty.
+
+Op0: Invoke Method
+------------------
+
+The segment 0 payload contains the method's arguments as if they were
+a struct, followed by a depth-first traversal of any referenced
+structs, excluding references which could potentially lead to loops
+(i.e. references to types that exist in a parent node in the
+traversal, or their supertypes) or aliases (i.e. references to types
+that exist elsewhere in the traversal, or their supertypes).  Where
+loops or aliases are possible, the reference is encoded as a
+segment/offset pair (a 32-bit word, segment is upper 6 bits), and the
+data may be placed wherever the sender wishes.  Non-inline arrays are
+also encoded with segment/offset pairs.  Object references are
+encoded as 16-bit offsets into the objlist array.
+
+Op1: Get Interface List
+-----------------------
+
+Return a "Return Interface List" message corresponding to the object
+in objlist[0].  For async requests, objlist[1] is the destination for
+the return message.
+
+Op2: Return Interface List
+--------------------------
+
+For async requests, objlist[1] is the object whose interfaces were
+requested.
+
+The payload consists of a list of GUIDs of interfaces that the object
+supports.