33 lines
939 B
Go
33 lines
939 B
Go
|
package autonat
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/libp2p/go-libp2p-core/network"
|
||
|
"github.com/libp2p/go-libp2p-core/peer"
|
||
|
|
||
|
ma "github.com/multiformats/go-multiaddr"
|
||
|
)
|
||
|
|
||
|
// AutoNAT is the interface for NAT autodiscovery
|
||
|
type AutoNAT interface {
|
||
|
// Status returns the current NAT status
|
||
|
Status() network.Reachability
|
||
|
// PublicAddr returns the public dial address when NAT status is public and an
|
||
|
// error otherwise
|
||
|
PublicAddr() (ma.Multiaddr, error)
|
||
|
}
|
||
|
|
||
|
// Client is a stateless client interface to AutoNAT peers
|
||
|
type Client interface {
|
||
|
// DialBack requests from a peer providing AutoNAT services to test dial back
|
||
|
// and report the address on a successful connection.
|
||
|
DialBack(ctx context.Context, p peer.ID) (ma.Multiaddr, error)
|
||
|
}
|
||
|
|
||
|
// AddrFunc is a function returning the candidate addresses for the local host.
|
||
|
type AddrFunc func() []ma.Multiaddr
|
||
|
|
||
|
// Option is an Autonat option for configuration
|
||
|
type Option func(*config) error
|