network

package
v0.6.1-rc.1 Latest Latest
Warning

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

Go to latest
Published: Aug 20, 2020 License: BSD-3-Clause Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultMaxMessageSize uint32 = 1 << 21
)

reasonable default values

Variables

Defines the messages that can be sent/received with this network

Functions

This section is empty.

Types

type Builder

type Builder struct{ Codec }

Builder extends a Codec to build messages safely

func (Builder) Accepted

func (m Builder) Accepted(chainID ids.ID, requestID uint32, containerIDs ids.Set) (Msg, error)

Accepted message

func (Builder) AcceptedFrontier

func (m Builder) AcceptedFrontier(chainID ids.ID, requestID uint32, containerIDs ids.Set) (Msg, error)

AcceptedFrontier message

func (Builder) Chits

func (m Builder) Chits(chainID ids.ID, requestID uint32, containerIDs ids.Set) (Msg, error)

Chits message

func (Builder) Get

func (m Builder) Get(chainID ids.ID, requestID uint32, deadline uint64, containerID ids.ID) (Msg, error)

Get message

func (Builder) GetAccepted

func (m Builder) GetAccepted(chainID ids.ID, requestID uint32, deadline uint64, containerIDs ids.Set) (Msg, error)

GetAccepted message

func (Builder) GetAcceptedFrontier

func (m Builder) GetAcceptedFrontier(chainID ids.ID, requestID uint32, deadline uint64) (Msg, error)

GetAcceptedFrontier message

func (Builder) GetAncestors added in v0.5.3

func (m Builder) GetAncestors(chainID ids.ID, requestID uint32, deadline uint64, containerID ids.ID) (Msg, error)

GetAncestors message

func (Builder) GetPeerList

func (m Builder) GetPeerList() (Msg, error)

GetPeerList message

func (Builder) GetVersion

func (m Builder) GetVersion() (Msg, error)

GetVersion message

func (Builder) MultiPut added in v0.5.3

func (m Builder) MultiPut(chainID ids.ID, requestID uint32, containers [][]byte) (Msg, error)

MultiPut message

func (Builder) PeerList

func (m Builder) PeerList(ipDescs []utils.IPDesc) (Msg, error)

PeerList message

func (Builder) Ping added in v0.5.7

func (m Builder) Ping() (Msg, error)

Ping message

func (Builder) Pong added in v0.5.7

func (m Builder) Pong() (Msg, error)

Pong message

func (Builder) PullQuery

func (m Builder) PullQuery(chainID ids.ID, requestID uint32, deadline uint64, containerID ids.ID) (Msg, error)

PullQuery message

func (Builder) PushQuery

func (m Builder) PushQuery(chainID ids.ID, requestID uint32, deadline uint64, containerID ids.ID, container []byte) (Msg, error)

PushQuery message

func (Builder) Put

func (m Builder) Put(chainID ids.ID, requestID uint32, containerID ids.ID, container []byte) (Msg, error)

Put message

func (Builder) Version

func (m Builder) Version(networkID, nodeID uint32, myTime uint64, ip utils.IPDesc, myVersion string) (Msg, error)

Version message

type Codec

type Codec struct{}

Codec defines the serialization and deserialization of network messages

func (Codec) Pack

func (Codec) Pack(op Op, fields map[Field]interface{}) (Msg, error)

Pack attempts to pack a map of fields into a message. The first byte of the message is the opcode of the message.

func (Codec) Parse

func (Codec) Parse(b []byte) (Msg, error)

Parse attempts to convert bytes into a message. The first byte of the message is the opcode of the message.

type Dialer

type Dialer interface {
	Dial(utils.IPDesc) (net.Conn, error)
}

Dialer attempts to create a connection with the provided IP/port pair

func NewDialer

func NewDialer(network string) Dialer

NewDialer returns a new Dialer that calls `net.Dial` with the provided network.

type Field

type Field uint32

Field that may be packed into a message

const (
	VersionStr          Field = iota // Used in handshake
	NetworkID                        // Used in handshake
	NodeID                           // Used in handshake
	MyTime                           // Used in handshake
	IP                               // Used in handshake
	Peers                            // Used in handshake
	ChainID                          // Used for dispatching
	RequestID                        // Used for all messages
	Deadline                         // Used for request messages
	ContainerID                      // Used for querying
	ContainerBytes                   // Used for gossiping
	ContainerIDs                     // Used for querying
	MultiContainerBytes              // Used in MultiPut
)

Fields that may be packed. These values are not sent over the wire.

func (Field) Packer

func (f Field) Packer() func(*wrappers.Packer, interface{})

Packer returns the packer function that can be used to pack this field.

func (Field) String

func (f Field) String() string

func (Field) Unpacker

func (f Field) Unpacker() func(*wrappers.Packer) interface{}

