Initial CAPS IPC structural encoding and decoding support. Note that the
kernel is uninvolved (other then in supplying the IPC mechanism). After
careful consideration I decided that XML was just too much overkill but that
a human-readable format is still desireable. The encoding format supports
integers, strings, opaque data, arrays, and is extensible and structural.
An example encoding of the struct passwd record for user 'nobody':
Spasswd{F1D"nobody",F2D"%2a",F3Dfffe,F4Dfffe,F5D0,F6D"",F7D"Unprivileged%20user",F8D"/nonexistent",F9D"/sbin/nologin",FaD0}
Class elements include (S)tructure, (F)ield, (D)ata, (A)rray. Data types are
free-form numeric (stored as hex), with the source responsible for encoding
negative numbers with a '-', and quoted opaque data (e.g. strings). Any
class element may recurse using {}. Structures and Arrays always recurse.
Unknown recursions are ignored by the decoder (for future backwards
compatibility). Whitespace is allowed but most non-alpha-numeric characters
must be %-hex-escaped.
The decoder understands simple integer types, arrays, buffers, embedded
sub-structures, and string pointer structural elements. It does not (yet)
understand multi-dimensional arrays, sparse element notation, or ** pointers.
This is a nice, compact encoding format that can be used for both packetized
messages and persistently-connected streams. The initial commit only supports
full-messages, however.
14 files changed: