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
0e7ae0d2
Commit
0e7ae0d2
authored
Aug 31, 2015
by
David Stainton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Renamed tor to onion and added embedded port field
parent
ed310561
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
35 additions
and
15 deletions
+35
-15
codec.go
codec.go
+27
-7
multiaddr_test.go
multiaddr_test.go
+5
-5
protocols.csv
protocols.csv
+1
-1
protocols.go
protocols.go
+2
-2
No files found.
codec.go
View file @
0e7ae0d2
...
@@ -166,16 +166,36 @@ func addressStringToBytes(p Protocol, s string) ([]byte, error) {
...
@@ -166,16 +166,36 @@ func addressStringToBytes(p Protocol, s string) ([]byte, error) {
binary
.
BigEndian
.
PutUint16
(
b
,
uint16
(
i
))
binary
.
BigEndian
.
PutUint16
(
b
,
uint16
(
i
))
return
b
,
nil
return
b
,
nil
case
P_
TOR
:
case
P_
ONION
:
fields
:=
strings
.
Split
(
s
,
"
.onion
"
)
addr
:=
strings
.
Split
(
s
,
"
:
"
)
if
len
(
fields
)
!=
2
{
if
len
(
addr
)
!=
2
{
return
nil
,
fmt
.
Errorf
(
"failed to parse
ipf
s addr: %s
not a Tor .onion address."
,
s
)
return
nil
,
fmt
.
Errorf
(
"failed to parse
%
s addr: %s
does not contain a port number."
,
p
.
Name
,
s
)
}
}
b
,
err
:=
base32
.
StdEncoding
.
DecodeString
(
strings
.
ToUpper
(
fields
[
0
]))
// onion address without the ".onion" substring
if
len
(
addr
[
0
])
!=
16
{
return
nil
,
fmt
.
Errorf
(
"failed to parse %s addr: %s not a Tor onion address."
,
p
.
Name
,
s
)
}
onionHostBytes
,
err
:=
base32
.
StdEncoding
.
DecodeString
(
strings
.
ToUpper
(
addr
[
0
]))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to
parse ipf
s addr: %s %s"
,
s
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to
decode base32 %
s addr: %s %s"
,
p
.
Name
,
s
,
err
)
}
}
return
b
,
nil
// onion port number
i
,
err
:=
strconv
.
Atoi
(
addr
[
1
])
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to parse %s addr: %s"
,
p
.
Name
,
err
)
}
if
i
>=
65536
{
return
nil
,
fmt
.
Errorf
(
"failed to parse %s addr: %s"
,
p
.
Name
,
"greater than 65536"
)
}
onionPortBytes
:=
make
([]
byte
,
2
)
binary
.
BigEndian
.
PutUint16
(
onionPortBytes
,
uint16
(
i
))
bytes
:=
[]
byte
{}
bytes
=
append
(
bytes
,
onionHostBytes
...
)
bytes
=
append
(
bytes
,
onionPortBytes
...
)
return
bytes
,
nil
case
P_IPFS
:
// ipfs
case
P_IPFS
:
// ipfs
// the address is a varint prefixed multihash string representation
// the address is a varint prefixed multihash string representation
m
,
err
:=
mh
.
FromB58String
(
s
)
m
,
err
:=
mh
.
FromB58String
(
s
)
...
...
multiaddr_test.go
View file @
0e7ae0d2
...
@@ -25,8 +25,9 @@ func TestConstructFails(t *testing.T) {
...
@@ -25,8 +25,9 @@ func TestConstructFails(t *testing.T) {
"/sctp"
,
"/sctp"
,
"/udp/65536"
,
"/udp/65536"
,
"/tcp/65536"
,
"/tcp/65536"
,
"/tor/9imaq4ygg2iegci7.onion"
,
"/onion/9imaq4ygg2iegci7:80"
,
"/tor/aaimaq4ygg2iegci7.onion"
,
"/onion/aaimaq4ygg2iegci7:80"
,
"/onion/timaq4ygg2iegci7"
,
"/udp/1234/sctp"
,
"/udp/1234/sctp"
,
"/udp/1234/udt/1234"
,
"/udp/1234/udt/1234"
,
"/udp/1234/utp/1234"
,
"/udp/1234/utp/1234"
,
...
@@ -51,9 +52,8 @@ func TestConstructSucceeds(t *testing.T) {
...
@@ -51,9 +52,8 @@ func TestConstructSucceeds(t *testing.T) {
"/ip4/0.0.0.0"
,
"/ip4/0.0.0.0"
,
"/ip6/::1"
,
"/ip6/::1"
,
"/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21"
,
"/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21"
,
"/tor/timaq4ygg2iegci7.onion"
,
"/onion/timaq4ygg2iegci7:1234"
,
"/tor/timaq4ygg2iegci7.onion/tcp/1234"
,
"/onion/timaq4ygg2iegci7:80/http"
,
"/tor/timaq4ygg2iegci7.onion/tcp/80/http"
,
"/udp/0"
,
"/udp/0"
,
"/tcp/0"
,
"/tcp/0"
,
"/sctp/0"
,
"/sctp/0"
,
...
...
protocols.csv
View file @
0e7ae0d2
...
@@ -5,9 +5,9 @@ code size name
...
@@ -5,9 +5,9 @@ code size name
33 16 dccp
33 16 dccp
41 128 ip6
41 128 ip6
132 16 sctp
132 16 sctp
133 10 tor
301 0 udt
301 0 udt
302 0 utp
302 0 utp
421 V ipfs
421 V ipfs
480 0 http
480 0 http
443 0 https
443 0 https
444 10 onion
\ No newline at end of file
protocols.go
View file @
0e7ae0d2
...
@@ -25,12 +25,12 @@ const (
...
@@ -25,12 +25,12 @@ const (
P_DCCP
=
33
P_DCCP
=
33
P_IP6
=
41
P_IP6
=
41
P_SCTP
=
132
P_SCTP
=
132
P_TOR
=
133
P_UTP
=
301
P_UTP
=
301
P_UDT
=
302
P_UDT
=
302
P_IPFS
=
421
P_IPFS
=
421
P_HTTP
=
480
P_HTTP
=
480
P_HTTPS
=
443
P_HTTPS
=
443
P_ONION
=
444
)
)
// These are special sizes
// These are special sizes
...
@@ -47,7 +47,7 @@ var Protocols = []Protocol{
...
@@ -47,7 +47,7 @@ var Protocols = []Protocol{
Protocol
{
P_IP6
,
128
,
"ip6"
,
CodeToVarint
(
P_IP6
)},
Protocol
{
P_IP6
,
128
,
"ip6"
,
CodeToVarint
(
P_IP6
)},
// these require varint:
// these require varint:
Protocol
{
P_SCTP
,
16
,
"sctp"
,
CodeToVarint
(
P_SCTP
)},
Protocol
{
P_SCTP
,
16
,
"sctp"
,
CodeToVarint
(
P_SCTP
)},
Protocol
{
P_
TOR
,
10
,
"
tor
"
,
CodeToVarint
(
P_
TOR
)},
Protocol
{
P_
ONION
,
10
,
"
onion
"
,
CodeToVarint
(
P_
ONION
)},
Protocol
{
P_UTP
,
0
,
"utp"
,
CodeToVarint
(
P_UTP
)},
Protocol
{
P_UTP
,
0
,
"utp"
,
CodeToVarint
(
P_UTP
)},
Protocol
{
P_UDT
,
0
,
"udt"
,
CodeToVarint
(
P_UDT
)},
Protocol
{
P_UDT
,
0
,
"udt"
,
CodeToVarint
(
P_UDT
)},
Protocol
{
P_HTTP
,
0
,
"http"
,
CodeToVarint
(
P_HTTP
)},
Protocol
{
P_HTTP
,
0
,
"http"
,
CodeToVarint
(
P_HTTP
)},
...
...
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