peer

package
v0.3.3 Latest Latest
Warning

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

Go to latest
Published: Jun 14, 2019 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DisableLog

func DisableLog()

DisableLog disables all library log output. Logging output is disabled by default until either UseLogger or SetLogWriter are called.

func UseLogger

func UseLogger(logger elalog.Logger)

UseLogger uses a specified Logger to output package logging info. This should be used in preference to SetLogWriter if the caller is also using elalog.

Types

type Config

type Config struct {
	Magic            uint32
	ProtocolVersion  uint32
	DefaultPort      uint16
	Services         uint64
	DisableRelayTx   bool
	HostToNetAddress HostToNetAddrFunc
	MakeEmptyMessage func(cmd string) (p2p.Message, error)
	BestHeight       func() uint64
	IsSelfConnection func(ip net.IP, port int, nonce uint64) bool
	GetVersionNonce  func() uint64
	MessageFunc      MessageFunc
}

Config is a descriptor which specifies the peer instance configuration.

type HostToNetAddrFunc

type HostToNetAddrFunc func(host string, port uint16, services uint64) (*p2p.NetAddress, error)

HostToNetAddrFunc is a func which takes a host, port, services and returns the netaddress.

type MessageFunc

type MessageFunc func(peer *Peer, msg p2p.Message)

MessageFunc is a message handler in peer's configuration

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

func NewInboundPeer

func NewInboundPeer(cfg *Config) *Peer

NewInboundPeer returns a new inbound peer. Use Start to begin processing incoming and outgoing messages.

func NewOutboundPeer

func NewOutboundPeer(cfg *Config, addr string) (*Peer, error)

NewOutboundPeer returns a new outbound peer.

func (*Peer) AddMessageFunc

func (p *Peer) AddMessageFunc(messageFunc MessageFunc)

AddMessageFunc add a new message handler for the peer.

func (*Peer) Addr

func (p *Peer) Addr() string

Addr returns the peer address.

This function is safe for concurrent access.

func (*Peer) AssociateConnection

func (p *Peer) AssociateConnection(conn net.Conn)

AssociateConnection associates the given conn to the peer. Calling this function when the peer is already connected will have no effect.

func (*Peer) Connected

func (p *Peer) Connected() bool

Connected returns whether or not the peer is currently connected.

This function is safe for concurrent access.

func (*Peer) Disconnect

func (p *Peer) Disconnect()

Disconnect disconnects the peer by closing the connection. Calling this function when the peer is already disconnected or in the process of disconnecting will have no effect.

func (*Peer) Height

func (p *Peer) Height() uint32

Height returns the height of the peer.

This function is safe for concurrent access.

func (*Peer) ID

func (p *Peer) ID() uint64

ID returns the peer id.

This function is safe for concurrent access.

func (*Peer) Inbound

func (p *Peer) Inbound() bool

Inbound returns whether the peer is inbound.

This function is safe for concurrent access.

func (*Peer) LastPingMicros

func (p *Peer) LastPingMicros() int64

LastPingMicros returns the last ping micros of the remote peer.

This function is safe for concurrent access.

func (*Peer) LastPingTime

func (p *Peer) LastPingTime() time.Time

LastPingTime returns the last ping time of the remote peer.

This function is safe for concurrent access.

func (*Peer) LastRecv

func (p *Peer) LastRecv() time.Time

LastRecv returns the last recv time of the peer.

This function is safe for concurrent access.

func (*Peer) LastSend

func (p *Peer) LastSend() time.Time

LastSend returns the last send time of the peer.

This function is safe for concurrent access.

func (*Peer) LocalAddr

func (p *Peer) LocalAddr() net.Addr

LocalAddr returns the local address of the connection.

This function is safe fo concurrent access.

func (*Peer) NA

func (p *Peer) NA() *p2p.NetAddress

NA returns the peer network address.

This function is safe for concurrent access.

func (*Peer) ProtocolVersion

func (p *Peer) ProtocolVersion() uint32

ProtocolVersion returns the negotiated peer protocol version.

This function is safe for concurrent access.

func (*Peer) PushAddrMsg

func (p *Peer) PushAddrMsg(addresses []*p2p.NetAddress) []*p2p.NetAddress

