diff --git a/lib/messages.js b/lib/messages.js index b540999..572ae1b 100644 --- a/lib/messages.js +++ b/lib/messages.js @@ -34,10 +34,6 @@ defineHolepunch() defineMessage() function defineHolepunch () { - var enc = [ - encodings.bytes - ] - Holepunch.encodingLength = encodingLength Holepunch.encode = encode Holepunch.decode = decode @@ -45,11 +41,11 @@ function defineHolepunch () { function encodingLength (obj) { var length = 0 if (defined(obj.from)) { - var len = enc[0].encodingLength(obj.from) + var len = encodings.bytes.encodingLength(obj.from) length += 1 + len } if (defined(obj.to)) { - var len = enc[0].encodingLength(obj.to) + var len = encodings.bytes.encodingLength(obj.to) length += 1 + len } return length @@ -61,13 +57,13 @@ function defineHolepunch () { var oldOffset = offset if (defined(obj.from)) { buf[offset++] = 18 - enc[0].encode(obj.from, buf, offset) - offset += enc[0].encode.bytes + encodings.bytes.encode(obj.from, buf, offset) + offset += encodings.bytes.encode.bytes } if (defined(obj.to)) { buf[offset++] = 26 - enc[0].encode(obj.to, buf, offset) - offset += enc[0].encode.bytes + encodings.bytes.encode(obj.to, buf, offset) + offset += encodings.bytes.encode.bytes } encode.bytes = offset - oldOffset return buf @@ -92,12 +88,12 @@ function defineHolepunch () { var tag = prefix >> 3 switch (tag) { case 2: - obj.from = enc[0].decode(buf, offset) - offset += enc[0].decode.bytes + obj.from = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break case 3: - obj.to = enc[0].decode(buf, offset) - offset += enc[0].decode.bytes + obj.to = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break default: offset = skip(prefix & 7, buf, offset) @@ -107,13 +103,6 @@ function defineHolepunch () { } function defineMessage () { - var enc = [ - encodings.enum, - encodings.varint, - encodings.bytes, - encodings.string - ] - Message.encodingLength = encodingLength Message.encode = encode Message.decode = decode @@ -121,37 +110,41 @@ function defineMessage () { function encodingLength (obj) { var length = 0 if (!defined(obj.type)) throw new Error("type is required") - var len = enc[0].encodingLength(obj.type) + var len = encodings.enum.encodingLength(obj.type) length += 1 + len if (!defined(obj.rid)) throw new Error("rid is required") - var len = enc[1].encodingLength(obj.rid) + var len = encodings.varint.encodingLength(obj.rid) length += 1 + len + if (defined(obj.to)) { + var len = encodings.bytes.encodingLength(obj.to) + length += 1 + len + } if (defined(obj.id)) { - var len = enc[2].encodingLength(obj.id) + var len = encodings.bytes.encodingLength(obj.id) length += 1 + len } if (defined(obj.target)) { - var len = enc[2].encodingLength(obj.target) + var len = encodings.bytes.encodingLength(obj.target) length += 1 + len } if (defined(obj.closerNodes)) { - var len = enc[2].encodingLength(obj.closerNodes) + var len = encodings.bytes.encodingLength(obj.closerNodes) length += 1 + len } if (defined(obj.roundtripToken)) { - var len = enc[2].encodingLength(obj.roundtripToken) + var len = encodings.bytes.encodingLength(obj.roundtripToken) length += 1 + len } if (defined(obj.command)) { - var len = enc[3].encodingLength(obj.command) + var len = encodings.string.encodingLength(obj.command) length += 1 + len } if (defined(obj.error)) { - var len = enc[3].encodingLength(obj.error) + var len = encodings.string.encodingLength(obj.error) length += 1 + len } if (defined(obj.value)) { - var len = enc[2].encodingLength(obj.value) + var len = encodings.bytes.encodingLength(obj.value) length += 1 + len } return length @@ -163,46 +156,51 @@ function defineMessage () { var oldOffset = offset if (!defined(obj.type)) throw new Error("type is required") buf[offset++] = 8 - enc[0].encode(obj.type, buf, offset) - offset += enc[0].encode.bytes + encodings.enum.encode(obj.type, buf, offset) + offset += encodings.enum.encode.bytes if (!defined(obj.rid)) throw new Error("rid is required") buf[offset++] = 16 - enc[1].encode(obj.rid, buf, offset) - offset += enc[1].encode.bytes + encodings.varint.encode(obj.rid, buf, offset) + offset += encodings.varint.encode.bytes + if (defined(obj.to)) { + buf[offset++] = 82 + encodings.bytes.encode(obj.to, buf, offset) + offset += encodings.bytes.encode.bytes + } if (defined(obj.id)) { buf[offset++] = 26 - enc[2].encode(obj.id, buf, offset) - offset += enc[2].encode.bytes + encodings.bytes.encode(obj.id, buf, offset) + offset += encodings.bytes.encode.bytes } if (defined(obj.target)) { buf[offset++] = 34 - enc[2].encode(obj.target, buf, offset) - offset += enc[2].encode.bytes + encodings.bytes.encode(obj.target, buf, offset) + offset += encodings.bytes.encode.bytes } if (defined(obj.closerNodes)) { buf[offset++] = 42 - enc[2].encode(obj.closerNodes, buf, offset) - offset += enc[2].encode.bytes + encodings.bytes.encode(obj.closerNodes, buf, offset) + offset += encodings.bytes.encode.bytes } if (defined(obj.roundtripToken)) { buf[offset++] = 50 - enc[2].encode(obj.roundtripToken, buf, offset) - offset += enc[2].encode.bytes + encodings.bytes.encode(obj.roundtripToken, buf, offset) + offset += encodings.bytes.encode.bytes } if (defined(obj.command)) { buf[offset++] = 58 - enc[3].encode(obj.command, buf, offset) - offset += enc[3].encode.bytes + encodings.string.encode(obj.command, buf, offset) + offset += encodings.string.encode.bytes } if (defined(obj.error)) { buf[offset++] = 66 - enc[3].encode(obj.error, buf, offset) - offset += enc[3].encode.bytes + encodings.string.encode(obj.error, buf, offset) + offset += encodings.string.encode.bytes } if (defined(obj.value)) { buf[offset++] = 74 - enc[2].encode(obj.value, buf, offset) - offset += enc[2].encode.bytes + encodings.bytes.encode(obj.value, buf, offset) + offset += encodings.bytes.encode.bytes } encode.bytes = offset - oldOffset return buf @@ -216,6 +214,7 @@ function defineMessage () { var obj = { type: 1, rid: 0, + to: null, id: null, target: null, closerNodes: null, @@ -237,42 +236,46 @@ function defineMessage () { var tag = prefix >> 3 switch (tag) { case 1: - obj.type = enc[0].decode(buf, offset) - offset += enc[0].decode.bytes + obj.type = encodings.enum.decode(buf, offset) + offset += encodings.enum.decode.bytes found0 = true break case 2: - obj.rid = enc[1].decode(buf, offset) - offset += enc[1].decode.bytes + obj.rid = encodings.varint.decode(buf, offset) + offset += encodings.varint.decode.bytes found1 = true break + case 10: + obj.to = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes + break case 3: - obj.id = enc[2].decode(buf, offset) - offset += enc[2].decode.bytes + obj.id = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break case 4: - obj.target = enc[2].decode(buf, offset) - offset += enc[2].decode.bytes + obj.target = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break case 5: - obj.closerNodes = enc[2].decode(buf, offset) - offset += enc[2].decode.bytes + obj.closerNodes = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break case 6: - obj.roundtripToken = enc[2].decode(buf, offset) - offset += enc[2].decode.bytes + obj.roundtripToken = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break case 7: - obj.command = enc[3].decode(buf, offset) - offset += enc[3].decode.bytes + obj.command = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes break case 8: - obj.error = enc[3].decode(buf, offset) - offset += enc[3].decode.bytes + obj.error = encodings.string.decode(buf, offset) + offset += encodings.string.decode.bytes break case 9: - obj.value = enc[2].decode(buf, offset) - offset += enc[2].decode.bytes + obj.value = encodings.bytes.decode(buf, offset) + offset += encodings.bytes.decode.bytes break default: offset = skip(prefix & 7, buf, offset) diff --git a/package.json b/package.json index 866c94b..4ecd5ed 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ }, "homepage": "https://github.com/mafintosh/dht-rpc#readme", "devDependencies": { - "protocol-buffers": "^4.1.0", - "standard": "^12.0.1", - "tape": "^4.9.1" + "protocol-buffers": "^4.1.1", + "standard": "^14.3.1", + "tape": "^4.13.0" }, "dependencies": { "codecs": "^2.0.0", diff --git a/schema.proto b/schema.proto index 7c434e3..f81fc3c 100644 --- a/schema.proto +++ b/schema.proto @@ -13,6 +13,7 @@ message Message { // request/response type + id required TYPE type = 1; required uint64 rid = 2; + optional bytes to = 10; // kademlia stuff optional bytes id = 3;