Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
6fa2ab0d
提交
6fa2ab0d
authored
9月 17, 2018
作者:
Łukasz Magiera
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
coreapi swarm: rewire address listing cmds
License: MIT Signed-off-by:
Łukasz Magiera
<
magik6k@gmail.com
>
上级
df9f1018
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
102 行增加
和
46 行删除
+102
-46
swarm.go
core/commands/swarm.go
+40
-44
key.go
core/coreapi/interface/key.go
+3
-0
swarm.go
core/coreapi/interface/swarm.go
+9
-1
key.go
core/coreapi/key.go
+4
-0
swarm.go
core/coreapi/swarm.go
+42
-0
test-lib.sh
test/sharness/lib/test-lib.sh
+4
-1
没有找到文件。
core/commands/swarm.go
浏览文件 @
6fa2ab0d
...
...
@@ -21,7 +21,7 @@ import (
"gx/ipfs/QmVBUpxsHh53rNcufqxMpLAmz37eGyLJUaexDy1W9YkiNk/go-ipfs-config"
"gx/ipfs/QmXTmUCBtDUrzDYVzASogLiNph7EBuYqEgPL7QoHNMzUnz/go-ipfs-cmds"
ma
"gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr"
"gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
peer
"gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
pstore
"gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore"
inet
"gx/ipfs/QmfDPh144WGBqRxZb1TGDHerbMnZATrHZggAPw7putNnBq/go-libp2p-net"
)
...
...
@@ -66,45 +66,39 @@ var swarmPeersCmd = &cmds.Command{
cmdkit
.
BoolOption
(
"direction"
,
"Also list information about the direction of connection"
),
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
cmdenv
.
GetNode
(
env
)
api
,
err
:=
cmdenv
.
GetApi
(
env
)
if
err
!=
nil
{
return
err
}
if
n
.
PeerHost
==
nil
{
return
err
}
verbose
,
_
:=
req
.
Options
[
"verbose"
]
.
(
bool
)
latency
,
_
:=
req
.
Options
[
"latency"
]
.
(
bool
)
streams
,
_
:=
req
.
Options
[
"streams"
]
.
(
bool
)
direction
,
_
:=
req
.
Options
[
"direction"
]
.
(
bool
)
conns
:=
n
.
PeerHost
.
Network
()
.
Conns
()
conns
,
err
:=
api
.
Swarm
()
.
Peers
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
var
out
connInfos
for
_
,
c
:=
range
conns
{
pid
:=
c
.
RemotePeer
()
addr
:=
c
.
RemoteMultiaddr
()
ci
:=
connInfo
{
Addr
:
addr
.
String
(),
Peer
:
pid
.
Pretty
(),
Addr
:
c
.
Address
()
.
String
(),
Peer
:
c
.
ID
()
.
Pretty
(),
}
/*
// FIXME(steb):
swcon, ok := c.(*swarm.Conn)
if ok {
ci.Muxer = fmt.Sprintf("%T", swcon.StreamConn().Conn())
}
*/
if
verbose
||
direction
{
// set direction
ci
.
Direction
=
c
.
Stat
()
.
Direction
ci
.
Direction
=
c
.
Direction
()
}
if
verbose
||
latency
{
lat
:=
n
.
Peerstore
.
LatencyEWMA
(
pid
)
lat
,
err
:=
c
.
Latency
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
if
lat
==
0
{
ci
.
Latency
=
"n/a"
}
else
{
...
...
@@ -112,10 +106,13 @@ var swarmPeersCmd = &cmds.Command{
}
}
if
verbose
||
streams
{
strs
:=
c
.
GetStreams
()
strs
,
err
:=
c
.
Streams
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
for
_
,
s
:=
range
strs
{
ci
.
Streams
=
append
(
ci
.
Streams
,
streamInfo
{
Protocol
:
string
(
s
.
Protocol
()
)})
ci
.
Streams
=
append
(
ci
.
Streams
,
streamInfo
{
Protocol
:
string
(
s
)})
}
}
sort
.
Sort
(
&
ci
)
...
...
@@ -229,26 +226,25 @@ var swarmAddrsCmd = &cmds.Command{
"listen"
:
swarmAddrsListenCmd
,
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
cmdenv
.
GetNode
(
env
)
api
,
err
:=
cmdenv
.
GetApi
(
env
)
if
err
!=
nil
{
return
err
}
if
n
.
PeerHost
==
nil
{
addrs
,
err
:=
api
.
Swarm
()
.
KnownAddrs
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
addrs
:=
make
(
map
[
string
][]
string
)
ps
:=
n
.
PeerHost
.
Network
()
.
Peerstore
()
for
_
,
p
:=
range
ps
.
Peers
()
{
out
:=
make
(
map
[
string
][]
string
)
for
p
,
paddrs
:=
range
addrs
{
s
:=
p
.
Pretty
()
for
_
,
a
:=
range
p
s
.
Addrs
(
p
)
{
addrs
[
s
]
=
append
(
addrs
[
s
],
a
.
String
())
for
_
,
a
:=
range
p
addrs
{
out
[
s
]
=
append
(
out
[
s
],
a
.
String
())
}
sort
.
Sort
(
sort
.
StringSlice
(
addrs
[
s
]))
}
return
cmds
.
EmitOnce
(
res
,
&
addrMap
{
Addrs
:
addrs
})
return
cmds
.
EmitOnce
(
res
,
&
addrMap
{
Addrs
:
out
})
},
Encoders
:
cmds
.
EncoderMap
{
cmds
.
Text
:
cmds
.
MakeEncoder
(
func
(
req
*
cmds
.
Request
,
w
io
.
Writer
,
v
interface
{})
error
{
...
...
@@ -288,23 +284,27 @@ var swarmAddrsLocalCmd = &cmds.Command{
cmdkit
.
BoolOption
(
"id"
,
"Show peer ID in addresses."
),
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
cmdenv
.
GetNode
(
env
)
api
,
err
:=
cmdenv
.
GetApi
(
env
)
if
err
!=
nil
{
return
err
}
if
n
.
PeerHost
==
nil
{
showid
,
_
:=
req
.
Options
[
"id"
]
.
(
bool
)
self
,
err
:=
api
.
Key
()
.
Self
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
showid
,
_
:=
req
.
Options
[
"id"
]
.
(
bool
)
id
:=
n
.
Identity
.
Pretty
()
maddrs
,
err
:=
api
.
Swarm
()
.
LocalAddrs
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
var
addrs
[]
string
for
_
,
addr
:=
range
n
.
PeerHost
.
Addrs
()
{
for
_
,
addr
:=
range
maddrs
{
saddr
:=
addr
.
String
()
if
showid
{
saddr
=
path
.
Join
(
saddr
,
"ipfs"
,
id
)
saddr
=
path
.
Join
(
saddr
,
"ipfs"
,
self
.
ID
()
.
Pretty
()
)
}
addrs
=
append
(
addrs
,
saddr
)
}
...
...
@@ -325,17 +325,13 @@ var swarmAddrsListenCmd = &cmds.Command{
`
,
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
cmdenv
.
GetNode
(
env
)
api
,
err
:=
cmdenv
.
GetApi
(
env
)
if
err
!=
nil
{
return
err
}
if
n
.
PeerHost
==
nil
{
return
err
}
var
addrs
[]
string
maddrs
,
err
:=
n
.
PeerHost
.
Network
()
.
InterfaceListenAddresses
(
)
maddrs
,
err
:=
api
.
Swarm
()
.
ListenAddrs
(
req
.
Context
)
if
err
!=
nil
{
return
err
}
...
...
core/coreapi/interface/key.go
浏览文件 @
6fa2ab0d
...
...
@@ -33,6 +33,9 @@ type KeyAPI interface {
// List lists keys stored in keystore
List
(
ctx
context
.
Context
)
([]
Key
,
error
)
// Self returns the 'main' node key
Self
(
ctx
context
.
Context
)
(
Key
,
error
)
// Remove removes keys from keystore. Returns ipns path of the removed key
Remove
(
ctx
context
.
Context
,
name
string
)
(
Key
,
error
)
}
core/coreapi/interface/swarm.go
浏览文件 @
6fa2ab0d
...
...
@@ -9,12 +9,13 @@ import (
"gx/ipfs/QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN/go-libp2p-protocol"
"gx/ipfs/QmbNepETomvmXfz1X5pHNFD2QuPqnqi47dTd94QJWSorQ3/go-libp2p-peer"
pstore
"gx/ipfs/QmfAQMFpgDU2U4BXG64qVr8HSiictfWvkSBz7Y2oDj65st/go-libp2p-peerstore"
net
"gx/ipfs/QmfDPh144WGBqRxZb1TGDHerbMnZATrHZggAPw7putNnBq/go-libp2p-net"
)
var
(
ErrNotConnected
=
errors
.
New
(
"not connected"
)
ErrConnNotFound
=
errors
.
New
(
"conn not found"
)
)
)
// ConnectionInfo contains information about a peer
type
ConnectionInfo
interface
{
...
...
@@ -24,6 +25,9 @@ type ConnectionInfo interface {
// Address returns the multiaddress via which we are connected with the peer
Address
()
ma
.
Multiaddr
// Direction returns which way the connection was established
Direction
()
net
.
Direction
// Latency returns last known round trip time to the peer
Latency
(
context
.
Context
)
(
time
.
Duration
,
error
)
...
...
@@ -41,4 +45,8 @@ type SwarmAPI interface {
// Peers returns the list of peers we are connected to
Peers
(
context
.
Context
)
([]
ConnectionInfo
,
error
)
KnownAddrs
(
context
.
Context
)
(
map
[
peer
.
ID
][]
ma
.
Multiaddr
,
error
)
LocalAddrs
(
context
.
Context
)
([]
ma
.
Multiaddr
,
error
)
ListenAddrs
(
context
.
Context
)
([]
ma
.
Multiaddr
,
error
)
}
core/coreapi/key.go
浏览文件 @
6fa2ab0d
...
...
@@ -216,3 +216,7 @@ func (api *KeyAPI) Remove(ctx context.Context, name string) (coreiface.Key, erro
return
&
key
{
""
,
pid
},
nil
}
func
(
api
*
KeyAPI
)
Self
(
ctx
context
.
Context
)
(
coreiface
.
Key
,
error
)
{
return
&
key
{
"self"
,
api
.
node
.
Identity
},
nil
}
core/coreapi/swarm.go
浏览文件 @
6fa2ab0d
...
...
@@ -3,6 +3,7 @@ package coreapi
import
(
"context"
"fmt"
"sort"
"time"
coreiface
"github.com/ipfs/go-ipfs/core/coreapi/interface"
...
...
@@ -24,6 +25,7 @@ type SwarmAPI struct {
type
connInfo
struct
{
api
*
CoreAPI
conn
net
.
Conn
dir
net
.
Direction
addr
ma
.
Multiaddr
peer
peer
.
ID
...
...
@@ -80,6 +82,41 @@ func (api *SwarmAPI) Disconnect(ctx context.Context, addr ma.Multiaddr) error {
return
nil
}
func
(
api
*
SwarmAPI
)
KnownAddrs
(
context
.
Context
)
(
map
[
peer
.
ID
][]
ma
.
Multiaddr
,
error
)
{
if
api
.
node
.
PeerHost
==
nil
{
return
nil
,
coreiface
.
ErrOffline
}
addrs
:=
make
(
map
[
peer
.
ID
][]
ma
.
Multiaddr
)
ps
:=
api
.
node
.
PeerHost
.
Network
()
.
Peerstore
()
for
_
,
p
:=
range
ps
.
Peers
()
{
for
_
,
a
:=
range
ps
.
Addrs
(
p
)
{
addrs
[
p
]
=
append
(
addrs
[
p
],
a
)
}
sort
.
Slice
(
addrs
[
p
],
func
(
i
,
j
int
)
bool
{
return
addrs
[
p
][
i
]
.
String
()
<
addrs
[
p
][
j
]
.
String
()
})
}
return
addrs
,
nil
}
func
(
api
*
SwarmAPI
)
LocalAddrs
(
context
.
Context
)
([]
ma
.
Multiaddr
,
error
)
{
if
api
.
node
.
PeerHost
==
nil
{
return
nil
,
coreiface
.
ErrOffline
}
return
api
.
node
.
PeerHost
.
Addrs
(),
nil
}
func
(
api
*
SwarmAPI
)
ListenAddrs
(
context
.
Context
)
([]
ma
.
Multiaddr
,
error
)
{
if
api
.
node
.
PeerHost
==
nil
{
return
nil
,
coreiface
.
ErrOffline
}
return
api
.
node
.
PeerHost
.
Network
()
.
InterfaceListenAddresses
()
}
func
(
api
*
SwarmAPI
)
Peers
(
context
.
Context
)
([]
coreiface
.
ConnectionInfo
,
error
)
{
if
api
.
node
.
PeerHost
==
nil
{
return
nil
,
coreiface
.
ErrOffline
...
...
@@ -95,6 +132,7 @@ func (api *SwarmAPI) Peers(context.Context) ([]coreiface.ConnectionInfo, error)
ci
:=
&
connInfo
{
api
:
api
.
CoreAPI
,
conn
:
c
,
dir
:
c
.
Stat
()
.
Direction
,
addr
:
addr
,
peer
:
pid
,
...
...
@@ -122,6 +160,10 @@ func (ci *connInfo) Address() ma.Multiaddr {
return
ci
.
addr
}
func
(
ci
*
connInfo
)
Direction
()
net
.
Direction
{
return
ci
.
dir
}
func
(
ci
*
connInfo
)
Latency
(
context
.
Context
)
(
time
.
Duration
,
error
)
{
return
ci
.
api
.
node
.
Peerstore
.
LatencyEWMA
(
peer
.
ID
(
ci
.
ID
())),
nil
}
...
...
test/sharness/lib/test-lib.sh
浏览文件 @
6fa2ab0d
...
...
@@ -199,8 +199,11 @@ test_set_address_vars() {
'
if
ipfs swarm addrs
local
>
/dev/null 2>&1
;
then
test_expect_success
"get swarm addresses"
'
ipfs swarm addrs local > addrs_out
'
test_expect_success
"set swarm address vars"
'
ipfs swarm addrs local > addrs_out &&
SWARM_MADDR=$(grep "127.0.0.1" addrs_out) &&
SWARM_PORT=$(port_from_maddr $SWARM_MADDR)
'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论