PushAddrMsg sends an addr message to the connected peer using the provided addresses. This function is useful over manually sending the message via QueueMessage since it automatically limits the addresses to the maximum number allowed by the message and randomizes the chosen addresses when there are too many. It returns the addresses that were actually sent and no message will be sent if there are no entries in the provided addresses slice.

This function is safe for concurrent access.

func (*Peer) QueueMessage added in v0.3.2

func (p *Peer) QueueMessage(msg p2p.Message, doneChan chan<- struct{})

QueueMessage adds the passed bitcoin message to the peer send queue.

This function is safe for concurrent access.

func (*Peer) Services

func (p *Peer) Services() uint64

Services returns the services flag of the remote peer.

This function is safe for concurrent access.

func (*Peer) SetStallHandler added in v0.3.2

func (p *Peer) SetStallHandler(handler StallHandler)

SetStallHandler set the stall handler for the peer.

func (*Peer) StartingHeight

func (p *Peer) StartingHeight() uint32

StartingHeight returns the last known height the peer reported during the initial negotiation phase.

This function is safe for concurrent access.

func (*Peer) StatsSnapshot

func (p *Peer) StatsSnapshot() *StatsSnap

StatsSnapshot returns a snapshot of the current peer flags and statistics.

This function is safe for concurrent access.

func (*Peer) String

func (p *Peer) String() string

String returns the peer's address and directionality as a human-readable string.

This function is safe for concurrent access.

func (*Peer) TimeConnected

func (p *Peer) TimeConnected() time.Time

TimeConnected returns the time at which the peer connected.

This function is safe for concurrent access.

func (*Peer) TimeOffset

func (p *Peer) TimeOffset() int64

TimeOffset returns the number of seconds the local time was offset from the time the peer reported during the initial negotiation phase. Negative values indicate the remote peer's time is before the local time.

This function is safe for concurrent access.

func (*Peer) UpdateHeight

func (p *Peer) UpdateHeight(newHeight uint32)

UpdateHeight updates the last known block for the peer.

This function is safe for concurrent access.

func (*Peer) VerAckReceived

func (p *Peer) VerAckReceived() bool

VerAckReceived returns whether or not a verack message was received by the peer.

This function is safe for concurrent access.

func (*Peer) VersionKnown

func (p *Peer) VersionKnown() bool

VersionKnown returns the whether or not the version of a peer is known locally.

This function is safe for concurrent access.

func (*Peer) WaitForDisconnect

func (p *Peer) WaitForDisconnect()

WaitForDisconnect waits until the peer has completely disconnected and all resources are cleaned up. This will happen if either the local or remote side has been disconnected or the peer is forcibly disconnected via Disconnect.

type StallControlCmd added in v0.3.2

type StallControlCmd uint8

StallControlCmd represents the command of a stall control message.

const (
	// SCCSendMessage indicates a message is being sent to the remote peer.
	SCCSendMessage StallControlCmd = iota

	// SCCReceiveMessage indicates a message has been received from the
	// remote peer.
	SCCReceiveMessage

	// SCCHandlerStart indicates a callback handler is about to be invoked.
	SCCHandlerStart

	// SCCHandlerDone indicates a callback handler has completed.
	SCCHandlerDone
)

Constants for the command of a stall control message.

type StallControlMsg added in v0.3.2

type StallControlMsg struct {
	CMD StallControlCmd
	MSG p2p.Message
}

StallControlMsg is used to signal the stall handler about specific events so it can properly detect and handle stalled remote peers.

type StallHandler added in v0.3.2

type StallHandler func(msg StallControlMsg)

StallHandler defines the interfaces to invoke stall control messages.

type StatsSnap

type StatsSnap struct {
	ID             uint64
	Addr           string
	Services       uint64
	RelayTx        uint8
	LastSend       time.Time
	LastRecv       time.Time
	ConnTime       time.Time
	TimeOffset     int64
	Version        uint32
	Inbound        bool
	StartingHeight uint32
	LastBlock      uint32
	LastPingTime   time.Time
	LastPingMicros int64
}

StatsSnap is a snapshot of peer stats at a point in time.

Jump to

Keyboard shortcuts

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