Does not allow an empty MA (#877)
This commit is contained in:
parent
0041ed4cf8
commit
80cca0ecac
|
@ -34,7 +34,7 @@ type
|
||||||
coder*: Transcoder
|
coder*: Transcoder
|
||||||
|
|
||||||
MultiAddress* = object
|
MultiAddress* = object
|
||||||
data*: VBuffer
|
data: VBuffer
|
||||||
|
|
||||||
MaPatternOp* = enum
|
MaPatternOp* = enum
|
||||||
Eq, Or, And
|
Eq, Or, And
|
||||||
|
@ -63,6 +63,10 @@ const
|
||||||
IPPROTO_TCP = Protocol.IPPROTO_TCP
|
IPPROTO_TCP = Protocol.IPPROTO_TCP
|
||||||
IPPROTO_UDP = Protocol.IPPROTO_UDP
|
IPPROTO_UDP = Protocol.IPPROTO_UDP
|
||||||
|
|
||||||
|
proc data*(ma: MultiAddress): VBuffer =
|
||||||
|
## Returns the data buffer of the MultiAddress.
|
||||||
|
return ma.data
|
||||||
|
|
||||||
proc hash*(a: MultiAddress): Hash =
|
proc hash*(a: MultiAddress): Hash =
|
||||||
var h: Hash = 0
|
var h: Hash = 0
|
||||||
h = h !& hash(a.data.buffer)
|
h = h !& hash(a.data.buffer)
|
||||||
|
@ -873,6 +877,8 @@ proc getProtocol(name: string): MAProtocol {.inline.} =
|
||||||
proc init*(mtype: typedesc[MultiAddress],
|
proc init*(mtype: typedesc[MultiAddress],
|
||||||
value: string): MaResult[MultiAddress] =
|
value: string): MaResult[MultiAddress] =
|
||||||
## Initialize MultiAddress object from string representation ``value``.
|
## Initialize MultiAddress object from string representation ``value``.
|
||||||
|
if len(value) == 0 or value == "/":
|
||||||
|
return err("multiaddress: Address must not be empty!")
|
||||||
var parts = value.trimRight('/').split('/')
|
var parts = value.trimRight('/').split('/')
|
||||||
if len(parts[0]) != 0:
|
if len(parts[0]) != 0:
|
||||||
err("multiaddress: Invalid MultiAddress, must start with `/`")
|
err("multiaddress: Invalid MultiAddress, must start with `/`")
|
||||||
|
@ -920,7 +926,7 @@ proc init*(mtype: typedesc[MultiAddress],
|
||||||
data: openArray[byte]): MaResult[MultiAddress] =
|
data: openArray[byte]): MaResult[MultiAddress] =
|
||||||
## Initialize MultiAddress with array of bytes ``data``.
|
## Initialize MultiAddress with array of bytes ``data``.
|
||||||
if len(data) == 0:
|
if len(data) == 0:
|
||||||
err("multiaddress: Address could not be empty!")
|
err("multiaddress: Address must not be empty!")
|
||||||
else:
|
else:
|
||||||
var res: MultiAddress
|
var res: MultiAddress
|
||||||
res.data = initVBuffer()
|
res.data = initVBuffer()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import unittest2
|
import unittest2
|
||||||
|
import stew/byteutils
|
||||||
import ../libp2p/[multicodec, multiaddress]
|
import ../libp2p/[multicodec, multiaddress]
|
||||||
|
|
||||||
when defined(nimHasUsed): {.used.}
|
when defined(nimHasUsed): {.used.}
|
||||||
|
@ -62,6 +63,8 @@ const
|
||||||
]
|
]
|
||||||
|
|
||||||
FailureVectors = [
|
FailureVectors = [
|
||||||
|
"",
|
||||||
|
"/",
|
||||||
"/ip4",
|
"/ip4",
|
||||||
"/ip4/::1",
|
"/ip4/::1",
|
||||||
"/ip4/fdpsofodsajfdoisa",
|
"/ip4/fdpsofodsajfdoisa",
|
||||||
|
@ -299,6 +302,7 @@ suite "MultiAddress test suite":
|
||||||
test "go-multiaddr failure test vectors":
|
test "go-multiaddr failure test vectors":
|
||||||
for item in FailureVectors:
|
for item in FailureVectors:
|
||||||
check MultiAddress.init(item).isErr()
|
check MultiAddress.init(item).isErr()
|
||||||
|
check MultiAddress.init(item.toBytes()).isErr()
|
||||||
|
|
||||||
test "rust-multiaddr success test vectors":
|
test "rust-multiaddr success test vectors":
|
||||||
## Rust test vectors are with changed UDP encoding and without WSS
|
## Rust test vectors are with changed UDP encoding and without WSS
|
||||||
|
|
|
@ -144,7 +144,6 @@ suite "Name resolving":
|
||||||
test "getHostname":
|
test "getHostname":
|
||||||
check:
|
check:
|
||||||
MultiAddress.init("/dnsaddr/bootstrap.libp2p.io/").tryGet().getHostname == "bootstrap.libp2p.io"
|
MultiAddress.init("/dnsaddr/bootstrap.libp2p.io/").tryGet().getHostname == "bootstrap.libp2p.io"
|
||||||
MultiAddress.init("").tryGet().getHostname == ""
|
|
||||||
MultiAddress.init("/ip4/147.75.69.143/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN").tryGet().getHostname == "147.75.69.143"
|
MultiAddress.init("/ip4/147.75.69.143/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN").tryGet().getHostname == "147.75.69.143"
|
||||||
MultiAddress.init("/ip6/2604:1380:1000:6000::1/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN").tryGet().getHostname == "2604:1380:1000:6000::1"
|
MultiAddress.init("/ip6/2604:1380:1000:6000::1/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN").tryGet().getHostname == "2604:1380:1000:6000::1"
|
||||||
MultiAddress.init("/dns/localhost/udp/0").tryGet().getHostname == "localhost"
|
MultiAddress.init("/dns/localhost/udp/0").tryGet().getHostname == "localhost"
|
||||||
|
|
Loading…
Reference in New Issue