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.