+/*
+ * Encoding #: -260
+ *
+ * The server notifies the client of available streams using the
+ * framebuffer update for our psuedo encoding #.
+ *
+ * The 'x' field is '0' for a device addition, '1' for removal
+ *
+ * The payload of the update is the device name
+ * - u32 - length of device name
+ * - u8 * len - text of device name, not including \0
+ *
+ * When client indicates it accepts the stream encoding,
+ * the server will send back a stream addition update for
+ * each initial device. Hotplug/unplug for streams will
+ * trigger further updates.
+ *
+ * For QEMU, the streams extension maps 1-stream to 1 char device
+ *
+ * Stream capture uses an new 'aliguori' message sub-type. There
+ * are 3 client -> server messages, and 3 server -> client messages
+ *
+ * Client starts capture by supplying a stream name. Server replies
+ * givng the stream name -> stream ID mapping. All further messages
+ * use the unique stream ID.
+ *
+ * Client -> server messages:
+ *
+ * Message == u8: 255 (aliguouri)
+ * sub-type == u8: 2 (streams)
+ * operation == u8:
+ * 0 == start capture
+ * 1 == end capture
+ * 2 == send data
+ *
+ * For operation == start capture:
+ * content:
+ * u32 - length of device name
+ * u8 *len - device name to capture
+ *
+ * For operation == end capture
+ * content:
+ * u32 - capture session ID
+ *
+ * For operation == send data
+ * content:
+ * u32 - capture session ID
+ * u32 - length of data
+ * u8*len - raw data
+ *
+ *
+ *
+ * Server -> client messages:
+ *
+ * Message == u8: 255 (aliguouri)
+ * sub-type == u8: 2 (streams)
+ * operation == u8:
+ * 0 == start capture
+ * 1 == end capture
+ * 2 == send data
+ *
+ * For operation == start capture
+ * content:
+ * u32 - capture session ID
+ * u32 - length of device name
+ * u8 *len - device name to capture
+ *
+ * For operation == end capture
+ * content:
+ * u32 - capture session ID
+ *
+ * For operation == send data
+ * content:
+ * u32 - capture session ID
+ * u32 - length of data
+ * u8*len - raw data
+ *