Every "Test vectors: \`corpus/...\`" mention in the spec is now a markdown link pointing at the corresponding file or directory on GitHub. Each version build resolves its links to the correct git ref: - /latest/ -> https://github.com/swaits/meshcore-spec/tree/main/corpus/... - /v0.1.0/ -> https://github.com/swaits/meshcore-spec/tree/v0.1.0/corpus/... - future /vX.Y.Z/ -> /tree/vX.Y.Z/corpus/... Two changes: 1. src/*.md (18 files): the inline-code corpus paths in each "Cross-References" section are now markdown links. Directories point at /tree/main/corpus/..., individual .json files point at /blob/main/corpus/.... CHANGELOG and other non-corpus main links are intentionally left pointing at main — the canonical history lives there regardless of which version you're reading. 2. justfile: `cut-version` now also runs a sed over the snapshot's *.md files replacing /tree/main/corpus -> /tree/<VERSION>/corpus and /blob/main/corpus -> /blob/<VERSION>/corpus. So a freshly-cut version is self-consistent. versions/v0.1.0/* regenerated by re-running `just cut-version v0.1.0` after the new src/ links + recipe sed landed. Tagging the release commit (`git tag v0.1.0`) is now REQUIRED — not "optional" — because the rendered /v0.1.0/ pages reference /tree/v0.1.0/corpus/... on GitHub. Without the tag the links 404. cut-version's output now says so. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.3 KiB
1.3 KiB
MeshCore Protocol Specification
Section 13: Payload — Raw Custom
Overview
The RAW_CUSTOM payload carries application-defined raw bytes with no prescribed structure. It is intended for applications that implement their own encryption, framing, or payload formats on top of the MeshCore transport.
Payload Type
Header payload type field: 0x0F (RAW_CUSTOM)
Wire Format
0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Raw Data (1-184 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Fields
| Field | Offset | Size | Type | Description |
|---|---|---|---|---|
| data | 0 | 1-184 bytes | raw | Application-defined payload |
Routing
In the current reference implementation, RAW_CUSTOM packets are only processed when received via direct routing. They are NOT flood-routed.
Constraints
- Payload MUST be at least 1 byte.
- Maximum payload: 184 bytes (MAX_PACKET_PAYLOAD).
- Maximum total data: limited by
sizeof(Packet::payload)which is MAX_PACKET_PAYLOAD (184).
Cross-References
- Test vectors:
corpus/payloads/raw-custom/
Reference Implementation
Mesh::createRawData()insrc/Mesh.cpp— EncodingMesh::onRecvPacket(), casePAYLOAD_TYPE_RAW_CUSTOM— Processing (direct only)