# Channels are objects that enable synchronous IPC of # arbitrary-sized messages. object endpoint : object { uid c5882f24a4c03b7e capabilities [ send receive ] method create [constructor] # Send a message on a channel. Blocks until the message # is received. method send [cap:send] { param tag uint64 param data buffer } # Receieve a message on a channel. Blocks until a message # is available. method receive [cap:receive] { param tag uint64 [out] param data buffer [out optional] param timeout uint64 # Receive timeout in nanoseconds } # Send a message on a channel and then await a new message. # Equivalent to calling send and then recieve, as a single # operation. method sendrecv [cap:send cap:receive] { param tag uint64 [inout] param data buffer [inout] param timeout uint64 # Receive timeout in nanoseconds } }