Add new METADAPT protocol specifications from #2
This commit is contained in:
parent
1ac0ed51c7
commit
5c28510342
@ -129,8 +129,9 @@ on the same machine. Both protocols are supported through METADAPT.
|
||||
## Message and Transaction Demarcation Protocol (METADAPT)
|
||||
The Message and Transaction Demarcation Protocol is used to break one or more
|
||||
reliable data streams into transactions, which are broken down further into
|
||||
messages. A message, as well as its associated metadata (length, transaction,
|
||||
method, etc.) together is referred to as METADAPT Message Block (MMB).
|
||||
messages. The representation of a message (or a part thereof) on the protocol,
|
||||
including its associated metadata (length, transaction, method, etc.) is
|
||||
referred to as METADAPT Message Block (MMB).
|
||||
|
||||
For transports that offer multiple multiplexed data streams that can be created
|
||||
and destroyed on-demand (such as QUIC) each stream is used as a transaction. If
|
||||
@ -145,8 +146,12 @@ METADAPT-A requires a transport which offers a single full-duplex data stream
|
||||
that persists for the duration of the connection. All transactions are
|
||||
multiplexed onto this single stream. Each MMB contains a 12-octet long header,
|
||||
with the transaction ID, then the method, and then the payload size (in octets).
|
||||
The transaction ID is encoded as an I64, and the method and payload size are
|
||||
both encoded as U16s. The remainder of the message is the payload. Since each
|
||||
The transaction ID is encoded as an I64, the method is encoded as a U16 and the
|
||||
and payload size is encoded as a U64. Only the 63 least significant bits of the
|
||||
payload size describe the actual size, the most significant bit controlling
|
||||
chunking. See the section on chunking for more information.
|
||||
|
||||
The remainder of the message is the payload. Since each
|
||||
MMB is self-describing, they are sent sequentially with no gaps in-between them.
|
||||
|
||||
Transactions "open" when the first message with a given transaction ID is sent.
|
||||
@ -162,13 +167,25 @@ used up, the connection must fail. Don't worry about this though, because the
|
||||
sun will have expanded to swallow earth by then. Your connection will not last
|
||||
that long.
|
||||
|
||||
#### Message Chunking
|
||||
|
||||
The most significant bit of the payload size field of an MMB is called the Chunk
|
||||
Control Bit (CCB). If the CCB of a given MMB is zero, the represented message is
|
||||
interpreted as being self-contained and the data is processed immediately. If
|
||||
the CCB is one, the message is interpreted as being chunked, with the data of
|
||||
the current MMB being the first chunk. The data of further MMBs sent along the
|
||||
transaction will be appended to the message until an MMB is read with a zero
|
||||
CCB, in which case the MMB will be the last chunk and any more MMBs will be
|
||||
interpreted as normal.
|
||||
|
||||
### METADAPT-B
|
||||
METADAPT-B requires a transport which offers multiple multiplexed full-duplex
|
||||
data streams per connection that can be created and destroyed on-demand. Each
|
||||
data stream is used as an individual transaction. Each MMB contains a 4-octet
|
||||
long header with the method and then the payload size (in octets) both encoded
|
||||
as U16s. The remainder of the message is the payload. Since each MMB is
|
||||
self-describing, they are sent sequentially with no gaps in-between them.
|
||||
long header with the method and then the payload size (in octets) encoded as a
|
||||
U16 and U64 respectively. The remainder of the message is the payload. Since
|
||||
each MMB is self-describing, they are sent sequentially with no gaps in-between
|
||||
them.
|
||||
|
||||
The ID of any transaction will reflect the ID of its corresponding stream. The
|
||||
lifetime of the transaction is tied to the lifetime of the stream, that is to
|
||||
|
Loading…
Reference in New Issue
Block a user