Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
726f53ff
提交
726f53ff
authored
10月 10, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
updated multiaddr
上级
338b0372
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
123 行增加
和
7 行删除
+123
-7
Godeps.json
Godeps/Godeps.json
+2
-2
codec.go
...ps/_workspace/src/github.com/jbenet/go-multiaddr/codec.go
+4
-0
multiaddr_test.go
...pace/src/github.com/jbenet/go-multiaddr/multiaddr_test.go
+9
-0
net.go
Godeps/_workspace/src/github.com/jbenet/go-multiaddr/net.go
+42
-5
net_test.go
..._workspace/src/github.com/jbenet/go-multiaddr/net_test.go
+66
-0
没有找到文件。
Godeps/Godeps.json
浏览文件 @
726f53ff
...
...
@@ -84,8 +84,8 @@
},
{
"ImportPath"
:
"github.com/jbenet/go-multiaddr"
,
"Comment"
:
"0.1.2-
9-g1ec9436
"
,
"Rev"
:
"
1ec9436b1d642f4f04c0d9e21a0719cda3d659ee
"
"Comment"
:
"0.1.2-
11-g2a572df
"
,
"Rev"
:
"
2a572df05cbbb3a0b0b3d0095a9af16757cbbf9f
"
},
{
"ImportPath"
:
"github.com/jbenet/go-multihash"
,
...
...
Godeps/_workspace/src/github.com/jbenet/go-multiaddr/codec.go
浏览文件 @
726f53ff
...
...
@@ -9,6 +9,10 @@ import (
)
func
stringToBytes
(
s
string
)
([]
byte
,
error
)
{
// consume trailing slashes
s
=
strings
.
TrimRight
(
s
,
"/"
)
b
:=
[]
byte
{}
sp
:=
strings
.
Split
(
s
,
"/"
)
...
...
Godeps/_workspace/src/github.com/jbenet/go-multiaddr/multiaddr_test.go
浏览文件 @
726f53ff
...
...
@@ -18,6 +18,7 @@ func TestEqual(t *testing.T) {
m1
:=
newMultiaddr
(
t
,
"/ip4/127.0.0.1/udp/1234"
)
m2
:=
newMultiaddr
(
t
,
"/ip4/127.0.0.1/tcp/1234"
)
m3
:=
newMultiaddr
(
t
,
"/ip4/127.0.0.1/tcp/1234"
)
m4
:=
newMultiaddr
(
t
,
"/ip4/127.0.0.1/tcp/1234/"
)
if
m1
.
Equal
(
m2
)
{
t
.
Error
(
"should not be equal"
)
...
...
@@ -38,6 +39,14 @@ func TestEqual(t *testing.T) {
if
!
m1
.
Equal
(
m1
)
{
t
.
Error
(
"should be equal"
)
}
if
!
m2
.
Equal
(
m4
)
{
t
.
Error
(
"should be equal"
)
}
if
!
m4
.
Equal
(
m3
)
{
t
.
Error
(
"should be equal"
)
}
}
func
TestStringToBytes
(
t
*
testing
.
T
)
{
...
...
Godeps/_workspace/src/github.com/jbenet/go-multiaddr/net.go
浏览文件 @
726f53ff
...
...
@@ -65,6 +65,27 @@ func FromNetAddr(a net.Addr) (Multiaddr, error) {
}
}
// ToNetAddr converts a Multiaddr to a net.Addr
// Must be ThinWaist. acceptable protocol stacks are:
// /ip{4,6}/{tcp, udp}
func
ToNetAddr
(
ma
Multiaddr
)
(
net
.
Addr
,
error
)
{
network
,
host
,
err
:=
DialArgs
(
ma
)
if
err
!=
nil
{
return
nil
,
err
}
switch
network
{
case
"tcp"
:
return
net
.
ResolveTCPAddr
(
network
,
host
)
case
"udp"
:
return
net
.
ResolveUDPAddr
(
network
,
host
)
case
"ip"
:
return
net
.
ResolveIPAddr
(
network
,
host
)
}
return
nil
,
fmt
.
Errorf
(
"network not supported: %s"
,
network
)
}
// FromIP converts a net.IP type to a Multiaddr.
func
FromIP
(
ip
net
.
IP
)
(
Multiaddr
,
error
)
{
switch
{
...
...
@@ -85,8 +106,12 @@ func DialArgs(m Multiaddr) (string, string, error) {
str
:=
m
.
String
()
parts
:=
strings
.
Split
(
str
,
"/"
)[
1
:
]
network
:=
parts
[
2
]
if
len
(
parts
)
==
2
{
// only IP
return
parts
[
0
],
parts
[
1
],
nil
}
network
:=
parts
[
2
]
var
host
string
switch
parts
[
0
]
{
case
"ip4"
:
...
...
@@ -98,16 +123,28 @@ func DialArgs(m Multiaddr) (string, string, error) {
}
// IsThinWaist returns whether a Multiaddr starts with "Thin Waist" Protocols.
// This means: /{IP4, IP6}
/{TCP, UDP}
// This means: /{IP4, IP6}
[/{TCP, UDP}]
func
IsThinWaist
(
m
Multiaddr
)
bool
{
p
:=
m
.
Protocols
()
if
p
[
0
]
.
Code
!=
P_IP4
&&
p
[
0
]
.
Code
!=
P_IP6
{
// nothing? not even a waist.
if
len
(
p
)
==
0
{
return
false
}
if
p
[
1
]
.
Code
!=
P_TCP
&&
p
[
1
]
.
Code
!=
P_UDP
{
if
p
[
0
]
.
Code
!=
P_IP4
&&
p
[
0
]
.
Code
!=
P_IP6
{
return
false
}
return
true
// only IP? still counts.
if
len
(
p
)
==
1
{
return
true
}
switch
p
[
1
]
.
Code
{
case
P_TCP
,
P_UDP
,
P_IP4
,
P_IP6
:
return
true
default
:
return
false
}
}
Godeps/_workspace/src/github.com/jbenet/go-multiaddr/net_test.go
浏览文件 @
726f53ff
...
...
@@ -18,6 +18,44 @@ func testConvert(t *testing.T, s string, gen GenFunc) {
}
}
func
testToNetAddr
(
t
*
testing
.
T
,
maddr
,
ntwk
,
addr
string
)
{
m
,
err
:=
NewMultiaddr
(
maddr
)
if
err
!=
nil
{
t
.
Fatal
(
"failed to generate."
)
}
naddr
,
err
:=
ToNetAddr
(
m
)
if
addr
==
""
{
// should fail
if
err
==
nil
{
t
.
Fatalf
(
"failed to error: %s"
,
m
)
}
return
}
// shouldn't fail
if
err
!=
nil
{
t
.
Fatalf
(
"failed to convert to net addr: %s"
,
m
)
}
if
naddr
.
String
()
!=
addr
{
t
.
Fatalf
(
"naddr.Address() == %s != %s"
,
naddr
,
addr
)
}
if
naddr
.
Network
()
!=
ntwk
{
t
.
Fatalf
(
"naddr.Network() == %s != %s"
,
naddr
.
Network
(),
ntwk
)
}
// should convert properly
switch
ntwk
{
case
"tcp"
:
_
=
naddr
.
(
*
net
.
TCPAddr
)
case
"udp"
:
_
=
naddr
.
(
*
net
.
UDPAddr
)
case
"ip"
:
_
=
naddr
.
(
*
net
.
IPAddr
)
}
}
func
TestFromIP4
(
t
*
testing
.
T
)
{
testConvert
(
t
,
"/ip4/10.20.30.40"
,
func
()
(
Multiaddr
,
error
)
{
return
FromIP
(
net
.
ParseIP
(
"10.20.30.40"
))
...
...
@@ -48,6 +86,34 @@ func TestFromUDP(t *testing.T) {
})
}
func
TestThinWaist
(
t
*
testing
.
T
)
{
addrs
:=
map
[
string
]
bool
{
"/ip4/127.0.0.1/udp/1234"
:
true
,
"/ip4/127.0.0.1/tcp/1234"
:
true
,
"/ip4/127.0.0.1/udp/1234/tcp/1234"
:
true
,
"/ip4/127.0.0.1/tcp/12345/ip4/1.2.3.4"
:
true
,
"/ip6/::1/tcp/80"
:
true
,
"/ip6/::1/udp/80"
:
true
,
"/ip6/::1"
:
true
,
"/tcp/1234/ip4/1.2.3.4"
:
false
,
"/tcp/1234"
:
false
,
"/tcp/1234/udp/1234"
:
false
,
"/ip4/1.2.3.4/ip4/2.3.4.5"
:
true
,
"/ip6/::1/ip4/2.3.4.5"
:
true
,
}
for
a
,
res
:=
range
addrs
{
ma
,
err
:=
NewMultiaddr
(
a
)
if
err
!=
nil
{
t
.
Fatalf
(
"failed to construct Multiaddr: %s"
,
a
)
}
if
IsThinWaist
(
ma
)
!=
res
{
t
.
Fatalf
(
"IsThinWaist(%s) != %v"
,
a
,
res
)
}
}
}
func
TestDialArgs
(
t
*
testing
.
T
)
{
m
,
err
:=
NewMultiaddr
(
"/ip4/127.0.0.1/udp/1234"
)
if
err
!=
nil
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论