package iface import ( "context" "errors" "time" net "github.com/libp2p/go-libp2p-net" "github.com/libp2p/go-libp2p-peer" pstore "github.com/libp2p/go-libp2p-peerstore" "github.com/libp2p/go-libp2p-protocol" ma "github.com/multiformats/go-multiaddr" ) var ( ErrNotConnected = errors.New("not connected") ErrConnNotFound = errors.New("conn not found") ) // ConnectionInfo contains information about a peer type ConnectionInfo interface { // ID returns PeerID ID() peer.ID // Address returns the multiaddress via which we are connected with the peer Address() ma.Multiaddr // Direction returns which way the connection was established Direction() net.Direction // Latency returns last known round trip time to the peer Latency() (time.Duration, error) // Streams returns list of streams established with the peer Streams() ([]protocol.ID, error) } // SwarmAPI specifies the interface to libp2p swarm type SwarmAPI interface { // Connect to a given peer Connect(context.Context, pstore.PeerInfo) error // Disconnect from a given address Disconnect(context.Context, ma.Multiaddr) error // Peers returns the list of peers we are connected to Peers(context.Context) ([]ConnectionInfo, error) // KnownAddrs returns the list of all addresses this node is aware of KnownAddrs(context.Context) (map[peer.ID][]ma.Multiaddr, error) // LocalAddrs returns the list of announced listening addresses LocalAddrs(context.Context) ([]ma.Multiaddr, error) // ListenAddrs returns the list of all listening addresses ListenAddrs(context.Context) ([]ma.Multiaddr, error) }