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
8988e82d
Unverified
Commit
8988e82d
authored
Sep 24, 2018
by
Steven Allen
Committed by
GitHub
Sep 24, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #69 from mwnx/ip6z
Add "ip6%" multiaddr (IPv6 with zone ID)
parents
de7d6d81
6f084e63
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
15 deletions
+85
-15
multiaddr_test.go
multiaddr_test.go
+36
-0
protocols.go
protocols.go
+25
-15
transcoders.go
transcoders.go
+24
-0
No files found.
multiaddr_test.go
View file @
8988e82d
...
...
@@ -23,6 +23,9 @@ func TestConstructFails(t *testing.T) {
"/ip4/::1"
,
"/ip4/fdpsofodsajfdoisa"
,
"/ip6"
,
"/ip6zone"
,
"/ip6zone/"
,
"/ip6zone//ip6/fe80::1"
,
"/udp"
,
"/tcp"
,
"/sctp"
,
...
...
@@ -65,6 +68,10 @@ func TestConstructSucceeds(t *testing.T) {
"/ip6/::1"
,
"/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21"
,
"/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21/udp/1234/quic"
,
"/ip6zone/x/ip6/fe80::1"
,
"/ip6zone/x%y/ip6/fe80::1"
,
"/ip6zone/x%y/ip6/::"
,
"/ip6zone/x/ip6/fe80::1/udp/1234/quic"
,
"/onion/timaq4ygg2iegci7:1234"
,
"/onion/timaq4ygg2iegci7:80/http"
,
"/udp/0"
,
...
...
@@ -492,3 +499,32 @@ func TestInvalidP2PAddr(t *testing.T) {
_
=
ma
.
String
()
}
}
func
TestZone
(
t
*
testing
.
T
)
{
ip6String
:=
"/ip6zone/eth0/ip6/::1"
ip6Bytes
:=
[]
byte
{
0x2a
,
4
,
'e'
,
't'
,
'h'
,
'0'
,
0x29
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
}
ma
,
err
:=
NewMultiaddr
(
ip6String
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
!
bytes
.
Equal
(
ma
.
Bytes
(),
ip6Bytes
)
{
t
.
Errorf
(
"expected %x, got %x"
,
ip6Bytes
,
ma
.
Bytes
())
}
ma2
,
err2
:=
NewMultiaddrBytes
(
ip6Bytes
)
if
err2
!=
nil
{
t
.
Error
(
err
)
}
if
ma2
.
String
()
!=
ip6String
{
t
.
Errorf
(
"expected %s, got %s"
,
ip6String
,
ma2
.
String
())
}
}
protocols.go
View file @
8988e82d
...
...
@@ -6,21 +6,22 @@ package multiaddr
// TODO: Use a single source of truth for all multicodecs instead of
// distributing them like this...
const
(
P_IP4
=
0x0004
P_TCP
=
0x0006
P_UDP
=
0x0111
P_DCCP
=
0x0021
P_IP6
=
0x0029
P_QUIC
=
0x01CC
P_SCTP
=
0x0084
P_UDT
=
0x012D
P_UTP
=
0x012E
P_UNIX
=
0x0190
P_P2P
=
0x01A5
P_IPFS
=
0x01A5
// alias for backwards compatability
P_HTTP
=
0x01E0
P_HTTPS
=
0x01BB
P_ONION
=
0x01BC
P_IP4
=
0x0004
P_TCP
=
0x0006
P_UDP
=
0x0111
P_DCCP
=
0x0021
P_IP6
=
0x0029
P_IP6ZONE
=
0x002A
P_QUIC
=
0x01CC
P_SCTP
=
0x0084
P_UDT
=
0x012D
P_UTP
=
0x012E
P_UNIX
=
0x0190
P_P2P
=
0x01A5
P_IPFS
=
0x01A5
// alias for backwards compatability
P_HTTP
=
0x01E0
P_HTTPS
=
0x01BB
P_ONION
=
0x01BC
)
var
(
...
...
@@ -64,6 +65,14 @@ var (
Transcoder
:
TranscoderIP6
,
}
// these require varint
protoIP6ZONE
=
Protocol
{
Name
:
"ip6zone"
,
Code
:
P_IP6ZONE
,
VCode
:
CodeToVarint
(
P_IP6ZONE
),
Size
:
LengthPrefixedVarSize
,
Path
:
false
,
Transcoder
:
TranscoderIP6Zone
,
}
protoSCTP
=
Protocol
{
Name
:
"sctp"
,
Code
:
P_SCTP
,
...
...
@@ -127,6 +136,7 @@ func init() {
protoUDP
,
protoDCCP
,
protoIP6
,
protoIP6ZONE
,
protoSCTP
,
protoONION
,
protoUTP
,
...
...
transcoders.go
View file @
8988e82d
package
multiaddr
import
(
"bytes"
"encoding/base32"
"encoding/binary"
"fmt"
...
...
@@ -47,6 +48,7 @@ func (t twrp) ValidateBytes(b []byte) error {
var
TranscoderIP4
=
NewTranscoderFromFunctions
(
ip4StB
,
ipBtS
,
nil
)
var
TranscoderIP6
=
NewTranscoderFromFunctions
(
ip6StB
,
ipBtS
,
nil
)
var
TranscoderIP6Zone
=
NewTranscoderFromFunctions
(
ip6zoneStB
,
ip6zoneBtS
,
ip6zoneVal
)
func
ip4StB
(
s
string
)
([]
byte
,
error
)
{
i
:=
net
.
ParseIP
(
s
)
.
To4
()
...
...
@@ -56,6 +58,28 @@ func ip4StB(s string) ([]byte, error) {
return
i
,
nil
}
func
ip6zoneStB
(
s
string
)
([]
byte
,
error
)
{
if
len
(
s
)
==
0
{
return
nil
,
fmt
.
Errorf
(
"empty ip6zone"
)
}
return
[]
byte
(
s
),
nil
}
func
ip6zoneBtS
(
b
[]
byte
)
(
string
,
error
)
{
if
len
(
b
)
==
0
{
return
""
,
fmt
.
Errorf
(
"invalid length (should be > 0)"
)
}
return
string
(
b
),
nil
}
func
ip6zoneVal
(
b
[]
byte
)
error
{
// Not supported as this would break multiaddrs.
if
bytes
.
IndexByte
(
b
,
'/'
)
>=
0
{
return
fmt
.
Errorf
(
"IPv6 zone ID contains '/': %s"
,
string
(
b
))
}
return
nil
}
func
ip6StB
(
s
string
)
([]
byte
,
error
)
{
i
:=
net
.
ParseIP
(
s
)
.
To16
()
if
i
==
nil
{
...
...
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