Source File
transport.go
Belonging Package
github.com/libp2p/go-libp2p/core/transport
// Package transport provides the Transport interface, which represents// the devices and network protocols used to send and receive data.package transportimport (mamanet)// A CapableConn represents a connection that has offers the basic// capabilities required by libp2p: stream multiplexing, encryption and// peer authentication.//// These capabilities may be natively provided by the transport, or they// may be shimmed via the "connection upgrade" process, which converts a// "raw" network connection into one that supports such capabilities by// layering an encryption channel and a stream multiplexer.//// CapableConn provides accessors for the local and remote multiaddrs used to// establish the connection and an accessor for the underlying Transport.type CapableConn interface {network.MuxedConnnetwork.ConnSecuritynetwork.ConnMultiaddrsnetwork.ConnScoper// Transport returns the transport to which this connection belongs.Transport() Transport}// Transport represents any device by which you can connect to and accept// connections from other peers.//// The Transport interface allows you to open connections to other peers// by dialing them, and also lets you listen for incoming connections.//// Connections returned by Dial and passed into Listeners are of type// CapableConn, which means that they have been upgraded to support// stream multiplexing and connection security (encryption and authentication).//// If a transport implements `io.Closer` (optional), libp2p will call `Close` on// shutdown. NOTE: `Dial` and `Listen` may be called after or concurrently with// `Close`.//// In addition to the Transport interface, transports may implement// Resolver or SkipResolver interface. When wrapping/embedding a transport, you should// ensure that the Resolver/SkipResolver interface is handled correctly.//// For a conceptual overview, see https://docs.libp2p.io/concepts/transport/type Transport interface {// Dial dials a remote peer. It should try to reuse local listener// addresses if possible, but it may choose not to.Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (CapableConn, error)// CanDial returns true if this transport knows how to dial the given// multiaddr.//// Returning true does not guarantee that dialing this multiaddr will// succeed. This function should *only* be used to preemptively filter// out addresses that we can't dial.CanDial(addr ma.Multiaddr) bool// Listen listens on the passed multiaddr.Listen(laddr ma.Multiaddr) (Listener, error)// Protocol returns the set of protocols handled by this transport.//// See the Network interface for an explanation of how this is used.Protocols() []int// Proxy returns true if this is a proxy transport.//// See the Network interface for an explanation of how this is used.// TODO: Make this a part of the go-multiaddr protocol instead?Proxy() bool}// Resolver can be optionally implemented by transports that want to resolve or transform the// multiaddr.type Resolver interface {Resolve(ctx context.Context, maddr ma.Multiaddr) ([]ma.Multiaddr, error)}// SkipResolver can be optionally implemented by transports that don't want to// resolve or transform the multiaddr. Useful for transports that indirectly// wrap other transports (e.g. p2p-circuit). This lets the inner transport// specify how a multiaddr is resolved later.type SkipResolver interface {SkipResolve(ctx context.Context, maddr ma.Multiaddr) bool}// Listener is an interface closely resembling the net.Listener interface. The// only real difference is that Accept() returns Conn's of the type in this// package, and also exposes a Multiaddr method as opposed to a regular Addr// methodtype Listener interface {Accept() (CapableConn, error)Close() errorAddr() net.AddrMultiaddr() ma.Multiaddr}// ErrListenerClosed is returned by Listener.Accept when the listener is gracefully closed.var ErrListenerClosed = errors.New("listener closed")// TransportNetwork is an inet.Network with methods for managing transports.type TransportNetwork interface {network.Network// AddTransport adds a transport to this Network.//// When dialing, this Network will iterate over the protocols in the// remote multiaddr and pick the first protocol registered with a proxy// transport, if any. Otherwise, it'll pick the transport registered to// handle the last protocol in the multiaddr.//// When listening, this Network will iterate over the protocols in the// local multiaddr and pick the *last* protocol registered with a proxy// transport, if any. Otherwise, it'll pick the transport registered to// handle the last protocol in the multiaddr.AddTransport(t Transport) error}// GatedMaListener is listener that listens for raw(unsecured and non-multiplexed) incoming connections,// gates them with a `connmgr.ConnGater`and creates a resource management scope for them.// It can be upgraded to a full libp2p transport listener by the Upgrader.//// Compared to manet.Listener, this listener creates the resource management scope for the accepted connection.type GatedMaListener interface {// Accept waits for and returns the next connection to the listener.Accept() (manet.Conn, network.ConnManagementScope, error)// Close closes the listener.// Any blocked Accept operations will be unblocked and return errors.Close() error// Multiaddr returns the listener's (local) Multiaddr.Multiaddr() ma.Multiaddr// Addr returns the net.Listener's network address.Addr() net.Addr}// Upgrader is a multistream upgrader that can upgrade an underlying connection// to a full transport connection (secure and multiplexed).type Upgrader interface {// UpgradeListener upgrades the passed multiaddr-net listener into a full libp2p-transport listener.//// Deprecated: Use UpgradeGatedMaListener(upgrader.GateMaListener(manet.Listener)) instead.UpgradeListener(Transport, manet.Listener) Listener// GateMaListener creates a GatedMaListener from a manet.Listener. It gates the accepted connection// and creates a resource scope for it.GateMaListener(manet.Listener) GatedMaListener// UpgradeGatedMaListener upgrades the passed GatedMaListener into a full libp2p-transport listener.UpgradeGatedMaListener(Transport, GatedMaListener) Listener// Upgrade upgrades the multiaddr/net connection into a full libp2p-transport connection.Upgrade(ctx context.Context, t Transport, maconn manet.Conn, dir network.Direction, p peer.ID, scope network.ConnManagementScope) (CapableConn, error)}// DialUpdater provides updates on in progress dials.type DialUpdater interface {// DialWithUpdates dials a remote peer and provides updates on the passed channel.DialWithUpdates(context.Context, ma.Multiaddr, peer.ID, chan<- DialUpdate) (CapableConn, error)}// DialUpdateKind indicates the type of DialUpdate event.type DialUpdateKind intconst (// UpdateKindDialFailed indicates dial failed.UpdateKindDialFailed DialUpdateKind = iota// UpdateKindDialSuccessful indicates dial succeeded.UpdateKindDialSuccessful// UpdateKindHandshakeProgressed indicates successful completion of the TCP 3-way// handshakeUpdateKindHandshakeProgressed)func ( DialUpdateKind) () string {switch {case UpdateKindDialFailed:return "DialFailed"case UpdateKindDialSuccessful:return "DialSuccessful"case UpdateKindHandshakeProgressed:return "UpdateKindHandshakeProgressed"default:return fmt.Sprintf("DialUpdateKind<Unknown-%d>", )}}// DialUpdate is used by DialUpdater to provide dial updates.type DialUpdate struct {// Kind is the kind of update event.Kind DialUpdateKind// Addr is the peer's address.Addr ma.Multiaddr// Conn is the resulting connection on success.Conn CapableConn// Err is the reason for dial failure.Err error}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |