Documentation ¶
Overview ¶
Package libp2p provides webmesh integration with libp2p.
Index ¶
- Constants
- func NewAnnouncer[REQ, RESP any](ctx context.Context, opts AnnounceOptions, rt transport.UnaryServer[REQ, RESP]) (io.Closer, error)
- func NewDHT(ctx context.Context, host host.Host, bootstrapPeers []multiaddr.Multiaddr, ...) (*dht.IpfsDHT, error)
- func NewHost(ctx context.Context, opts HostOptions) (host.Host, error)
- func NewJoinAnnouncer(ctx context.Context, opts AnnounceOptions, join transport.JoinServer) (io.Closer, error)
- func NewJoinRoundTripper(ctx context.Context, opts RoundTripOptions) (transport.JoinRoundTripper, error)
- func NewRaftTransport(ctx context.Context, opts RaftTransportOptions) (raft.Transport, error)
- func NewRoundTripper[REQ, RESP any](ctx context.Context, opts RoundTripOptions) (transport.RoundTripper[REQ, RESP], error)
- func RPCProtocolFor(method string) protocol.ID
- func SetMaxSystemBuffers()
- func SetSystemBuffers(size int)
- func UDPRelayProtocolFor(pubkey crypto.PublicKey) protocol.ID
- type AnnounceOptions
- type Announcer
- type BootstrapOptions
- type BootstrapTransport
- type DiscoveryHost
- type HostOptions
- type RaftTransportOptions
- type RoundTripOptions
- type UDPRelay
- type UDPRelayOptions
Constants ¶
const ( // BootstrapProtocol is the protocol used for bootstrapping a mesh. BootstrapProtocol = protocol.ID("/webmesh/bootstrap/0.0.1") // RPCProtocol is the protocol used for executing RPCs against a mesh. // The method should be appended to the end of the protocol. RPCProtocol = protocol.ID("/webmesh/rpc/0.0.1") // RaftProtocol is the protocol used for webmesh raft. // This is not used yet. RaftProtocol = protocol.ID("/webmesh/raft/0.0.1") // UDPRelayProtocol is the protocol used for relaying UDP packets. // The destination node should be appended to the end of the protocol. UDPRelayProtocol = protocol.ID("/webmesh/udp-relay/0.0.1") )
const LineFeed = '\x00'
const MaxBuffer = 2500000
MaxBuffer is the maximum buffer size for libp2p.
Variables ¶
This section is empty.
Functions ¶
func NewAnnouncer ¶
func NewAnnouncer[REQ, RESP any](ctx context.Context, opts AnnounceOptions, rt transport.UnaryServer[REQ, RESP]) (io.Closer, error)
NewAnnouncer creates a generic announcer for the given method, request, and response objects.
func NewDHT ¶
func NewDHT(ctx context.Context, host host.Host, bootstrapPeers []multiaddr.Multiaddr, connectTimeout time.Duration) (*dht.IpfsDHT, error)
NewDHT returns a DHT for given host. If bootstrap peers is empty, the default bootstrap peers will be used.
func NewJoinAnnouncer ¶
func NewJoinAnnouncer(ctx context.Context, opts AnnounceOptions, join transport.JoinServer) (io.Closer, error)
NewJoinAnnouncer creates a new announcer on the kadmilia DHT and executes received join requests against the given join Server.
func NewJoinRoundTripper ¶
func NewJoinRoundTripper(ctx context.Context, opts RoundTripOptions) (transport.JoinRoundTripper, error)
NewJoinRoundTripper returns a round tripper that uses the libp2p kademlia DHT to join a cluster. The created host is closed when the round tripper is closed.
func NewRaftTransport ¶
NewRaftTransport creates a new Raft transport over the Kademlia DHT.
func NewRoundTripper ¶
func NewRoundTripper[REQ, RESP any](ctx context.Context, opts RoundTripOptions) (transport.RoundTripper[REQ, RESP], error)
NewRoundTripper returns a round tripper that uses the libp2p kademlia DHT. The created host is closed when the round tripper is closed.
func RPCProtocolFor ¶
RPCProtocolFor returns the RPCProtocol for the given method.
func SetMaxSystemBuffers ¶
func SetMaxSystemBuffers()
SetMaxSystemBuffers sets the system buffers to the maximum size for libp2p.
func SetSystemBuffers ¶
func SetSystemBuffers(size int)
SetSystemBuffers sets the system buffers to use for libp2p.
Types ¶
type AnnounceOptions ¶
type AnnounceOptions struct { // Rendezvous is the pre-shared key to use as a rendezvous point for the DHT. Rendezvous string // AnnounceTTL is the TTL to use for the discovery service. AnnounceTTL time.Duration // HostOptions are options for configuring the host. These can be left // empty if using a pre-created host. HostOptions HostOptions // Method is the method to announce. Method string // Host is a pre-started host to use for announcing. Host host.Host }
AnnounceOptions are options for announcing the host or discovering peers on the libp2p kademlia DHT.
type Announcer ¶
type Announcer interface { // AnnounceToDHT should announce the join protocol to the DHT, // such that it can be used by a libp2p transport.JoinRoundTripper. AnnounceToDHT(ctx context.Context, opts AnnounceOptions) error // LeaveDHT should remove the join protocol from the DHT for the // given rendezvous string. LeaveDHT(ctx context.Context, rendezvous string) error }
Announcer is an interface for nodes that can announce themselves to the network.
type BootstrapOptions ¶
type BootstrapOptions struct { // Rendezvous is the rendezvous string to use for the transport. // This should be the same for all sides of the transport. Rendezvous string // Signer is provided to sign and verify the UUIDs of the voters. Signer crypto.PSK // Host are options for configuring a host if one is not provided. HostOptions HostOptions // Host is a pre-started host to use for the transport. Host host.Host // ElectionTimeout is the election timeout. The election timeout should // be larger than the host's connection timeout. Otherwise, chances // of a successful election are low. This does not apply when all sides // provide an already bootstrapped host to the transport. All sides of // the transport should use the same election timeout. ElectionTimeout time.Duration // Linger is the time to wait for non-leaders to join before closing the host. Linger time.Duration // NodeID is the node ID to use for leader election. This should be the // local node ID. NodeID string // NodeIDs are the other node IDs to use for leader election. NodeIDs []string }
BootstrapOptions are options for the bootstrap transport.
type BootstrapTransport ¶
type BootstrapTransport interface { transport.BootstrapTransport // UUID returns the local UUID that was used for voting. UUID() uuid.UUID // LeaderUUID returns the UUID of the leader that was elected. // This is only populated after leader election is complete. LeaderUUID() uuid.UUID }
BootstrapTransport implements bootstrap transport and returns the local UUID that was used for voting.
func NewBootstrapTransport ¶
func NewBootstrapTransport(ctx context.Context, announcer Announcer, opts BootstrapOptions) (BootstrapTransport, error)
NewBootstrapTransport creates a new bootstrap transport. The host is closed when leader election is complete.
func NewBootstrapTransportWithHost ¶
func NewBootstrapTransportWithHost(host DiscoveryHost, announcer Announcer, opts BootstrapOptions) (BootstrapTransport, error)
NewBootstrapTransportWithHost creates a new bootstrap transport with a host. The host will remain open after leader election is complete.
type DiscoveryHost ¶
type DiscoveryHost interface { // ID returns the peer ID of the host. ID() peer.ID // Host is the underlying libp2p host. Host() host.Host // DHT is the underlying libp2p DHT. DHT() *dht.IpfsDHT // Close closes the host and its DHT. Close(ctx context.Context) error }
DiscoveryHost is an interface that provides facilities for discovering and connecting to peers over libp2p. It can be used to avoid the need for re-creating a libp2p host and bootstrapping the DHT for each new connection.
func NewDiscoveryHost ¶
func NewDiscoveryHost(ctx context.Context, opts HostOptions) (DiscoveryHost, error)
NewDiscoveryHost creates a new libp2p host connected to the DHT with the given options.
func WrapHostWithDiscovery ¶
func WrapHostWithDiscovery(ctx context.Context, host host.Host, bootstrapPeers []multiaddr.Multiaddr, connectTimeout time.Duration) (DiscoveryHost, error)
WrapHostWithDiscovery will wrap a native libp2p Host, bootstrap a DHT alongside it and return a DiscoveryHost.
type HostOptions ¶
type HostOptions struct { // BootstrapPeers is a list of bootstrap peers to use for the DHT. // If empty or nil, the default bootstrap peers will be used. BootstrapPeers []multiaddr.Multiaddr // Options are options for configuring the libp2p host. Options []config.Option // LocalAddrs is a list of local addresses to announce the host with. // If empty or nil, the default local addresses will be used. LocalAddrs []multiaddr.Multiaddr // ConnectTimeout is the timeout for connecting to peers when bootstrapping. ConnectTimeout time.Duration }
HostOptions are options for creating a new libp2p host.
type RaftTransportOptions ¶
type RaftTransportOptions struct { // PSK is the pre-shared key to use as a rendezvous point for the DHT. PSK string // BootstrapPeers is a list of bootstrap peers to use for the DHT. // If empty or nil, the default bootstrap peers will be used. BootstrapPeers []multiaddr.Multiaddr // LocalAddrs is a list of local addresses to use for the host. // If empty or nil, the default local addresses will be used. LocalAddrs []multiaddr.Multiaddr // Options are options for configuring the libp2p host. Options []config.Option // DiscoveryTTL is the TTL to use for the discovery service. DiscoveryTTL time.Duration // ConnectTimeout is the timeout to use when connecting to a peer. ConnectTimeout time.Duration // LeaderDialer is the function that will be used to dial the leader. LeaderDialer transport.LeaderDialer }
RaftTransportOptions are options for the TCP transport.
type RoundTripOptions ¶
type RoundTripOptions struct { // Rendezvous is the pre-shared key to use as a rendezvous point for the DHT. Rendezvous string // HostOptions are options for configuring the host. These can be left // empty if using a pre-created host. HostOptions HostOptions // Method is the method to try to execute. Method string // Host is a pre-started host to use for the round trip Host host.Host }
RoundTripOptions are options for performing a round trip against a libp2p host.
type UDPRelay ¶
type UDPRelay struct { UDPRelayOptions // contains filtered or unexported fields }
UDPRelay is a UDP relay.
func NewUDPRelay ¶
func NewUDPRelay(ctx context.Context, opts UDPRelayOptions) (*UDPRelay, error)
NewUDPRelay creates a new UDP relay.
func NewUDPRelayWithHost ¶
func NewUDPRelayWithHost(ctx context.Context, host DiscoveryHost, opts UDPRelayOptions) (*UDPRelay, error)
NewUDPRelay creates a new UDP relay with the given host.
func (*UDPRelay) Closed ¶
func (u *UDPRelay) Closed() <-chan struct{}
Closed returns a channel that is closed when the relay is closed.
type UDPRelayOptions ¶
type UDPRelayOptions struct { // PrivateKey is the private key to use for the host. // This is required. PrivateKey crypto.PrivateKey // RemotePubKey is the public key of the remote node to negotiate a UDP relay with. RemotePubKey crypto.PublicKey // Relay are options for the relay Relay relay.UDPOptions // Host are options for configuring the host Host HostOptions }
UDPRelayOptions are the options for negotiating a UDP relay.