Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
1555ce7c
提交
1555ce7c
authored
10月 11, 2014
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bitswap dials peers
Important bugfix. Otherwise bitswap cannot message peers the node has not connected to yet :(
上级
d2671afd
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
35 行增加
和
6 行删除
+35
-6
bitswap.go
exchange/bitswap/bitswap.go
+9
-5
interface.go
exchange/bitswap/network/interface.go
+3
-0
net_message_adapter.go
exchange/bitswap/network/net_message_adapter.go
+7
-1
network.go
exchange/bitswap/testnet/network.go
+16
-0
没有找到文件。
exchange/bitswap/bitswap.go
浏览文件 @
1555ce7c
...
...
@@ -24,13 +24,12 @@ func NetMessageSession(parent context.Context, p *peer.Peer,
net
inet
.
Network
,
srv
inet
.
Service
,
directory
bsnet
.
Routing
,
d
ds
.
Datastore
,
nice
bool
)
exchange
.
Interface
{
networkAdapter
:=
bsnet
.
NetMessageAdapter
(
srv
,
nil
)
networkAdapter
:=
bsnet
.
NetMessageAdapter
(
srv
,
n
et
,
n
il
)
bs
:=
&
bitswap
{
blockstore
:
blockstore
.
NewBlockstore
(
d
),
notifications
:
notifications
.
New
(),
strategy
:
strategy
.
New
(
nice
),
routing
:
directory
,
network
:
net
,
sender
:
networkAdapter
,
wantlist
:
u
.
NewKeySet
(),
}
...
...
@@ -42,9 +41,6 @@ func NetMessageSession(parent context.Context, p *peer.Peer,
// bitswap instances implement the bitswap protocol.
type
bitswap
struct
{
// network maintains connections to the outside world.
network
inet
.
Network
// sender delivers messages on behalf of the session
sender
bsnet
.
Adapter
...
...
@@ -88,8 +84,16 @@ func (bs *bitswap) Block(parent context.Context, k u.Key) (*blocks.Block, error)
for
iiiii
:=
range
peersToQuery
{
log
.
Debug
(
"bitswap got peersToQuery: %s"
,
iiiii
)
go
func
(
p
*
peer
.
Peer
)
{
err
:=
bs
.
sender
.
DialPeer
(
p
)
if
err
!=
nil
{
log
.
Error
(
"Error sender.DialPeer(%s)"
,
p
)
return
}
response
,
err
:=
bs
.
sender
.
SendRequest
(
ctx
,
p
,
message
)
if
err
!=
nil
{
log
.
Error
(
"Error sender.SendRequest(%s)"
,
p
)
return
}
// FIXME ensure accounting is handled correctly when
...
...
exchange/bitswap/network/interface.go
浏览文件 @
1555ce7c
...
...
@@ -11,6 +11,9 @@ import (
// Adapter provides network connectivity for BitSwap sessions
type
Adapter
interface
{
// DialPeer ensures there is a connection to peer.
DialPeer
(
*
peer
.
Peer
)
error
// SendMessage sends a BitSwap message to a peer.
SendMessage
(
context
.
Context
,
...
...
exchange/bitswap/network/net_message_adapter.go
浏览文件 @
1555ce7c
...
...
@@ -10,9 +10,10 @@ import (
)
// NetMessageAdapter wraps a NetMessage network service
func
NetMessageAdapter
(
s
inet
.
Service
,
r
Receiver
)
Adapter
{
func
NetMessageAdapter
(
s
inet
.
Service
,
n
inet
.
Network
,
r
Receiver
)
Adapter
{
adapter
:=
impl
{
nms
:
s
,
net
:
n
,
receiver
:
r
,
}
s
.
SetHandler
(
&
adapter
)
...
...
@@ -22,6 +23,7 @@ func NetMessageAdapter(s inet.Service, r Receiver) Adapter {
// implements an Adapter that integrates with a NetMessage network service
type
impl
struct
{
nms
inet
.
Service
net
inet
.
Network
// inbound messages from the network are forwarded to the receiver
receiver
Receiver
...
...
@@ -58,6 +60,10 @@ func (adapter *impl) HandleMessage(
return
outgoing
}
func
(
adapter
*
impl
)
DialPeer
(
p
*
peer
.
Peer
)
error
{
return
adapter
.
DialPeer
(
p
)
}
func
(
adapter
*
impl
)
SendMessage
(
ctx
context
.
Context
,
p
*
peer
.
Peer
,
...
...
exchange/bitswap/testnet/network.go
浏览文件 @
1555ce7c
...
...
@@ -3,6 +3,7 @@ package bitswap
import
(
"bytes"
"errors"
"fmt"
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
bsmsg
"github.com/jbenet/go-ipfs/exchange/bitswap/message"
...
...
@@ -14,6 +15,8 @@ import (
type
Network
interface
{
Adapter
(
*
peer
.
Peer
)
bsnet
.
Adapter
HasPeer
(
*
peer
.
Peer
)
bool
SendMessage
(
ctx
context
.
Context
,
from
*
peer
.
Peer
,
...
...
@@ -49,6 +52,11 @@ func (n *network) Adapter(p *peer.Peer) bsnet.Adapter {
return
client
}
func
(
n
*
network
)
HasPeer
(
p
*
peer
.
Peer
)
bool
{
_
,
found
:=
n
.
clients
[
p
.
Key
()]
return
found
}
// TODO should this be completely asynchronous?
// TODO what does the network layer do with errors received from services?
func
(
n
*
network
)
SendMessage
(
...
...
@@ -155,6 +163,14 @@ func (nc *networkClient) SendRequest(
return
nc
.
network
.
SendRequest
(
ctx
,
nc
.
local
,
to
,
message
)
}
func
(
nc
*
networkClient
)
DialPeer
(
p
*
peer
.
Peer
)
error
{
// no need to do anything because dialing isn't a thing in this test net.
if
!
nc
.
network
.
HasPeer
(
p
)
{
return
fmt
.
Errorf
(
"Peer not in network: %s"
,
p
)
}
return
nil
}
func
(
nc
*
networkClient
)
SetDelegate
(
r
bsnet
.
Receiver
)
{
nc
.
Receiver
=
r
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论