371 lines
9.3 KiB
Markdown
371 lines
9.3 KiB
Markdown
|
|
# Table of Contents
|
|
|
|
1. [Packet Format](#orgb2a43d1)
|
|
2. [Common Header](#org5ca4c69)
|
|
1. [Types](#org240efb3)
|
|
2. [Shared Flags](#org804fcce)
|
|
3. [Handshake Packet](#org6a73ea8)
|
|
4. [Forward Packet](#org39c753e)
|
|
1. [Flags](#org5177d26)
|
|
2. [Payload](#orgb29cbd7)
|
|
1. [Message Content map structure](#org75acfe6)
|
|
5. [Heartbeat Packet](#org388b69a)
|
|
|
|
|
|
<a id="orgb2a43d1"></a>
|
|
|
|
# Packet Format
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bytes
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
1
|
|
</td>
|
|
<td align="left" valign="top">
|
|
2
|
|
</td>
|
|
<td align="left" valign="top">
|
|
3
|
|
</td>
|
|
<td align="left" valign="top">
|
|
5
|
|
</td>
|
|
<td align="left" valign="top">
|
|
6 .. end
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
|
|
</td>
|
|
<td colspan="4" align="left" valign="top">
|
|
variable length
|
|
</td>
|
|
<td align="left" valign="top">
|
|
common header
|
|
</td>
|
|
<td align="left" valign="top">
|
|
payload
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
The length of the remaining part(common header + payload) is indicated by the Length Header of each packet
|
|
|
|
|
|
<a id="org5ca4c69"></a>
|
|
|
|
# Common Header
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bits
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
1
|
|
</td>
|
|
<td align="left" valign="top">
|
|
2
|
|
</td>
|
|
<td align="left" valign="top">
|
|
3
|
|
</td>
|
|
<td align="left" valign="top">
|
|
4
|
|
</td>
|
|
<td align="left" valign="top">
|
|
5
|
|
</td>
|
|
<td align="left" valign="top">
|
|
6
|
|
</td>
|
|
<td align="left" valign="top">
|
|
7
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
|
|
</td>
|
|
<td colspan="4" align="left" valign="top">
|
|
packet type
|
|
</td>
|
|
<td colspan="4" align="left" valign="top">
|
|
shared flags
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<a id="org240efb3"></a>
|
|
|
|
## Types
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
type
|
|
</td>
|
|
<td align="left" valign="top">
|
|
usage
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
handshake
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
1
|
|
</td>
|
|
<td align="left" valign="top">
|
|
forward
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
2
|
|
</td>
|
|
<td align="left" valign="top">
|
|
heartbeat
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<a id="org804fcce"></a>
|
|
|
|
## Shared Flags
|
|
|
|
The usage of each bit is determined by the type of packet
|
|
|
|
|
|
<a id="org6a73ea8"></a>
|
|
|
|
# Handshake Packet
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bytes
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
1
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
|
|
</td>
|
|
<td align="left" valign="top">
|
|
common header
|
|
</td>
|
|
<td align="left" valign="top">
|
|
version
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<a id="org39c753e"></a>
|
|
|
|
# Forward Packet
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bits
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
1
|
|
</td>
|
|
<td align="left" valign="top">
|
|
2
|
|
</td>
|
|
<td align="left" valign="top">
|
|
3
|
|
</td>
|
|
<td align="left" valign="top">
|
|
4
|
|
</td>
|
|
<td align="left" valign="top">
|
|
5
|
|
</td>
|
|
<td align="left" valign="top">
|
|
6
|
|
</td>
|
|
<td align="left" valign="top">
|
|
7
|
|
</td>
|
|
<td align="left" valign="top">
|
|
...
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2" align="left" valign="top">
|
|
<br />
|
|
<br />
|
|
|
|
</td>
|
|
<td colspan="4" rowspan="2" align="left" valign="top">
|
|
<br />
|
|
packet type <br />
|
|
|
|
</td>
|
|
<td colspan="3" align="left" valign="top">
|
|
|
|
</td>
|
|
<td align="left" valign="top">
|
|
ACK
|
|
</td>
|
|
<td rowspan="2" align="left" valign="top">
|
|
<br />
|
|
payload <br />
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" align="left" valign="top">
|
|
forward flags
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<a id="org5177d26"></a>
|
|
|
|
## Flags
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
flag
|
|
</td>
|
|
<td align="left" valign="top">
|
|
usage
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
ACK
|
|
</td>
|
|
<td align="left" valign="top">
|
|
This packet need a ACK response
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<a id="orgb29cbd7"></a>
|
|
|
|
## Payload
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bytes
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
<td align="left" valign="top">
|
|
..
|
|
</td>
|
|
<td align="left" valign="top">
|
|
n
|
|
</td>
|
|
<td align="left" valign="top">
|
|
n+1
|
|
</td>
|
|
<td align="left" valign="top">
|
|
..
|
|
</td>
|
|
<td align="left" valign="top">
|
|
x
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
|
|
</td>
|
|
<td colspan="3" align="left" valign="top">
|
|
Content Length
|
|
</td>
|
|
<td colspan="3" align="left" valign="top">
|
|
Message Content
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
- Content length is a variable length number.
|
|
- Message content is a list in an opaque binary format whose element is a map structure
|
|
|
|
|
|
<a id="org75acfe6"></a>
|
|
|
|
### Message Content map structure
|
|
|
|
{
|
|
id: "0006081CCFF3D48F03C10000058B0000", // unique message id
|
|
qos: 1,
|
|
flags: {dup: false, retain: false},
|
|
from: "clientid",
|
|
topic: "t/1",
|
|
payload: "hello, world",
|
|
timestamp: 1697786555281
|
|
}
|
|
|
|
|
|
<a id="org388b69a"></a>
|
|
|
|
# Heartbeat Packet
|
|
|
|
<!-- This HTML table template is generated by emacs 29.0.92 -->
|
|
<table border="1">
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
bytes
|
|
</td>
|
|
<td align="left" valign="top">
|
|
0
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="left" valign="top">
|
|
|
|
</td>
|
|
<td align="left" valign="top">
|
|
common header
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|