Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
7aa4a83f
提交
7aa4a83f
authored
1月 12, 2015
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
addr: proper filter + subtract
上级
ddd5c4fa
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
68 行增加
和
20 行删除
+68
-20
core.go
core/core.go
+1
-1
addr.go
p2p/net/swarm/addr/addr.go
+25
-11
addr_test.go
p2p/net/swarm/addr/addr_test.go
+37
-3
swarm.go
p2p/net/swarm/swarm.go
+1
-1
swarm_addr_test.go
p2p/net/swarm/swarm_addr_test.go
+3
-3
swarm_dial.go
p2p/net/swarm/swarm_dial.go
+1
-1
没有找到文件。
core/core.go
浏览文件 @
7aa4a83f
...
...
@@ -359,7 +359,7 @@ func constructPeerHost(ctx context.Context, ctxg ctxgroup.ContextGroup, cfg *con
// make sure we error out if our config does not have addresses we can use
log
.
Debugf
(
"Config.Addresses.Swarm:%s"
,
listenAddrs
)
filteredAddrs
:=
addrutil
.
FilterAddrs
(
listenAddrs
)
filteredAddrs
:=
addrutil
.
Filter
Usable
Addrs
(
listenAddrs
)
log
.
Debugf
(
"Config.Addresses.Swarm:%s (filtered)"
,
listenAddrs
)
if
len
(
filteredAddrs
)
<
1
{
return
nil
,
debugerror
.
Errorf
(
"addresses in config not usable: %s"
,
listenAddrs
)
...
...
p2p/net/swarm/addr/addr.go
浏览文件 @
7aa4a83f
...
...
@@ -41,19 +41,27 @@ func init() {
SupportedTransportProtocols
=
transports
}
// FilterAddrs is a filter that removes certain addresses
// from a list. the addresses removed are those known NOT
// to work with our network. Namely, addresses with UTP.
func
FilterAddrs
(
a
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
// FilterAddrs is a filter that removes certain addresses, according to filter.
// if filter returns true, the address is kept.
func
FilterAddrs
(
a
[]
ma
.
Multiaddr
,
filter
func
(
ma
.
Multiaddr
)
bool
)
[]
ma
.
Multiaddr
{
b
:=
make
([]
ma
.
Multiaddr
,
0
,
len
(
a
))
for
_
,
addr
:=
range
a
{
if
AddrUsable
(
addr
,
false
)
{
if
filter
(
addr
)
{
b
=
append
(
b
,
addr
)
}
}
return
b
}
// FilterUsableAddrs removes certain addresses
// from a list. the addresses removed are those known NOT
// to work with our network. Namely, addresses with UTP.
func
FilterUsableAddrs
(
a
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
return
FilterAddrs
(
a
,
func
(
m
ma
.
Multiaddr
)
bool
{
return
AddrUsable
(
m
,
false
)
})
}
// AddrOverNonLocalIP returns whether the addr uses a non-local ip link
func
AddrOverNonLocalIP
(
a
ma
.
Multiaddr
)
bool
{
split
:=
ma
.
Split
(
a
)
...
...
@@ -228,13 +236,19 @@ func AddrIsShareableOnWAN(addr ma.Multiaddr) bool {
// WANShareableAddrs filters addresses based on whether they're shareable on WAN
func
WANShareableAddrs
(
inp
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
out
:=
make
([]
ma
.
Multiaddr
,
0
,
len
(
inp
))
for
_
,
a
:=
range
inp
{
if
AddrIsShareableOnWAN
(
a
)
{
out
=
append
(
out
,
a
)
return
FilterAddrs
(
inp
,
AddrIsShareableOnWAN
)
}
// Subtract filters out all addrs in b from a
func
Subtract
(
a
,
b
[]
ma
.
Multiaddr
)
[]
ma
.
Multiaddr
{
return
FilterAddrs
(
a
,
func
(
m
ma
.
Multiaddr
)
bool
{
for
_
,
bb
:=
range
b
{
if
m
.
Equal
(
bb
)
{
return
false
}
}
}
return
out
return
true
})
}
// CheckNATWarning checks if our observed addresses differ. if so,
...
...
p2p/net/swarm/addr/addr_test.go
浏览文件 @
7aa4a83f
...
...
@@ -53,9 +53,9 @@ func TestFilterAddrs(t *testing.T) {
}
}
subtestAddrsEqual
(
t
,
FilterAddrs
(
bad
),
[]
ma
.
Multiaddr
{})
subtestAddrsEqual
(
t
,
FilterAddrs
(
good
),
good
)
subtestAddrsEqual
(
t
,
FilterAddrs
(
goodAndBad
),
good
)
subtestAddrsEqual
(
t
,
Filter
Usable
Addrs
(
bad
),
[]
ma
.
Multiaddr
{})
subtestAddrsEqual
(
t
,
Filter
Usable
Addrs
(
good
),
good
)
subtestAddrsEqual
(
t
,
Filter
Usable
Addrs
(
goodAndBad
),
good
)
}
func
subtestAddrsEqual
(
t
*
testing
.
T
,
a
,
b
[]
ma
.
Multiaddr
)
{
...
...
@@ -196,3 +196,37 @@ func TestWANShareable(t *testing.T) {
t
.
Error
(
"should be zero"
)
}
}
func
TestSubtract
(
t
*
testing
.
T
)
{
a
:=
[]
ma
.
Multiaddr
{
newMultiaddr
(
t
,
"/ip4/127.0.0.1/tcp/1234"
),
newMultiaddr
(
t
,
"/ip4/0.0.0.0/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/::1/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/::/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/fe80::1/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/fe80::/tcp/1234"
),
}
b
:=
[]
ma
.
Multiaddr
{
newMultiaddr
(
t
,
"/ip4/127.0.0.1/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/::1/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/fe80::1/tcp/1234"
),
}
c1
:=
[]
ma
.
Multiaddr
{
newMultiaddr
(
t
,
"/ip4/0.0.0.0/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/::/tcp/1234"
),
newMultiaddr
(
t
,
"/ip6/fe80::/tcp/1234"
),
}
c2
:=
Subtract
(
a
,
b
)
if
len
(
c1
)
!=
len
(
c2
)
{
t
.
Error
(
"should be the same"
)
}
for
i
,
ca
:=
range
c1
{
if
!
c2
[
i
]
.
Equal
(
ca
)
{
t
.
Error
(
"should be the same"
,
ca
,
c2
[
i
])
}
}
}
p2p/net/swarm/swarm.go
浏览文件 @
7aa4a83f
...
...
@@ -41,7 +41,7 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
local
peer
.
ID
,
peers
peer
.
Peerstore
)
(
*
Swarm
,
error
)
{
if
len
(
listenAddrs
)
>
0
{
filtered
:=
addrutil
.
FilterAddrs
(
listenAddrs
)
filtered
:=
addrutil
.
Filter
Usable
Addrs
(
listenAddrs
)
if
len
(
filtered
)
<
1
{
return
nil
,
fmt
.
Errorf
(
"swarm cannot use any addr in: %s"
,
listenAddrs
)
}
...
...
p2p/net/swarm/swarm_addr_test.go
浏览文件 @
7aa4a83f
...
...
@@ -51,9 +51,9 @@ func TestFilterAddrs(t *testing.T) {
}
}
subtestAddrsEqual
(
t
,
addrutil
.
FilterAddrs
(
bad
),
[]
ma
.
Multiaddr
{})
subtestAddrsEqual
(
t
,
addrutil
.
FilterAddrs
(
good
),
good
)
subtestAddrsEqual
(
t
,
addrutil
.
FilterAddrs
(
goodAndBad
),
good
)
subtestAddrsEqual
(
t
,
addrutil
.
Filter
Usable
Addrs
(
bad
),
[]
ma
.
Multiaddr
{})
subtestAddrsEqual
(
t
,
addrutil
.
Filter
Usable
Addrs
(
good
),
good
)
subtestAddrsEqual
(
t
,
addrutil
.
Filter
Usable
Addrs
(
goodAndBad
),
good
)
// now test it with swarm
...
...
p2p/net/swarm/swarm_dial.go
浏览文件 @
7aa4a83f
...
...
@@ -41,7 +41,7 @@ func (s *Swarm) Dial(ctx context.Context, p peer.ID) (*Conn, error) {
remoteAddrs
:=
s
.
peers
.
Addresses
(
p
)
// make sure we can use the addresses.
remoteAddrs
=
addrutil
.
FilterAddrs
(
remoteAddrs
)
remoteAddrs
=
addrutil
.
Filter
Usable
Addrs
(
remoteAddrs
)
if
len
(
remoteAddrs
)
==
0
{
return
nil
,
errors
.
New
(
"peer has no addresses"
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论