Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
mf
go-multiaddr
Commits
a581da3f
Commit
a581da3f
authored
Jan 17, 2016
by
Jeromy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add method to lookup values in a multiaddr
parent
b185168c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
0 deletions
+63
-0
interface.go
interface.go
+3
-0
multiaddr.go
multiaddr.go
+29
-0
multiaddr_test.go
multiaddr_test.go
+31
-0
No files found.
interface.go
View file @
a581da3f
...
@@ -39,4 +39,7 @@ type Multiaddr interface {
...
@@ -39,4 +39,7 @@ type Multiaddr interface {
// /ip4/1.2.3.4/tcp/80 decapsulate /ip4/1.2.3.4 = /tcp/80
// /ip4/1.2.3.4/tcp/80 decapsulate /ip4/1.2.3.4 = /tcp/80
//
//
Decapsulate
(
Multiaddr
)
Multiaddr
Decapsulate
(
Multiaddr
)
Multiaddr
// ValueForProtocol returns the value (if any) following the specified protocol
ValueForProtocol
(
code
int
)
(
string
,
error
)
}
}
multiaddr.go
View file @
a581da3f
...
@@ -113,3 +113,32 @@ func (m *multiaddr) Decapsulate(o Multiaddr) Multiaddr {
...
@@ -113,3 +113,32 @@ func (m *multiaddr) Decapsulate(o Multiaddr) Multiaddr {
}
}
return
ma
return
ma
}
}
var
ErrProtocolNotFound
=
fmt
.
Errorf
(
"protocol not found in multiaddr"
)
func
(
m
*
multiaddr
)
ValueForProtocol
(
code
int
)
(
string
,
error
)
{
protos
:=
m
.
Protocols
()
found
:=
-
1
index
:=
2
for
i
,
p
:=
range
protos
{
if
code
==
p
.
Code
{
if
p
.
Size
==
0
{
return
""
,
nil
}
found
=
i
break
}
else
{
index
+=
2
if
p
.
Size
==
0
{
index
--
}
}
}
if
found
==
-
1
{
return
""
,
ErrProtocolNotFound
}
return
strings
.
Split
(
m
.
String
(),
"/"
)[
index
],
nil
}
multiaddr_test.go
View file @
a581da3f
...
@@ -300,3 +300,34 @@ func TestEncapsulate(t *testing.T) {
...
@@ -300,3 +300,34 @@ func TestEncapsulate(t *testing.T) {
t
.
Error
(
"decapsulate /ip4 failed."
,
"/"
,
s
)
t
.
Error
(
"decapsulate /ip4 failed."
,
"/"
,
s
)
}
}
}
}
func
assertValueForProto
(
t
*
testing
.
T
,
a
Multiaddr
,
p
int
,
exp
string
)
{
t
.
Logf
(
"checking for %s in %s"
,
ProtocolWithCode
(
p
)
.
Name
,
a
)
fv
,
err
:=
a
.
ValueForProtocol
(
p
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
fv
!=
exp
{
t
.
Fatalf
(
"expected %q for %d in %d, but got %q instead"
,
exp
,
p
,
a
,
fv
)
}
}
func
TestGetValue
(
t
*
testing
.
T
)
{
a
:=
newMultiaddr
(
t
,
"/ip4/127.0.0.1/utp/tcp/5555/udp/1234/utp/ipfs/QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP"
)
assertValueForProto
(
t
,
a
,
P_IP4
,
"127.0.0.1"
)
assertValueForProto
(
t
,
a
,
P_UTP
,
""
)
assertValueForProto
(
t
,
a
,
P_TCP
,
"5555"
)
assertValueForProto
(
t
,
a
,
P_UDP
,
"1234"
)
assertValueForProto
(
t
,
a
,
P_IPFS
,
"QmbHVEEepCi7rn7VL7Exxpd2Ci9NNB6ifvqwhsrbRMgQFP"
)
_
,
err
:=
a
.
ValueForProtocol
(
P_IP6
)
switch
err
{
case
ErrProtocolNotFound
:
break
case
nil
:
t
.
Fatal
(
"expected value lookup to fail"
)
default
:
t
.
Fatalf
(
"expected ErrProtocolNotFound but got: %s"
,
err
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment