Version: v0.24.2 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Dec 31, 2022 License: MIT Imports: 16 Imported by: 15




View Source
const (
	DirectDialEvtT       = "DirectDial"
	ProtocolErrorEvtT    = "ProtocolError"
	StartHolePunchEvtT   = "StartHolePunch"
	EndHolePunchEvtT     = "EndHolePunch"
	HolePunchAttemptEvtT = "HolePunchAttempt"

Event Types

View Source
const Protocol protocol.ID = "/libp2p/dcutr"

Protocol is the libp2p protocol for Hole Punching.

View Source
const (
	ServiceName = "libp2p.holepunch"


View Source
var ErrClosed = errors.New("hole punching service closing")

ErrClosed is returned when the hole punching is closed

View Source
var ErrHolePunchActive = errors.New("another hole punching attempt to this peer is active")

ErrHolePunchActive is returned from DirectConnect when another hole punching attempt is currently running

View Source
var StreamTimeout = 1 * time.Minute

StreamTimeout is the timeout for the hole punch protocol stream.


This section is empty.


type AddrFilter added in v0.24.0

type AddrFilter interface {
	// FilterLocal filters the multi addresses that are sent to the remote peer.
	FilterLocal(remoteID peer.ID, maddrs []ma.Multiaddr) []ma.Multiaddr
	// FilterRemote filters the multi addresses received from the remote peer.
	FilterRemote(remoteID peer.ID, maddrs []ma.Multiaddr) []ma.Multiaddr

AddrFilter defines the interface for the multi address filtering.

type DirectDialEvt

type DirectDialEvt struct {
	Success      bool
	EllapsedTime time.Duration
	Error        string `json:",omitempty"`

Event Objects

type EndHolePunchEvt

type EndHolePunchEvt struct {
	Success      bool
	EllapsedTime time.Duration
	Error        string `json:",omitempty"`

type Event

type Event struct {
	Timestamp int64       // UNIX nanos
	Peer      peer.ID     // local peer ID
	Remote    peer.ID     // remote peer ID
	Type      string      // event type
	Evt       interface{} // the actual event

type EventTracer

type EventTracer interface {
	Trace(evt *Event)

type HolePunchAttemptEvt

type HolePunchAttemptEvt struct {
	Attempt int

type Option

type Option func(*Service) error

func WithAddrFilter added in v0.24.0

func WithAddrFilter(f AddrFilter) Option

WithAddrFilter is a Service option that enables multiaddress filtering. It allows to only send a subset of observed addresses to the remote peer. E.g., only announce TCP or QUIC multi addresses instead of both. It also allows to only consider a subset of received multi addresses that remote peers announced to us. Theoretically, this API also allows to add multi addresses in both cases.

func WithTracer

func WithTracer(tr EventTracer) Option

WithTracer is a Service option that enables hole punching tracing

type ProtocolErrorEvt

type ProtocolErrorEvt struct {
	Error string

type Service

type Service struct {
	// contains filtered or unexported fields

The Service runs on every node that supports the DCUtR protocol.

func NewService

func NewService(h host.Host, ids identify.IDService, opts ...Option) (*Service, error)

NewService creates a new service that can be used for hole punching The Service runs on all hosts that support the DCUtR protocol, no matter if they are behind a NAT / firewall or not. The Service handles DCUtR streams (which are initiated from the node behind a NAT / Firewall once we establish a connection to them through a relay.

func (*Service) Close

func (s *Service) Close() error

Close closes the Hole Punch Service.

func (*Service) DirectConnect

func (s *Service) DirectConnect(p peer.ID) error

DirectConnect is only exposed for testing purposes. TODO: find a solution for this.

type StartHolePunchEvt

type StartHolePunchEvt struct {
	RemoteAddrs []string
	RTT         time.Duration


Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL