fix: Multiaddr from fields function

This commit is contained in:
Franck Royer 2022-06-23 15:51:15 +10:00
parent ab9919ba6d
commit 6d5c2acb99
No known key found for this signature in database
GPG Key ID: A82ED75A8DFC50A4
3 changed files with 28 additions and 10 deletions

View File

@ -347,7 +347,7 @@ export class ENR extends Map<ENRKey, ENRValue> {
const isIpv6 = protocol.endsWith("6"); const isIpv6 = protocol.endsWith("6");
const ipVal = this.get(isIpv6 ? "ip6" : "ip"); const ipVal = this.get(isIpv6 ? "ip6" : "ip");
if (!ipVal) { if (!ipVal) {
return undefined; return;
} }
const isUdp = protocol.startsWith("udp"); const isUdp = protocol.startsWith("udp");
@ -367,7 +367,12 @@ export class ENR extends Map<ENRKey, ENRValue> {
return; return;
} }
return mulitaddrFromFields(isIpv6, protoName, ipVal, protoVal); return mulitaddrFromFields(
isIpv6 ? "ip6" : "ip4",
protoName,
ipVal,
protoVal
);
} }
setLocationMultiaddr(multiaddr: Multiaddr): void { setLocationMultiaddr(multiaddr: Multiaddr): void {

View File

@ -8,8 +8,17 @@ describe("Multiaddr from fields", () => {
const ipBytes = convertToBytes("ip4", "1.2.3.4"); const ipBytes = convertToBytes("ip4", "1.2.3.4");
const portBytes = convertToBytes("tcp", "3333"); const portBytes = convertToBytes("tcp", "3333");
const ma = mulitaddrFromFields(false, "tcp", ipBytes, portBytes); const ma = mulitaddrFromFields("ip4", "tcp", ipBytes, portBytes);
expect(ma.toString()).to.eq("/ip4/1.2.3.4/tcp/3333"); expect(ma.toString()).to.eq("/ip4/1.2.3.4/tcp/3333");
}); });
it("udp ip6 address", function () {
const ipBytes = convertToBytes("ip6", "2345:425:2ca1::5673:23b5");
const portBytes = convertToBytes("udp", "1111");
const ma = mulitaddrFromFields("ip6", "udp", ipBytes, portBytes);
expect(ma.toString()).to.eq("/ip6/2345:425:2ca1::5673:23b5/udp/1111");
});
}); });

View File

@ -1,17 +1,21 @@
import { Multiaddr } from "@multiformats/multiaddr"; import { Multiaddr } from "@multiformats/multiaddr";
import { convertToString } from "@multiformats/multiaddr/convert";
export function mulitaddrFromFields( export function mulitaddrFromFields(
isIpv6: boolean, ipFamily: string,
protocol: string, protocol: string,
ipBytes: Uint8Array, ipBytes: Uint8Array,
portBytes: Uint8Array protocolBytes: Uint8Array
): Multiaddr { ): Multiaddr {
const familyStr = isIpv6 ? "ip6" : "ip4"; let ma = new Multiaddr(
let ma = new Multiaddr("/" + familyStr); "/" + ipFamily + "/" + convertToString(ipFamily, ipBytes)
);
ma = ma.encapsulate(new Multiaddr(ipBytes)); ma = ma.encapsulate(
ma = ma.encapsulate(new Multiaddr("/" + protocol)); new Multiaddr(
ma = ma.encapsulate(portBytes); "/" + protocol + "/" + convertToString(protocol, protocolBytes)
)
);
return ma; return ma;
} }