Unpacker returns the unpacker function that can be used to unpack this field.

type Handler

type Handler interface {
	// returns true if the handler should be removed
	Connected(id ids.ShortID) bool
	Disconnected(id ids.ShortID) bool
}

Handler represents a handler that is called when a connection is marked as connected or disconnected

type Msg

type Msg interface {
	Op() Op
	Get(Field) interface{}
	Bytes() []byte
}

Msg represents a set of fields that can be serialized into a byte stream

type Network

type Network interface {
	// All consensus messages can be sent through this interface. Thread safety
	// must be managed internally in the network.
	sender.ExternalSender

	// The network must be able to broadcast accepted decisions to random peers.
	// Thread safety must be managed internally in the network.
	triggers.Acceptor

	// The network should be able to report the last time the network interacted
	// with a peer
	health.Heartbeater

	// Should only be called once, will run until either a fatal error occurs,
	// or the network is closed. Returns a non-nil error.
	Dispatch() error

	// Attempt to connect to this IP. Thread safety must be managed internally
	// to the network. The network will never stop attempting to connect to this
	// IP.
	Track(ip utils.IPDesc)

	// Register a new handler that is called whenever a peer is connected to or
	// disconnected to. If the handler returns true, then it will never be
	// called again. Thread safety must be managed internally in the network.
	// The handler will initially be called with this local node's ID.
	RegisterHandler(h Handler)

	// Returns the description of the nodes this network is currently connected
	// to externally. Thread safety must be managed internally to the network.
	Peers() []PeerID

	// Close this network and all existing connections it has. Thread safety
	// must be managed internally to the network. Calling close multiple times
	// will return a nil error.
	Close() error
}

Network defines the functionality of the networking library.

func NewDefaultNetwork

func NewDefaultNetwork(
	registerer prometheus.Registerer,
	log logging.Logger,
	id ids.ShortID,
	ip utils.IPDesc,
	networkID uint32,
	version version.Version,
	parser version.Parser,
	listener net.Listener,
	dialer Dialer,
	serverUpgrader,
	clientUpgrader Upgrader,
	vdrs validators.Set,
	beacons validators.Set,
	router router.Router,
) Network

NewDefaultNetwork returns a new Network implementation with the provided parameters and some reasonable default values.

func NewNetwork

func NewNetwork(
	registerer prometheus.Registerer,
	log logging.Logger,
	id ids.ShortID,
	ip utils.IPDesc,
	networkID uint32,
	version version.Version,
	parser version.Parser,
	listener net.Listener,
	dialer Dialer,
	serverUpgrader,
	clientUpgrader Upgrader,
	vdrs validators.Set,
	beacons validators.Set,
	router router.Router,
	initialReconnectDelay,
	maxReconnectDelay time.Duration,
	maxMessageSize uint32,
	sendQueueSize int,
	maxNetworkPendingSendBytes int,
	networkPendingSendBytesToRateLimit int,
	maxClockDifference time.Duration,
	peerListGossipSpacing time.Duration,
	peerListGossipSize int,
	peerListStakerGossipFraction int,
	getVersionTimeout time.Duration,
	allowPrivateIPs bool,
	gossipSize int,
	pingPongTimeout time.Duration,
	pingFrequency time.Duration,
) Network

NewNetwork returns a new Network implementation with the provided parameters.

type Op

type Op byte

Op is an opcode

const (
	// Handshake:
	GetVersion Op = iota
	Version
	GetPeerList
	PeerList
	Ping
	Pong
	// Bootstrapping:
	GetAcceptedFrontier
	AcceptedFrontier
	GetAccepted
	Accepted
	GetAncestors
	MultiPut
	// Consensus:
	Get
	Put
	PushQuery
	PullQuery
	Chits
)

Public commands that may be sent between stakers

func (Op) String

func (op Op) String() string

type PeerID

type PeerID struct {
	IP           string    `json:"ip"`
	PublicIP     string    `json:"publicIP"`
	ID           string    `json:"nodeID"`
	Version      string    `json:"version"`
	LastSent     time.Time `json:"lastSent"`
	LastReceived time.Time `json:"lastReceived"`
}

PeerID ...

type Upgrader

type Upgrader interface {
	// Must be thread safe
	Upgrade(net.Conn) (ids.ShortID, net.Conn, error)
}

Upgrader ...

func NewIPUpgrader

func NewIPUpgrader() Upgrader

NewIPUpgrader ...

func NewTLSClientUpgrader

func NewTLSClientUpgrader(config *tls.Config) Upgrader

NewTLSClientUpgrader ...

func NewTLSServerUpgrader

func NewTLSServerUpgrader(config *tls.Config) Upgrader

NewTLSServerUpgrader ...

Jump to

Keyboard shortcuts

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