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.