mirror of
https://github.com/waku-org/go-multiaddr.git
synced 2025-02-23 19:48:18 +00:00
ProtocolsWithString
This commit is contained in:
parent
17f4666d01
commit
32d9d68b64
@ -216,6 +216,46 @@ func TestProtocols(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProtocolsWithString(t *testing.T) {
|
||||||
|
pwn := ProtocolWithName
|
||||||
|
good := map[string][]Protocol{
|
||||||
|
"/ip4": []Protocol{pwn("ip4")},
|
||||||
|
"/ip4/tcp": []Protocol{pwn("ip4"), pwn("tcp")},
|
||||||
|
"ip4/tcp/udp/ip6": []Protocol{pwn("ip4"), pwn("tcp"), pwn("udp"), pwn("ip6")},
|
||||||
|
"////////ip4/tcp": []Protocol{pwn("ip4"), pwn("tcp")},
|
||||||
|
"ip4/udp/////////": []Protocol{pwn("ip4"), pwn("udp")},
|
||||||
|
"////////ip4/tcp////////": []Protocol{pwn("ip4"), pwn("tcp")},
|
||||||
|
}
|
||||||
|
|
||||||
|
for s, ps1 := range good {
|
||||||
|
ps2, err := ProtocolsWithString(s)
|
||||||
|
if err != nil {
|
||||||
|
t.Error("ProtocolsWithString(%s) should have succeeded", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, ps1p := range ps1 {
|
||||||
|
ps2p := ps2[i]
|
||||||
|
if ps1p.Code != ps2p.Code {
|
||||||
|
t.Errorf("mismatch: %s != %s, %s", ps1p.Name, ps2p.Name, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bad := []string{
|
||||||
|
"dsijafd", // bogus proto
|
||||||
|
"/ip4/tcp/fidosafoidsa", // bogus proto
|
||||||
|
"////////ip4/tcp/21432141/////////", // bogus proto
|
||||||
|
"////////ip4///////tcp/////////", // empty protos in between
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, s := range bad {
|
||||||
|
if _, err := ProtocolsWithString(s); err == nil {
|
||||||
|
t.Error("ProtocolsWithString(%s) should have failed", s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestEncapsulate(t *testing.T) {
|
func TestEncapsulate(t *testing.T) {
|
||||||
m, err := NewMultiaddr("/ip4/127.0.0.1/udp/1234")
|
m, err := NewMultiaddr("/ip4/127.0.0.1/udp/1234")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
21
protocols.go
21
protocols.go
@ -2,6 +2,8 @@ package multiaddr
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Protocol is a Multiaddr protocol description structure.
|
// Protocol is a Multiaddr protocol description structure.
|
||||||
@ -62,6 +64,25 @@ func ProtocolWithCode(c int) Protocol {
|
|||||||
return Protocol{}
|
return Protocol{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProtocolsWithString returns a slice of protocols matching given string.
|
||||||
|
func ProtocolsWithString(s string) ([]Protocol, error) {
|
||||||
|
s = strings.Trim(s, "/")
|
||||||
|
sp := strings.Split(s, "/")
|
||||||
|
if len(sp) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
t := make([]Protocol, len(sp))
|
||||||
|
for i, name := range sp {
|
||||||
|
p := ProtocolWithName(name)
|
||||||
|
if p.Code == 0 {
|
||||||
|
return nil, fmt.Errorf("no protocol with name: %s", name)
|
||||||
|
}
|
||||||
|
t[i] = p
|
||||||
|
}
|
||||||
|
return t, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CodeToVarint converts an integer to a varint-encoded []byte
|
// CodeToVarint converts an integer to a varint-encoded []byte
|
||||||
func CodeToVarint(num int) []byte {
|
func CodeToVarint(num int) []byte {
|
||||||
buf := make([]byte, (num/7)+1) // varint package is uint64
|
buf := make([]byte, (num/7)+1) // varint package is uint64
|
||||||
|
Loading…
x
Reference in New Issue
Block a user