Binary Message Format
Transports, such as TCP, that require a compact representation for a message will use the binary format.
Conventions
Multibyte lengths are sent with the high-order byte first (also known as “big endian” or “network byte order”). All strings start with a 2-byte length, followed by the UTF-8 string value.
The message format is specified using ABNF [RFC2234]. ABNF is normally used for ASCII grammars, but here we use it for defining a byte sequence for a binary message.
Message
msg ::= "jxmg"
version ; One byte. Must
be 0.
namespaces
element_count ; two bytes
1* elm
Each message starts with the 4-byte
UTF-8 signature "jxmg"
. The signature is used to
aid in sanity-checking a transport implementation. This is followed
by a 1-byte version number. At present, the version number must be 0
.
Next is a list of namespaces used by this message (see the production rule for namespaces below). And last is a 2-byte element count followed by the elements themselves.
Namespace
namespaces ::= namespace_count ; two bytes 0* namespace ; Each namespace is a string namespace = string
Each message element name is part of a
namespace. The namespaces of all elements are collected in a
namespace list at the start of the message. This is an ordered list.
Each entry in the list is assigned an ID. The first entry in the list
is assigned an ID of 2
. The ID of each successive
ID is one plus the ID of the preceding namespace ID. The IDs
0
and 1
are preassigned. The
value 0
represents ...
Get JXTA in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.