Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
3ae70217
提交
3ae70217
authored
9月 16, 2014
作者:
Juan Batiz-Benet
提交者:
Brian Tiger Chow
9月 22, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
getFromPeerList and peerFromInfo
上级
e4e02108
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
44 行增加
和
31 行删除
+44
-31
dht.go
routing/dht/dht.go
+44
-31
没有找到文件。
routing/dht/dht.go
浏览文件 @
3ae70217
...
...
@@ -225,13 +225,14 @@ func (dht *IpfsDHT) getValueOrPeers(ctx context.Context, p *peer.Peer,
continue
}
np
,
err
:=
dht
.
network
.
GetConnection
(
peer
.
ID
(
pb
.
GetId
()),
addr
)
if
err
!=
nil
{
u
.
PErr
(
"%v
\n
"
,
err
.
Error
())
continue
// check if we already have this peer.
pr
,
_
:=
dht
.
peerstore
.
Get
(
peer
.
ID
(
pb
.
GetId
()))
if
pr
==
nil
{
pr
=
&
peer
.
Peer
{
ID
:
peer
.
ID
(
pb
.
GetId
())}
dht
.
peerstore
.
Put
(
pr
)
}
peers
=
append
(
peers
,
np
)
pr
.
AddAddress
(
addr
)
// idempotent
peers
=
append
(
peers
,
pr
)
}
if
len
(
peers
)
>
0
{
...
...
@@ -257,33 +258,26 @@ func (dht *IpfsDHT) getValueSingle(ctx context.Context, p *peer.Peer,
// from someone what do we do with it? Connect to each of them? randomly pick
// one to get the value from? Or just connect to one at a time until we get a
// successful connection and request the value from it?
func
(
dht
*
IpfsDHT
)
getFromPeerList
(
key
u
.
Key
,
timeout
time
.
Duration
,
peerlist
[]
*
Message_PBPeer
,
level
int
)
([]
byte
,
error
)
{
for
_
,
pinfo
:=
range
peerlist
{
p
,
_
:=
dht
.
Find
(
peer
.
ID
(
pinfo
.
GetId
()))
if
p
==
nil
{
maddr
,
err
:=
ma
.
NewMultiaddr
(
pinfo
.
GetAddr
())
if
err
!=
nil
{
u
.
PErr
(
"getValue error: %s
\n
"
,
err
)
continue
}
func
(
dht
*
IpfsDHT
)
getFromPeerList
(
ctx
context
.
Context
,
key
u
.
Key
,
peerlist
[]
*
Message_Peer
,
level
int
)
([]
byte
,
error
)
{
p
,
err
=
dht
.
network
.
GetConnection
(
peer
.
ID
(
pinfo
.
GetId
()),
maddr
)
if
err
!=
nil
{
u
.
PErr
(
"getValue error: %s
\n
"
,
err
)
continue
}
for
_
,
pinfo
:=
range
peerlist
{
p
,
err
:=
dht
.
peerFromInfo
(
pinfo
)
if
err
!=
nil
{
u
.
DErr
(
"getFromPeers error: %s
\n
"
,
err
)
continue
}
pmes
,
err
:=
dht
.
getValueSingle
(
p
,
key
,
timeout
,
level
)
pmes
,
err
:=
dht
.
getValueSingle
(
ctx
,
p
,
key
,
level
)
if
err
!=
nil
{
u
.
DErr
(
"getFromPeers error: %s
\n
"
,
err
)
continue
}
dht
.
providers
.
AddProvider
(
key
,
p
)
// Make sure it was a successful get
if
pmes
.
GetSuccess
()
&&
pmes
.
Value
!=
nil
{
return
pmes
.
GetValue
(),
nil
if
value
:=
pmes
.
GetValue
();
value
!=
nil
{
// Success! We were given the value
dht
.
providers
.
AddProvider
(
key
,
p
)
return
value
,
nil
}
}
return
nil
,
u
.
ErrNotFound
...
...
@@ -463,13 +457,32 @@ func (dht *IpfsDHT) betterPeerToQuery(pmes *Message) *peer.Peer {
return
closer
}
func
(
dht
*
IpfsDHT
)
peerFromInfo
(
pbp
*
Message_PBPeer
)
(
*
peer
.
Peer
,
error
)
{
maddr
,
err
:=
ma
.
NewMultiaddr
(
pbp
.
GetAddr
())
if
err
!=
nil
{
return
nil
,
err
func
(
dht
*
IpfsDHT
)
peerFromInfo
(
pbp
*
Message_Peer
)
(
*
peer
.
Peer
,
error
)
{
id
:=
peer
.
ID
(
pbp
.
GetId
())
p
,
_
:=
dht
.
peerstore
.
Get
(
id
)
if
p
==
nil
{
p
,
_
=
dht
.
Find
(
id
)
if
p
!=
nil
{
panic
(
"somehow peer not getting into peerstore"
)
}
}
if
p
==
nil
{
maddr
,
err
:=
ma
.
NewMultiaddr
(
pbp
.
GetAddr
())
if
err
!=
nil
{
return
nil
,
err
}
// create new Peer
p
:=
&
peer
.
Peer
{
ID
:
id
}
p
.
AddAddress
(
maddr
)
dht
.
peerstore
.
Put
(
pr
)
}
return
dht
.
network
.
GetConnection
(
peer
.
ID
(
pbp
.
GetId
()),
maddr
)
// dial connection
err
=
dht
.
network
.
Dial
(
p
)
return
p
,
err
}
func
(
dht
*
IpfsDHT
)
loadProvidableKeys
()
error
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论