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
dd8f16c4
Commit
dd8f16c4
authored
Sep 25, 2015
by
Juan Benet
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13 from david415/support-tor-onion
Add Tor .onion address support and unit test cases
parents
c13f11bb
24ecf94c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
0 deletions
+46
-0
codec.go
codec.go
+35
-0
multiaddr_test.go
multiaddr_test.go
+8
-0
protocols.csv
protocols.csv
+1
-0
protocols.go
protocols.go
+2
-0
No files found.
codec.go
View file @
dd8f16c4
package
multiaddr
import
(
"encoding/base32"
"encoding/binary"
"errors"
"fmt"
...
...
@@ -165,6 +166,40 @@ func addressStringToBytes(p Protocol, s string) ([]byte, error) {
binary
.
BigEndian
.
PutUint16
(
b
,
uint16
(
i
))
return
b
,
nil
case
P_ONION
:
addr
:=
strings
.
Split
(
s
,
":"
)
if
len
(
addr
)
!=
2
{
return
nil
,
fmt
.
Errorf
(
"failed to parse %s addr: %s does not contain a port number."
,
p
.
Name
,
s
)
}
// 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
{
return
nil
,
fmt
.
Errorf
(
"failed to decode base32 %s addr: %s %s"
,
p
.
Name
,
s
,
err
)
}
// 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
,
"port greater than 65536"
)
}
if
i
<
1
{
return
nil
,
fmt
.
Errorf
(
"failed to parse %s addr: %s"
,
p
.
Name
,
"port less than 1"
)
}
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
// the address is a varint prefixed multihash string representation
m
,
err
:=
mh
.
FromB58String
(
s
)
...
...
multiaddr_test.go
View file @
dd8f16c4
...
...
@@ -25,6 +25,12 @@ func TestConstructFails(t *testing.T) {
"/sctp"
,
"/udp/65536"
,
"/tcp/65536"
,
"/onion/9imaq4ygg2iegci7:80"
,
"/onion/aaimaq4ygg2iegci7:80"
,
"/onion/timaq4ygg2iegci7:0"
,
"/onion/timaq4ygg2iegci7:-1"
,
"/onion/timaq4ygg2iegci7"
,
"/onion/timaq4ygg2iegci@:666"
,
"/udp/1234/sctp"
,
"/udp/1234/udt/1234"
,
"/udp/1234/utp/1234"
,
...
...
@@ -49,6 +55,8 @@ func TestConstructSucceeds(t *testing.T) {
"/ip4/0.0.0.0"
,
"/ip6/::1"
,
"/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21"
,
"/onion/timaq4ygg2iegci7:1234"
,
"/onion/timaq4ygg2iegci7:80/http"
,
"/udp/0"
,
"/tcp/0"
,
"/sctp/0"
,
...
...
protocols.csv
View file @
dd8f16c4
...
...
@@ -10,3 +10,4 @@ code size name
421 V ipfs
480 0 http
443 0 https
444 10 onion
\ No newline at end of file
protocols.go
View file @
dd8f16c4
...
...
@@ -30,6 +30,7 @@ const (
P_IPFS
=
421
P_HTTP
=
480
P_HTTPS
=
443
P_ONION
=
444
)
// These are special sizes
...
...
@@ -46,6 +47,7 @@ var Protocols = []Protocol{
Protocol
{
P_IP6
,
128
,
"ip6"
,
CodeToVarint
(
P_IP6
)},
// these require varint:
Protocol
{
P_SCTP
,
16
,
"sctp"
,
CodeToVarint
(
P_SCTP
)},
Protocol
{
P_ONION
,
80
,
"onion"
,
CodeToVarint
(
P_ONION
)},
Protocol
{
P_UTP
,
0
,
"utp"
,
CodeToVarint
(
P_UTP
)},
Protocol
{
P_UDT
,
0
,
"udt"
,
CodeToVarint
(
P_UDT
)},
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