Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
c0a1e80f
提交
c0a1e80f
authored
11月 13, 2018
作者:
Łukasz Magiera
提交者:
Steven Allen
11月 29, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
p2p: report-peer-id option for listen
License: MIT Signed-off-by:
Łukasz Magiera
<
magik6k@gmail.com
>
上级
1dcac25c
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
20 行增加
和
12 行删除
+20
-12
p2p.go
core/commands/p2p.go
+5
-11
remote.go
p2p/remote.go
+15
-1
没有找到文件。
core/commands/p2p.go
浏览文件 @
c0a1e80f
...
...
@@ -53,6 +53,7 @@ type P2PStreamsOutput struct {
const
(
allowCustomProtocolOptionName
=
"allow-custom-protocol"
reportPeerIDOptionName
=
"report-peer-id"
)
var
resolveTimeout
=
10
*
time
.
Second
...
...
@@ -183,6 +184,7 @@ Example:
},
Options
:
[]
cmdkit
.
Option
{
cmdkit
.
BoolOption
(
allowCustomProtocolOptionName
,
"Don't require /x/ prefix"
),
cmdkit
.
BoolOption
(
reportPeerIDOptionName
,
"r"
,
"Send remote base58 peerid to target when a new connection is established"
),
},
Run
:
func
(
req
*
cmds
.
Request
,
res
cmds
.
ResponseEmitter
,
env
cmds
.
Environment
)
error
{
n
,
err
:=
p2pGetNode
(
env
)
...
...
@@ -206,15 +208,14 @@ Example:
}
allowCustom
,
_
:=
req
.
Options
[
allowCustomProtocolOptionName
]
.
(
bool
)
if
err
!=
nil
{
return
err
}
reportPeerID
,
_
:=
req
.
Options
[
reportPeerIDOptionName
]
.
(
bool
)
if
!
allowCustom
&&
!
strings
.
HasPrefix
(
string
(
proto
),
P2PProtoPrefix
)
{
return
errors
.
New
(
"protocol name must be within '"
+
P2PProtoPrefix
+
"' namespace"
)
}
return
forwardRemote
(
n
.
Context
(),
n
.
P2P
,
proto
,
target
)
_
,
err
=
n
.
P2P
.
ForwardRemote
(
n
.
Context
(),
proto
,
target
,
reportPeerID
)
return
err
},
}
...
...
@@ -252,13 +253,6 @@ func checkPort(target ma.Multiaddr) error {
return
nil
}
// forwardRemote forwards libp2p service connections to a manet address
func
forwardRemote
(
ctx
context
.
Context
,
p
*
p2p
.
P2P
,
proto
protocol
.
ID
,
target
ma
.
Multiaddr
)
error
{
// TODO: return some info
_
,
err
:=
p
.
ForwardRemote
(
ctx
,
proto
,
target
)
return
err
}
// 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
,
addrs
[]
ipfsaddr
.
IPFSAddr
)
error
{
for
_
,
addr
:=
range
addrs
{
...
...
p2p/remote.go
浏览文件 @
c0a1e80f
...
...
@@ -2,6 +2,7 @@ package p2p
import
(
"context"
"fmt"
manet
"gx/ipfs/QmQVUtnrNGtCRkCMpXgpApfzQjc8FDaDVxHqWH8cnZQeh5/go-multiaddr-net"
ma
"gx/ipfs/QmRKLtwMw131aK7ugC3G7ybpumMz78YrJe5dzneyindvG1/go-multiaddr"
...
...
@@ -20,15 +21,21 @@ type remoteListener struct {
// Address to proxy the incoming connections to
addr
ma
.
Multiaddr
// reportRemote if set to true makes the handler send '<base58 remote peerid>\n'
// to target before any data is forwarded
reportRemote
bool
}
// ForwardRemote creates new p2p listener
func
(
p2p
*
P2P
)
ForwardRemote
(
ctx
context
.
Context
,
proto
protocol
.
ID
,
addr
ma
.
Multiaddr
)
(
Listener
,
error
)
{
func
(
p2p
*
P2P
)
ForwardRemote
(
ctx
context
.
Context
,
proto
protocol
.
ID
,
addr
ma
.
Multiaddr
,
reportRemote
bool
)
(
Listener
,
error
)
{
listener
:=
&
remoteListener
{
p2p
:
p2p
,
proto
:
proto
,
addr
:
addr
,
reportRemote
:
reportRemote
,
}
if
err
:=
p2p
.
ListenersP2P
.
Register
(
listener
);
err
!=
nil
{
...
...
@@ -47,6 +54,13 @@ func (l *remoteListener) handleStream(remote net.Stream) {
peer
:=
remote
.
Conn
()
.
RemotePeer
()
if
l
.
reportRemote
{
if
_
,
err
:=
fmt
.
Fprintf
(
local
,
"%s
\n
"
,
peer
.
Pretty
());
err
!=
nil
{
remote
.
Reset
()
return
}
}
peerMa
,
err
:=
ma
.
NewMultiaddr
(
maPrefix
+
peer
.
Pretty
())
if
err
!=
nil
{
remote
.
Reset
()
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论