Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
51fa159e
提交
51fa159e
authored
9月 30, 2018
作者:
Kejie Zhang
提交者:
Steven Allen
10月 04, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add dns support in p2p forward connect
License: MIT Signed-off-by:
Kejie Zhang
<
601172892@qq.com
>
上级
43d93cb0
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
63 行增加
和
9 行删除
+63
-9
p2p.go
core/commands/p2p.go
+43
-7
t0180-p2p.sh
test/sharness/t0180-p2p.sh
+20
-2
没有找到文件。
core/commands/p2p.go
浏览文件 @
51fa159e
...
...
@@ -9,6 +9,7 @@ import (
"strconv"
"strings"
"text/tabwriter"
"time"
cmds
"github.com/ipfs/go-ipfs/commands"
core
"github.com/ipfs/go-ipfs/core"
...
...
@@ -19,6 +20,7 @@ import (
ma
"gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr"
"gx/ipfs/QmZNkThpqfVXs9GNbexPrfBbXSLNYeKrE7jwFM2oqHbyqN/go-libp2p-protocol"
"gx/ipfs/QmesXvbRGyKQn1XbPHx1Mr5E6RTJYR9c8zwFVuGZq9Aa1j/go-ipfs-addr"
madns
"gx/ipfs/QmfXU2MhWoegxHoeMd3A2ytL2P6CY4FfqGWc23LTNWBwZt/go-multiaddr-dns"
)
// P2PProtoPrefix is the default required prefix for protocol names
...
...
@@ -49,7 +51,7 @@ type P2PStreamsOutput struct {
Streams
[]
P2PStreamInfoOutput
}
var
(
const
(
allowCustomProtocolOptionName
=
"allow-custom-protocol"
allOptionName
=
"all"
protocolOptionName
=
"protocol"
...
...
@@ -57,6 +59,8 @@ var (
targetAddressOptionName
=
"target-address"
)
var
resolveTimeout
=
10
*
time
.
Second
// P2PCmd is the 'ipfs p2p' command
var
P2PCmd
=
&
cmds
.
Command
{
Helptext
:
cmdkit
.
HelpText
{
...
...
@@ -120,7 +124,7 @@ Example:
return
}
target
,
err
:=
ipfsaddr
.
ParseString
(
targetOpt
)
target
s
,
err
:=
parseIpfsAddr
(
targetOpt
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmdkit
.
ErrNormal
)
return
...
...
@@ -137,7 +141,7 @@ Example:
return
}
if
err
:=
forwardLocal
(
n
.
Context
(),
n
.
P2P
,
n
.
Peerstore
,
proto
,
listen
,
target
);
err
!=
nil
{
if
err
:=
forwardLocal
(
n
.
Context
(),
n
.
P2P
,
n
.
Peerstore
,
proto
,
listen
,
target
s
);
err
!=
nil
{
res
.
SetError
(
err
,
cmdkit
.
ErrNormal
)
return
}
...
...
@@ -145,6 +149,37 @@ Example:
},
}
// parseIpfsAddr is a function that takes in addr string and return ipfsAddrs
func
parseIpfsAddr
(
addr
string
)
([]
ipfsaddr
.
IPFSAddr
,
error
)
{
mutiladdr
,
err
:=
ma
.
NewMultiaddr
(
addr
)
if
err
!=
nil
{
return
nil
,
err
}
if
_
,
err
:=
mutiladdr
.
ValueForProtocol
(
ma
.
P_IPFS
);
err
==
nil
{
iaddrs
:=
make
([]
ipfsaddr
.
IPFSAddr
,
1
)
iaddrs
[
0
],
err
=
ipfsaddr
.
ParseMultiaddr
(
mutiladdr
)
if
err
!=
nil
{
return
nil
,
err
}
return
iaddrs
,
nil
}
// resolve mutiladdr whose protocol is not ma.P_IPFS
ctx
,
cancel
:=
context
.
WithTimeout
(
context
.
Background
(),
resolveTimeout
)
addrs
,
err
:=
madns
.
Resolve
(
ctx
,
mutiladdr
)
cancel
()
if
len
(
addrs
)
==
0
{
return
nil
,
errors
.
New
(
"fail to resolve the multiaddr:"
+
mutiladdr
.
String
())
}
iaddrs
:=
make
([]
ipfsaddr
.
IPFSAddr
,
len
(
addrs
))
for
i
,
addr
:=
range
addrs
{
iaddrs
[
i
],
err
=
ipfsaddr
.
ParseMultiaddr
(
addr
)
if
err
!=
nil
{
return
nil
,
err
}
}
return
iaddrs
,
nil
}
var
p2pListenCmd
=
&
cmds
.
Command
{
Helptext
:
cmdkit
.
HelpText
{
Tagline
:
"Create libp2p service"
,
...
...
@@ -212,13 +247,14 @@ func forwardRemote(ctx context.Context, p *p2p.P2P, proto protocol.ID, target ma
}
// forwardLocal forwards local connections to a libp2p service
func
forwardLocal
(
ctx
context
.
Context
,
p
*
p2p
.
P2P
,
ps
pstore
.
Peerstore
,
proto
protocol
.
ID
,
bindAddr
ma
.
Multiaddr
,
addr
ipfsaddr
.
IPFSAddr
)
error
{
if
addr
!=
nil
{
func
forwardLocal
(
ctx
context
.
Context
,
p
*
p2p
.
P2P
,
ps
pstore
.
Peerstore
,
proto
protocol
.
ID
,
bindAddr
ma
.
Multiaddr
,
addr
s
[]
ipfsaddr
.
IPFSAddr
)
error
{
for
_
,
addr
:=
range
addrs
{
ps
.
AddAddr
(
addr
.
ID
(),
addr
.
Multiaddr
(),
pstore
.
TempAddrTTL
)
}
// TODO: return some info
_
,
err
:=
p
.
ForwardLocal
(
ctx
,
addr
.
ID
(),
proto
,
bindAddr
)
// the length of the addrs must large than 0
// peerIDs in addr must be the same and choose addr[0] to connect
_
,
err
:=
p
.
ForwardLocal
(
ctx
,
addrs
[
0
]
.
ID
(),
proto
,
bindAddr
)
return
err
}
...
...
test/sharness/t0180-p2p.sh
浏览文件 @
51fa159e
...
...
@@ -24,7 +24,8 @@ check_test_ports() {
test_expect_success
"test ports are closed"
'
(! (netstat -lnp | grep "LISTEN" | grep ":10101 ")) &&
(! (netstat -lnp | grep "LISTEN" | grep ":10102 "))&&
(! (netstat -lnp | grep "LISTEN" | grep ":10103 "))
(! (netstat -lnp | grep "LISTEN" | grep ":10103 ")) &&
(! (netstat -lnp | grep "LISTEN" | grep ":10104 "))
'
}
check_test_ports
...
...
@@ -73,10 +74,27 @@ test_server_to_client() {
spawn_sending_server
test_expect_success
'S->C Setup client side'
'
test_expect_success
'S->C
(/ipfs/peerID)
Setup client side'
'
ipfsi 1 p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10102 /ipfs/${PEERID_0} 2>&1 > dialer-stdouterr.log
'
test_expect_success
'S->C Setup(dnsaddr/addr/ipfs/peerID) client side'
'
ipfsi 1 p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10103 /dnsaddr/bootstrap.libp2p.io/ipfs/${PEERID_0} 2>&1 > dialer-stdouterr.log
'
test_expect_success
'S->C Setup(dnsaddr/addr) client side'
'
ipfsi 1 p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10104 /dnsaddr/bootstrap.libp2p.io/ 2>&1 > dialer-stdouterr.log
'
test_expect_success
'S->C Output is empty'
'
test_must_be_empty dialer-stdouterr.log
'
test_expect_success
"'ipfs p2p ls | grep' succeeds"
'
ipfsi 1 p2p ls | grep "/x/p2p-test /ip4/127.0.0.1/tcp/10104"
'
test_server_to_client
test_expect_success
'S->C Connect with dead server'
'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论