After the week I've had, I deserve to make a commit like this lmao
This commit is contained in:
@@ -22,8 +22,8 @@ guaranteed.
|
||||
|
||||
The message payload must be 65,535 (unsigned 16-bit integer limit) octets or
|
||||
smaller in length. This does not include the method code. Applications are free
|
||||
to send whatever data they wish as the payload, but it should be encoded using
|
||||
TAPE.
|
||||
to send whatever data they wish as the payload, but TAPE is recommended for
|
||||
encoding it.
|
||||
|
||||
Method codes should be written in upper-case base 16 with the prefix "M" in
|
||||
logs, error messages, documentation, etc. For example, the method code 62,206 in
|
||||
@@ -31,7 +31,7 @@ decimal would be written as MF4CE. The application may choose any method codes,
|
||||
but groups of similar methods should be placed at consecutive intervals of
|
||||
M0100. Method codes MFF00-MFFFF are reserved for use by HOPP and its constituent
|
||||
protocols. Individuals or entities with the SWAG (secret wheel access group)
|
||||
pass are also permitted to define their own methods in this range. I'm just
|
||||
pass are also permitted to define their own methods within this range. I'm just
|
||||
fucking with you.
|
||||
|
||||
## Table Pair Encoding (TAPE)
|
||||
@@ -45,12 +45,12 @@ enables backwards compatibile application protocol changes.
|
||||
### Table Structure
|
||||
A table is divided into two sections: the header, and the values. The header
|
||||
begins with the number (U16) of pairs in the table, which is then followed by
|
||||
that many tag-offset pairs. A tag-offset pair consists of a numerical (U16)
|
||||
tag, followed the position (U16) of the value relative to the start of the
|
||||
values section. The values section contains the value data for each pair,
|
||||
where the start of each value is determined by its offset, and the end is
|
||||
determined by the offset of the next value, or the end of the message if there
|
||||
is no value after it.
|
||||
that many tag-offset pairs. A tag-offset pair consists of a numerical (U16) tag,
|
||||
followed the position (U16) of the value relative to the start of the values
|
||||
section. The values section contains the value data for each pair, where the
|
||||
start of each value is determined by its offset, and the end is determined by
|
||||
the offset of the next value, or the end of the message if there is no value
|
||||
after it.
|
||||
|
||||
Both sections must be in the same order, and because of this, each value offset
|
||||
must be greater than or equal to the last. If a message has erratic structure
|
||||
@@ -60,19 +60,22 @@ only the erratic pairs, as well as the pairs directly before those.
|
||||
### Data Value Types
|
||||
The table below lists all data value types supported by TAPE.
|
||||
|
||||
| Name | Size | Description | Encoding Method
|
||||
| ------ | ---------------: | --------------------------- | ---------------
|
||||
| I8 | 1 | A signed 8-bit integer | BETC
|
||||
| I16 | 2 | A signed 16-bit integer | BETC
|
||||
| I32 | 4 | A signed 32-bit integer | BETC
|
||||
| I64 | 8 | A signed 64-bit integer | BETC
|
||||
| U8 | 1 | An unsigned 8-bit integer | BEU
|
||||
| U16 | 2 | An unsigned 16-bit integer | BEU
|
||||
| U32 | 4 | An unsigned 32-bit integer | BEU
|
||||
| U64 | 8 | An unsigned 64-bit integer | BEU
|
||||
| Array | Part-sum | An array of any above type | PASTA
|
||||
| String | N/A | A UTF-8 string | UTF-8
|
||||
| StringArray | N * 2 + Part-sum | An array the String type | VILA
|
||||
| Name | Size | Description | Encoding Method
|
||||
| ----------- | --------------: | --------------------------- | ---------------
|
||||
| I8 | 1 | A signed 8-bit integer | BETC
|
||||
| I16 | 2 | A signed 16-bit integer | BETC
|
||||
| I32 | 4 | A signed 32-bit integer | BETC
|
||||
| I64 | 8 | A signed 64-bit integer | BETC
|
||||
| U8 | 1 | An unsigned 8-bit integer | BEU
|
||||
| U16 | 2 | An unsigned 16-bit integer | BEU
|
||||
| U32 | 4 | An unsigned 32-bit integer | BEU
|
||||
| U64 | 8 | An unsigned 64-bit integer | BEU
|
||||
| Array | SOP[^1] | An array of any above type | PASTA
|
||||
| String | N/A | A UTF-8 string | UTF-8
|
||||
| StringArray | n * 2 + SOP[^1] | An array the String type | VILA
|
||||
|
||||
[^1]: SOP (sum of parts) refers to the sum of the size of every item in a data
|
||||
structure.
|
||||
|
||||
### Encoding Methods
|
||||
Below are all encoding methods supported by TAPE.
|
||||
@@ -88,9 +91,9 @@ octets which can fit all bits in the integer, regardless if the bits are on or
|
||||
off. Therefore, the size cannot change at runtime.
|
||||
|
||||
#### PASTA
|
||||
Packed Single-Type Array. The size is defined as at the size of an individual
|
||||
item times the number of items. Items are placed one after the other with no
|
||||
gaps in-between them, except as required to align the start of each item to the
|
||||
Packed Single-Type Array. The size is defined as the size of an individual item
|
||||
times the number of items. Items are placed one after the other with no gaps
|
||||
in-between them, except as required to align the start of each item to the
|
||||
nearest whole octet. Items should be of the same type and must be of the same
|
||||
size.
|
||||
|
||||
@@ -133,7 +136,7 @@ Internet.
|
||||
### METADAPT-A
|
||||
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,
|
||||
multiplexed onto this single stream. Each MMB contains a 8-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
|
||||
@@ -143,6 +146,15 @@ Transactions "open" when the first message with a given transaction ID is sent.
|
||||
They "close" when a closing message is sent by either side. A closing message
|
||||
has method MFFFF and should not have a payload.
|
||||
|
||||
The ID of a given transaction is counted differently depending on from which end
|
||||
of the connection the transaction in question initiated from. The client (the
|
||||
party which initiated the connection) uses positive transaction IDs, while the
|
||||
server (the party which accepted the connection) uses negative transaction IDs.
|
||||
Transaction IDs must be unique within the connection, and if all IDs have been
|
||||
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.
|
||||
|
||||
### 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
|
||||
|
||||
Reference in New Issue
Block a user