Documentation
¶
Index ¶
- Variables
- func AddTransport(h host.Host, upgrader transport.Upgrader) error
- type Client
- func (c *Client) CanDial(addr ma.Multiaddr) bool
- func (c *Client) Close() error
- func (c *Client) Dial(ctx context.Context, a ma.Multiaddr, p peer.ID) (transport.CapableConn, error)
- func (c *Client) Listen(addr ma.Multiaddr) (transport.Listener, error)
- func (c *Client) Listener() *Listener
- func (c *Client) Protocols() []int
- func (c *Client) Proxy() bool
- func (c *Client) SkipResolve(ctx context.Context, maddr ma.Multiaddr) bool
- func (c *Client) Start()
- type Conn
- func (c *Conn) Close() error
- func (c *Conn) LocalAddr() net.Addr
- func (c *Conn) LocalMultiaddr() ma.Multiaddr
- func (c *Conn) Read(buf []byte) (int, error)
- func (c *Conn) RemoteAddr() net.Addr
- func (c *Conn) RemoteMultiaddr() ma.Multiaddr
- func (c *Conn) SetDeadline(t time.Time) error
- func (c *Conn) SetReadDeadline(t time.Time) error
- func (c *Conn) SetWriteDeadline(t time.Time) error
- func (c *Conn) Stat() network.ConnStats
- func (c *Conn) Write(buf []byte) (int, error)
- type Listener
- type NetAddr
- type Reservation
- type ReservationError
Constants ¶
This section is empty.
Variables ¶
var ( StatLimitDuration = statLimitDuration{} StatLimitData = statLimitData{} )
var ( // StreamTimeout 流操作超时时间 StreamTimeout = 1 * time.Minute // AcceptTimeout 接受连接超时时间 AcceptTimeout = 10 * time.Second )
连接超时相关常量
var DialRelayTimeout = 5 * time.Second
中继拨号超时时间
var DialTimeout = time.Minute
拨号超时时间
var HopTagWeight = 5
HopTagWeight 是用于携带中继跳跃流的连接管理器权重
var ReserveTimeout = time.Minute
预留槽位的超时时间为1分钟
Functions ¶
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 实现了 p2p-circuit/v2 协议的客户端: - 实现通过 v2 中继进行拨号 - 监听来自 v2 中继的传入连接
为了向后兼容 v1 中继和旧节点,客户端也会接受通过 v1 中继的连接,并使用 p2p-circuit/v1 进行回退拨号。 这允许我们在主机中使用 v2 代码作为 v1 的替代品,而不会破坏现有代码和与旧节点的互操作性。
func New ¶
New 创建一个新的 p2p-circuit/v2 客户端 参数:
- h: host.Host 主机对象
- upgrader: transport.Upgrader 连接升级器
返回值:
- *Client 新创建的客户端对象
- error 创建过程中的错误
func (*Client) CanDial ¶
CanDial 检查是否可以拨号到指定地址 参数:
- addr: ma.Multiaddr 要检查的多地址
返回值:
- bool 如果地址包含中继协议则返回 true
func (*Client) Dial ¶
func (c *Client) Dial(ctx context.Context, a ma.Multiaddr, p peer.ID) (transport.CapableConn, error)
Dial 拨号连接到指定的对等节点 参数:
- ctx: context.Context 上下文对象
- a: ma.Multiaddr 目标多地址
- p: peer.ID 目标对等节点 ID
返回值:
- transport.CapableConn 建立的传输连接
- error 如果出现错误则返回错误信息
func (*Client) Listen ¶
Listen 在指定地址上监听连接 参数:
- addr: ma.Multiaddr 要监听的多地址
返回值:
- transport.Listener 传输监听器
- error 如果出现错误则返回错误信息
func (*Client) SkipResolve ¶
SkipResolve 总是返回 true,因为我们始终将实际连接委托给内部传输 通过在这里跳过解析,我们让内部传输决定如何解析多地址 参数:
- ctx: context.Context 上下文对象
- maddr: ma.Multiaddr 多地址
返回值:
- bool 始终返回 true
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn 表示一个中继连接
func (*Conn) RemoteMultiaddr ¶
TODO: 将 c.Conn().RemotePeer() 转换为 multiaddr 是否安全?可能是"用户输入"
func (*Conn) SetReadDeadline ¶
SetReadDeadline 设置读取超时时间
func (*Conn) SetWriteDeadline ¶
SetWriteDeadline 设置写入超时时间
type Listener ¶
type Listener Client
Listener 是 Client 的别名类型
type Reservation ¶
type Reservation struct { // Expiration 是预留的过期时间 Expiration time.Time // Addrs 包含了经过验证的预留节点的公共地址,可以向网络宣告 Addrs []ma.Multiaddr // LimitDuration 是中继节点保持中继连接打开的时间限制。如果为0,则没有限制 LimitDuration time.Duration // LimitData 是中继节点在重置中继连接前,每个方向可以中继的字节数 LimitData uint64 // Voucher 是中继节点提供的已签名的预留凭证 Voucher *proto.ReservationVoucher }
Reservation 是一个包含 relay/v2 槽位预留信息的结构体
type ReservationError ¶
type ReservationError struct { // Status 是中继节点拒绝预留请求时返回的状态。在其他失败情况下设置为 pbv2.Status_CONNECTION_FAILED Status pbv2.Status // Reason 是预留失败的原因 Reason string // contains filtered or unexported fields }
ReservationError 是在预留中继节点槽位失败时返回的错误
func (ReservationError) Error ¶
func (re ReservationError) Error() string
Error 实现了 error 接口,返回格式化的错误信息