pex

package
v0.31.12 Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2020 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// PexChannel is a channel for PEX messages
	PexChannel = byte(0x00)
)

Variables

This section is empty.

Functions

func NewAddrBook

func NewAddrBook(filePath string, routabilityStrict bool) *addrBook

NewAddrBook creates a new address book. Use Start to begin processing asynchronous address updates.

func RegisterPexMessage

func RegisterPexMessage(cdc *amino.Codec)

Types

type AddrBook

type AddrBook interface {
	cmn.Service

	// Add our own addresses so we don't later add ourselves
	AddOurAddress(*p2p.NetAddress)
	// Check if it is our address
	OurAddress(*p2p.NetAddress) bool

	AddPrivateIDs([]string)

	// Add and remove an address
	AddAddress(addr *p2p.NetAddress, src *p2p.NetAddress) error
	RemoveAddress(*p2p.NetAddress)

	// Check if the address is in the book
	HasAddress(*p2p.NetAddress) bool

	// Do we need more peers?
	NeedMoreAddrs() bool
	// Is Address Book Empty? Answer should not depend on being in your own
	// address book, or private peers
	Empty() bool

	// Pick an address to dial
	PickAddress(biasTowardsNewAddrs int) *p2p.NetAddress

	// Mark address
	MarkGood(p2p.ID)
	MarkAttempt(*p2p.NetAddress)
	MarkBad(*p2p.NetAddress)

	IsGood(*p2p.NetAddress) bool

	// Send a selection of addresses to peers
	GetSelection() []*p2p.NetAddress
	// Send a selection of addresses with bias
	GetSelectionWithBias(biasTowardsNewAddrs int) []*p2p.NetAddress

	Size() int

	// Persist to disk
	Save()
}

AddrBook is an address book used for tracking peers so we can gossip about them to others and select peers to dial. TODO: break this up?

type ErrAddrBookInvalidAddr

type ErrAddrBookInvalidAddr struct {
	Addr *p2p.NetAddress
}

func (ErrAddrBookInvalidAddr) Error

func (err ErrAddrBookInvalidAddr) Error() string

type ErrAddrBookInvalidAddrNoID

type ErrAddrBookInvalidAddrNoID struct {
	Addr *p2p.NetAddress
}

func (ErrAddrBookInvalidAddrNoID) Error

func (err ErrAddrBookInvalidAddrNoID) Error() string

type ErrAddrBookNilAddr

type ErrAddrBookNilAddr struct {
	Addr *p2p.NetAddress
	Src  *p2p.NetAddress
}

func (ErrAddrBookNilAddr) Error

func (err ErrAddrBookNilAddr) Error() string

type ErrAddrBookNonRoutable

type ErrAddrBookNonRoutable struct {
	Addr *p2p.NetAddress
}

func (ErrAddrBookNonRoutable) Error

func (err ErrAddrBookNonRoutable) Error() string

type ErrAddrBookPrivate

type ErrAddrBookPrivate struct {
	Addr *p2p.NetAddress
}

func (ErrAddrBookPrivate) Error

func (err ErrAddrBookPrivate) Error() string

func (ErrAddrBookPrivate) PrivateAddr added in v0.31.4

func (err ErrAddrBookPrivate) PrivateAddr() bool

type ErrAddrBookPrivateSrc

type ErrAddrBookPrivateSrc struct {
	Src *p2p.NetAddress
}

func (ErrAddrBookPrivateSrc) Error

func (err ErrAddrBookPrivateSrc) Error() string

func (ErrAddrBookPrivateSrc) PrivateAddr added in v0.31.4

func (err ErrAddrBookPrivateSrc) PrivateAddr() bool

type ErrAddrBookSelf

type ErrAddrBookSelf struct {
	Addr *p2p.NetAddress
}

func (ErrAddrBookSelf) Error

func (err ErrAddrBookSelf) Error() string

type PEXReactor

type PEXReactor struct {
	p2p.BaseReactor
	// contains filtered or unexported fields
}

PEXReactor handles PEX (peer exchange) and ensures that an adequate number of peers are connected to the switch.

It uses `AddrBook` (address book) to store `NetAddress`es of the peers.

## Preventing abuse

Only accept pexAddrsMsg from peers we sent a corresponding pexRequestMsg too. Only accept one pexRequestMsg every ~defaultEnsurePeersPeriod.

func NewPEXReactor

func NewPEXReactor(b AddrBook, config *PEXReactorConfig) *PEXReactor

NewPEXReactor creates new PEX reactor.

func (*PEXReactor) AddPeer

func (r *PEXReactor) AddPeer(p Peer)

AddPeer implements Reactor by adding peer to the address book (if inbound) or by requesting more addresses (if outbound).

func (*PEXReactor) AttemptsToDial

func (r *PEXReactor) AttemptsToDial(addr *p2p.NetAddress) int

AttemptsToDial returns the number of attempts to dial specific address. It returns 0 if never attempted or successfully connected.

func (*PEXReactor) GetChannels

func (r *PEXReactor) GetChannels() []*conn.ChannelDescriptor

GetChannels implements Reactor

func (*PEXReactor) OnStart

func (r *PEXReactor) OnStart() error

OnStart implements BaseService

func (*PEXReactor) OnStop

func (r *PEXReactor) OnStop()

OnStop implements BaseService

func (*PEXReactor) Receive

func (r *PEXReactor) Receive(chID byte, src Peer, msgBytes []byte)

Receive implements Reactor by handling incoming PEX messages.

func (*PEXReactor) ReceiveAddrs

func (r *PEXReactor) ReceiveAddrs(addrs []*p2p.NetAddress, src Peer) error

ReceiveAddrs adds the given addrs to the addrbook if theres an open request for this peer and deletes the open request. If there's no open request for the src peer, it returns an error.

func (*PEXReactor) RemovePeer

func (r *PEXReactor) RemovePeer(p Peer, reason interface{})

RemovePeer implements Reactor by resetting peer's requests info.

func (*PEXReactor) RequestAddrs

func (r *PEXReactor) RequestAddrs(p Peer)

RequestAddrs asks peer for more addresses if we do not already have a request out for this peer.

func (*PEXReactor) SendAddrs

func (r *PEXReactor) SendAddrs(p Peer, netAddrs []*p2p.NetAddress)

SendAddrs sends addrs to the peer.

func (*PEXReactor) SetEnsurePeersPeriod

func (r *PEXReactor) SetEnsurePeersPeriod(d time.Duration)

SetEnsurePeersPeriod sets period to ensure peers connected.

type PEXReactorConfig

type PEXReactorConfig struct {
	// Seed/Crawler mode
	SeedMode bool

	// We want seeds to only advertise good peers. Therefore they should wait at
	// least as long as we expect it to take for a peer to become good before
	// disconnecting.
	SeedDisconnectWaitPeriod time.Duration

	// Seeds is a list of addresses reactor may use
	// if it can't connect to peers in the addrbook.
	Seeds []string
}

PEXReactorConfig holds reactor specific configuration data.

type Peer

type Peer = p2p.Peer

type PexMessage

type PexMessage interface{}

PexMessage is a primary type for PEX messages. Underneath, it could contain either pexRequestMessage, or pexAddrsMessage messages.

Jump to

Keyboard shortcuts

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