Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
3a76ef04
提交
3a76ef04
authored
8月 05, 2014
作者:
Jeromy
提交者:
Juan Batiz-Benet
8月 07, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
a little error handling and some work on providers
上级
248e06f7
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
44 行增加
和
5 行删除
+44
-5
dht.go
routing/dht/dht.go
+12
-4
routing.go
routing/dht/routing.go
+29
-1
swarm.go
swarm/swarm.go
+3
-0
没有找到文件。
routing/dht/dht.go
浏览文件 @
3a76ef04
...
...
@@ -35,6 +35,7 @@ type IpfsDHT struct {
// Map keys to peers that can provide their value
// TODO: implement a TTL on each of these keys
providers
map
[
u
.
Key
][]
*
peer
.
Peer
providerLock
sync
.
RWMutex
// map of channels waiting for reply messages
listeners
map
[
uint64
]
chan
*
swarm
.
Message
...
...
@@ -46,6 +47,9 @@ type IpfsDHT struct {
// Create a new DHT object with the given peer as the 'local' host
func
NewDHT
(
p
*
peer
.
Peer
)
(
*
IpfsDHT
,
error
)
{
if
p
==
nil
{
panic
(
"Tried to create new dht with nil peer"
)
}
network
:=
swarm
.
NewSwarm
(
p
)
err
:=
network
.
Listen
()
if
err
!=
nil
{
...
...
@@ -68,24 +72,27 @@ func (dht *IpfsDHT) Start() {
}
// Connect to a new peer at the given address
func
(
dht
*
IpfsDHT
)
Connect
(
addr
*
ma
.
Multiaddr
)
error
{
func
(
dht
*
IpfsDHT
)
Connect
(
addr
*
ma
.
Multiaddr
)
(
*
peer
.
Peer
,
error
)
{
if
addr
==
nil
{
panic
(
"addr was nil!"
)
}
peer
:=
new
(
peer
.
Peer
)
peer
.
AddAddress
(
addr
)
conn
,
err
:=
swarm
.
Dial
(
"tcp"
,
peer
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
err
=
identify
.
Handshake
(
dht
.
self
,
peer
,
conn
.
Incoming
.
MsgChan
,
conn
.
Outgoing
.
MsgChan
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
dht
.
network
.
StartConn
(
conn
)
dht
.
routes
.
Update
(
peer
)
return
nil
return
peer
,
nil
}
// Read in all messages from swarm and handle them appropriately
...
...
@@ -195,6 +202,7 @@ func (dht *IpfsDHT) handleGetProviders(p *peer.Peer, pmes *DHTMessage) {
// ?????
}
// This is just a quick hack, formalize method of sending addrs later
var
addrs
[]
string
for
_
,
prov
:=
range
providers
{
ma
:=
prov
.
NetAddress
(
"tcp"
)
...
...
routing/dht/routing.go
浏览文件 @
3a76ef04
...
...
@@ -3,9 +3,12 @@ package dht
import
(
"math/rand"
"time"
"encoding/json"
proto
"code.google.com/p/goprotobuf/proto"
ma
"github.com/jbenet/go-multiaddr"
peer
"github.com/jbenet/go-ipfs/peer"
swarm
"github.com/jbenet/go-ipfs/swarm"
u
"github.com/jbenet/go-ipfs/util"
...
...
@@ -125,7 +128,32 @@ func (s *IpfsDHT) FindProviders(key u.Key, timeout time.Duration) ([]*peer.Peer,
if
err
!=
nil
{
return
nil
,
err
}
panic
(
"Not yet implemented."
)
var
addrs
map
[
string
]
string
err
:=
json
.
Unmarshal
(
pmes_out
.
GetValue
(),
&
addrs
)
if
err
!=
nil
{
return
nil
,
err
}
for
key
,
addr
:=
range
addrs
{
p
:=
s
.
network
.
Find
(
u
.
Key
(
key
))
if
p
==
nil
{
maddr
,
err
:=
ma
.
NewMultiaddr
(
addr
)
if
err
!=
nil
{
u
.
PErr
(
"error connecting to new peer: %s"
,
err
)
continue
}
p
,
err
:=
s
.
Connect
(
maddr
)
if
err
!=
nil
{
u
.
PErr
(
"error connecting to new peer: %s"
,
err
)
continue
}
}
s
.
providerLock
.
Lock
()
prov_arr
:=
s
.
providers
[
key
]
s
.
providers
[
key
]
=
append
(
prov_arr
,
p
)
s
.
providerLock
.
Unlock
()
}
}
}
...
...
swarm/swarm.go
浏览文件 @
3a76ef04
...
...
@@ -290,3 +290,6 @@ Loop:
delete
(
s
.
conns
,
conn
.
Peer
.
Key
())
s
.
connsLock
.
Unlock
()
}
func
(
s
*
Swarm
)
Find
(
addr
*
ma
.
Multiaddr
)
{
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论