{
"generator": "hyper-overlay/test/conformance/generate.mjs",
"overlayVersion": "0.3.12",
"protocol": "hyper-overlay/v2",
"messageCount": 15,
"caseCount": 35,
"cases": [
{
"message": "handshake",
"label": "v1 no caps",
"note": null,
"truncated": false,
"bytes": "0100",
"decoded": {
"capabilities": 0,
"version": 1
}
},
{
"message": "handshake",
"label": "max uint8",
"note": null,
"truncated": false,
"bytes": "ffff",
"decoded": {
"capabilities": 255,
"version": 255
}
},
{
"message": "syncState",
"label": "zero seqs",
"note": null,
"truncated": false,
"bytes": "2000000000000000000000000000000000000000000000000000000000000000000000",
"decoded": {
"feedKey": "0000000000000000000000000000000000000000000000000000000000000000",
"localSeq": 0,
"remoteSeq": 0
}
},
{
"message": "syncState",
"label": "varint boundary 0xfc/0xfd",
"note": "c.uint switches from 1 byte to 3 at 0xfd",
"truncated": false,
"bytes": "20ababababababababababababababababababababababababababababababababfcfdfd00",
"decoded": {
"feedKey": "abababababababababababababababababababababababababababababababab",
"localSeq": 252,
"remoteSeq": 253
}
},
{
"message": "syncState",
"label": "varint 32-bit boundary",
"note": null,
"truncated": false,
"bytes": "201111111111111111111111111111111111111111111111111111111111111111fdfffffe00000100",
"decoded": {
"feedKey": "1111111111111111111111111111111111111111111111111111111111111111",
"localSeq": 65535,
"remoteSeq": 65536
}
},
{
"message": "syncState",
"label": "varint 64-bit",
"note": null,
"truncated": false,
"bytes": "202222222222222222222222222222222222222222222222222222222222222222feffffffffff0000000001000000",
"decoded": {
"feedKey": "2222222222222222222222222222222222222222222222222222222222222222",
"localSeq": 4294967295,
"remoteSeq": 4294967296
}
},
{
"message": "fileOffer",
"label": "ascii path",
"note": null,
"truncated": false,
"bytes": "1c6173736574732f6d6f64656c732f74656c65706f727465722e676c62200101010101010101010101010101010101010101010101010101010101010101fdd204fe8032746a01",
"decoded": {
"contentHash": "0101010101010101010101010101010101010101010101010101010101010101",
"mtime": 1786000000,
"op": 1,
"path": "assets/models/teleporter.glb",
"size": 1234
}
},
{
"message": "fileOffer",
"label": "utf8 path",
"note": "c.string is UTF-8; a byte-oriented port mis-sizes this",
"truncated": false,
"bytes": "256173736574732f74657874757265732f636166c3a92f6e61c3af7665e28094c3bc2e706e67200202020202020202020202020202020202020202020202020202020202020202000000",
"decoded": {
"contentHash": "0202020202020202020202020202020202020202020202020202020202020202",
"mtime": 0,
"op": 0,
"path": "assets/textures/café/naïve—ü.png",
"size": 0
}
},
{
"message": "fileOffer",
"label": "empty path",
"note": null,
"truncated": false,
"bytes": "00200303030303030303030303030303030303030303030303030303030303030303010102",
"decoded": {
"contentHash": "0303030303030303030303030303030303030303030303030303030303030303",
"mtime": 1,
"op": 2,
"path": "",
"size": 1
}
},
{
"message": "fileRequest",
"label": "no chunksHave",
"note": "chunksHave defaults to a zero-length buffer, still length-prefixed",
"truncated": false,
"bytes": "05612e62696e20040404040404040404040404040404040404040404040404040404040404040400",
"decoded": {
"chunksHave": {
"$buf": ""
},
"contentHash": "0404040404040404040404040404040404040404040404040404040404040404",
"path": "a.bin"
}
},
{
"message": "fileRequest",
"label": "with chunksHave bitfield",
"note": null,
"truncated": false,
"bytes": "05612e62696e20050505050505050505050505050505050505050505050505050505050505050503ff000f",
"decoded": {
"chunksHave": {
"$buf": "ff000f"
},
"contentHash": "0505050505050505050505050505050505050505050505050505050505050505",
"path": "a.bin"
}
},
{
"message": "chunkHashes",
"label": "empty chunk list",
"note": null,
"truncated": false,
"bytes": "0166000000000000",
"decoded": {
"chunks": [],
"more": 0,
"path": "f",
"tier": 0
}
},
{
"message": "chunkHashes",
"label": "two chunks, final page",
"note": "hashes here are RAW fixed-32, NOT length-prefixed like top-level c.buffer",
"truncated": false,
"bytes": "076269672e70616b0202000000aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafe00000100bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0c00",
"decoded": {
"chunks": [
{
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"length": 65536
},
{
"hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"length": 12
}
],
"more": 0,
"path": "big.pak",
"tier": 2
}
},
{
"message": "chunkHashes",
"label": "paged, more=1",
"note": null,
"truncated": false,
"bytes": "076269672e70616b0201000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0101",
"decoded": {
"chunks": [
{
"hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"length": 1
}
],
"more": 1,
"path": "big.pak",
"tier": 2
}
},
{
"message": "chunkHashes",
"label": "PRE-PAGING peer (no trailing more)",
"note": "old encoder omitted `more` entirely; must decode more:0, not throw",
"truncated": true,
"bytes": "076269672e70616b0201000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc01",
"decoded": {
"chunks": [
{
"hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"length": 1
}
],
"more": 0,
"path": "big.pak",
"tier": 2
}
},
{
"message": "chunkNeed",
"label": "empty indices",
"note": null,
"truncated": false,
"bytes": "016600000000",
"decoded": {
"indices": [],
"path": "f"
}
},
{
"message": "chunkNeed",
"label": "varint-spanning indices",
"note": null,
"truncated": false,
"bytes": "01660600000000fcfdfd00fdfffffe00000100feffffffff",
"decoded": {
"indices": [
0,
252,
253,
65535,
65536,
4294967295
],
"path": "f"
}
},
{
"message": "chunkData",
"label": "empty payload",
"note": null,
"truncated": false,
"bytes": "01660000",
"decoded": {
"data": {
"$buf": ""
},
"index": 0,
"path": "f"
}
},
{
"message": "chunkData",
"label": "binary payload",
"note": null,
"truncated": false,
"bytes": "0166070500ff7f8001",
"decoded": {
"data": {
"$buf": "00ff7f8001"
},
"index": 7,
"path": "f"
}
},
{
"message": "chunkCancel",
"label": "whole-transfer (pre-0.3.0 shape)",
"note": "no indices => decodes {path} only, byte-identical to pre-0.3.0",
"truncated": false,
"bytes": "0166",
"decoded": {
"path": "f"
}
},
{
"message": "chunkCancel",
"label": "per-chunk cancel",
"note": null,
"truncated": false,
"bytes": "0166030102fd2c01",
"decoded": {
"indices": [
1,
2,
300
],
"path": "f"
}
},
{
"message": "transferComplete",
"label": "basic",
"note": null,
"truncated": false,
"bytes": "0166200606060606060606060606060606060606060606060606060606060606060606",
"decoded": {
"contentHash": "0606060606060606060606060606060606060606060606060606060606060606",
"path": "f"
}
},
{
"message": "conflict",
"label": "no ancestor",
"note": "ancestorHash defaults to 32 zero bytes, still encoded",
"truncated": false,
"bytes": "0166200707070707070707070707070707070707070707070707070707070707070707200808080808080808080808080808080808080808080808080808080808080808200000000000000000000000000000000000000000000000000000000000000000",
"decoded": {
"ancestorHash": "0000000000000000000000000000000000000000000000000000000000000000",
"myHash": "0707070707070707070707070707070707070707070707070707070707070707",
"path": "f",
"theirHash": "0808080808080808080808080808080808080808080808080808080808080808"
}
},
{
"message": "conflict",
"label": "with ancestor",
"note": null,
"truncated": false,
"bytes": "0166200909090909090909090909090909090909090909090909090909090909090909200a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a200b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
"decoded": {
"ancestorHash": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
"myHash": "0909090909090909090909090909090909090909090909090909090909090909",
"path": "f",
"theirHash": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a"
}
},
{
"message": "treeRequest",
"label": "with nonce",
"note": null,
"truncated": false,
"bytes": "200c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c2a",
"decoded": {
"hash": "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
"nonce": 42
}
},
{
"message": "treeRequest",
"label": "PRE-NONCE peer",
"note": "old encoder omitted nonce; must decode nonce:0",
"truncated": true,
"bytes": "200c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
"decoded": {
"hash": "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
"nonce": 0
}
},
{
"message": "treeResponse",
"label": "empty tree",
"note": null,
"truncated": false,
"bytes": "200d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d000000000000",
"decoded": {
"entries": [],
"hash": "0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d",
"more": 0,
"nonce": 0
}
},
{
"message": "treeResponse",
"label": "file + dir entries",
"note": null,
"truncated": false,
"bytes": "200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e02000000000009726561646d652e6d6410101010101010101010101010101010101010101010101010101010101010106401010a62696e2f72756e2e73681111111111111111111111111111111111111111111111111111111111111111000007",
"decoded": {
"entries": [
{
"childHash": "1010101010101010101010101010101010101010101010101010101010101010",
"exec": 0,
"kind": 0,
"name": "readme.md",
"size": 100
},
{
"childHash": "1111111111111111111111111111111111111111111111111111111111111111",
"exec": 1,
"kind": 1,
"name": "bin/run.sh",
"size": 0
}
],
"hash": "0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e",
"more": 0,
"nonce": 7
}
},
{
"message": "treeResponse",
"label": "PRE-PAGING peer (no more, no nonce)",
"note": "both trailers absent; each decodes 0 independently",
"truncated": true,
"bytes": "200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e00000000",
"decoded": {
"entries": [],
"hash": "0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e",
"more": 0,
"nonce": 0
}
},
{
"message": "contentRequest",
"label": "with from",
"note": null,
"truncated": false,
"bytes": "201212121212121212121212121212121212121212121212121212121212121212010106616263313233",
"decoded": {
"chunksHave": {
"$buf": "01"
},
"contentHash": "1212121212121212121212121212121212121212121212121212121212121212",
"from": "abc123"
}
},
{
"message": "contentRequest",
"label": "empty from",
"note": null,
"truncated": false,
"bytes": "2013131313131313131313131313131313131313131313131313131313131313130000",
"decoded": {
"chunksHave": {
"$buf": ""
},
"contentHash": "1313131313131313131313131313131313131313131313131313131313131313",
"from": ""
}
},
{
"message": "transferControl",
"label": "paused",
"note": null,
"truncated": false,
"bytes": "20141414141414141414141414141414141414141414141414141414141414141400",
"decoded": {
"contentHash": "1414141414141414141414141414141414141414141414141414141414141414",
"state": 0
}
},
{
"message": "transferControl",
"label": "stopped",
"note": null,
"truncated": false,
"bytes": "20151515151515151515151515151515151515151515151515151515151515151501",
"decoded": {
"contentHash": "1515151515151515151515151515151515151515151515151515151515151515",
"state": 1
}
},
{
"message": "transferProgress",
"label": "zero have",
"note": null,
"truncated": false,
"bytes": "20161616161616161616161616161616161616161616161616161616161616161600",
"decoded": {
"contentHash": "1616161616161616161616161616161616161616161616161616161616161616",
"have": 0
}
},
{
"message": "transferProgress",
"label": "large have",
"note": null,
"truncated": false,
"bytes": "201717171717171717171717171717171717171717171717171717171717171717ff0000000002000000",
"decoded": {
"contentHash": "1717171717171717171717171717171717171717171717171717171717171717",
"have": 8589934592
}
}
]
}