p2p

package
v1.3.0-beta2 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2019 License: MIT Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	QlcProtocolID    = "qlc/1.0.0"
	QlcProtocolFOUND = "/qlc/discovery/1.0.0"
)
View Source
const (
	QlcMessageHeaderLength       = 13
	QlcMessageMagicNumberEndIdx  = 3
	QlcMessageVersionEndIdx      = 4
	QlcMessageTypeEndIdx         = 5
	QlcMessageDataLengthEndIdx   = 9
	QlcMessageDataCheckSumEndIdx = 13
)
View Source
const (
	PublicNet netAttribute = iota
	Intranet
)
View Source
const (
	// Topic is the network pubsub topic identifier on which new messages are announced.
	MsgTopic = "/qlc/msgs"
	// BlockTopic is the pubsub topic identifier on which new blocks are announced.
	BlockTopic = "/qlc/blocks"
)
View Source
const (
	MessagePriorityHigh = iota
	MessagePriorityNormal
	MessagePriorityLow
)

Message Priority.

View Source
const (
	MaxStreamNum         = 50
	MaxPeersNumForRandom = 8
)
View Source
const MaxPingTimeOutTimes = 4

Variables

View Source
var (
	ErrInvalidMessageHeaderLength = errors.New("invalid message header length")
	ErrInvalidMessageDataLength   = errors.New("invalid message data length")
	ErrInvalidMagicNumber         = errors.New("invalid magic number")
	ErrInvalidDataCheckSum        = errors.New("invalid data checksum")
)

Error types

View Source
var (
	ErrStreamIsNotConnected = errors.New("stream is not connected")
	ErrNoStream             = errors.New("no stream")
	ErrCloseStream          = errors.New("stream close error")
)

Stream Errors

View Source
var (
	ErrPeerIsNotConnected = errors.New("peer is not connected")
)

Error types

View Source
var ErrPingSelf = errors.New("cannot ping self")

ErrPingSelf is returned if the pinger is instructed to ping itself.

View Source
var (
	MagicNumber = []byte{0x51, 0x4C, 0x43} //QLC
)

Functions

func Equal

func Equal(a []byte, b []byte) bool

Equal checks whether byte slice a and b are equal.

func FromUint32

func FromUint32(v uint32) []byte

FromUint32 decodes uint32.

func NewQlcMessage

func NewQlcMessage(data []byte, currentVersion byte, messageType MessageType) []byte

NewQlcMessage new qlc message

func Uint32

func Uint32(data []byte) uint32

Uint32 encodes []byte.

Types

type DiscoveryOption

type DiscoveryOption func(context.Context, host.Host) (mdns.Service, error)

type Dispatcher

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

Dispatcher a message dispatcher service.

func NewDispatcher

func NewDispatcher() *Dispatcher

NewDispatcher create Dispatcher instance.

func (*Dispatcher) Deregister

func (dp *Dispatcher) Deregister(subscribers *Subscriber)

Deregister deregister subscribers.

func (*Dispatcher) PutMessage

func (dp *Dispatcher) PutMessage(msg *Message)

PutMessage put new message to chan, then subscribers will be notified to process.

func (*Dispatcher) PutSyncMessage added in v1.3.0

func (dp *Dispatcher) PutSyncMessage(msg *Message)

PutMessage put new message to chan, then subscribers will be notified to process.

func (*Dispatcher) Register

func (dp *Dispatcher) Register(subscribers ...*Subscriber)

Register register subscribers.

func (*Dispatcher) Start

func (dp *Dispatcher) Start()

Start start message dispatch goroutine.

func (*Dispatcher) Stop

func (dp *Dispatcher) Stop()

Stop stop goroutine.

type Message

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

Message struct

func NewMessage added in v1.1.0

func NewMessage(messageType MessageType, from string, data []byte, content []byte) *Message

NewBaseMessage new base message

func (*Message) Content added in v0.0.9

func (msg *Message) Content() []byte

Content get the message content

func (*Message) Data

func (msg *Message) Data() []byte

Data get the message data

func (*Message) Hash

func (msg *Message) Hash() types.Hash

Hash return the message hash

func (*Message) MessageFrom

func (msg *Message) MessageFrom() string

MessageFrom get message who send

func (*Message) MessageType

func (msg *Message) MessageType() MessageType

MessageType get message type

func (*Message) String added in v1.1.0

func (msg *Message) String() string

String get the message to string

type MessageService

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

func NewMessageService

func NewMessageService(netService *QlcService, ledger *ledger.Ledger) *MessageService

NewService return new Service.

func (*MessageService) Start

func (ms *MessageService) Start()

Start start message service.

func (*MessageService) Stop

func (ms *MessageService) Stop()

type MessageType

type MessageType byte

MessageType a string for message type.

const (
	PublishReq      MessageType = iota //PublishReq
	ConfirmReq                         //ConfirmReq
	ConfirmAck                         //ConfirmAck
	FrontierRequest                    //FrontierReq
	FrontierRsp                        //FrontierRsp
	BulkPullRequest                    //BulkPullRequest
	BulkPullRsp                        //BulkPullRsp
	BulkPushBlock                      //BulkPushBlock
	MessageResponse                    //MessageResponse
	PovStatus
	PovPublishReq
	PovBulkPullReq
	PovBulkPullRsp
)

Message Type

type PeersSlice

type PeersSlice []interface{}

PeersSlice is a slice which contains peers

type Pinger added in v1.3.0

type Pinger struct {
	*ping.PingService
	// contains filtered or unexported fields
}

Pinger wraps a libp2p ping service. It exists to serve more helpful error messages in the case a node is pinging itself.

func NewPinger added in v1.3.0

func NewPinger(h host.Host) *Pinger

NewPinger creates a filecoin pinger provided with a pingService and a PID.

func (*Pinger) Ping added in v1.3.0

func (p *Pinger) Ping(ctx context.Context, pid peer.ID) (<-chan ping.Result, error)

Ping connects to other nodes on the network to test connections. The Pinger will error if the caller Pings the Pinger's self id.

type QlcMessage

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

func ParseQlcMessage

func ParseQlcMessage(data []byte) (*QlcMessage, error)

ParseqlcMessage parse qlc message

func (*QlcMessage) DataCheckSum

func (message *QlcMessage) DataCheckSum() uint32

DataCheckSum return data checkSum

func (*QlcMessage) DataLength

func (message *QlcMessage) DataLength() uint32

DataLength return dataLength

func (*QlcMessage) HeaderData

func (message *QlcMessage) HeaderData() []byte

HeaderData return HeaderData

func (*QlcMessage) MagicNumber

func (message *QlcMessage) MagicNumber() []byte

MagicNumber return magicNumber

func (*QlcMessage) MessageData

func (message *QlcMessage) MessageData() []byte

func (*QlcMessage) MessageType

func (message *QlcMessage) MessageType() MessageType

func (*QlcMessage) ParseMessageData

func (message *QlcMessage) ParseMessageData(data []byte) error

ParseMessageData parse qlc message data

func (*QlcMessage) VerifyData

func (message *QlcMessage) VerifyData() error

VerifyData verify qlc message data

func (*QlcMessage) VerifyHeader

func (message *QlcMessage) VerifyHeader() error

VerifyHeader verify qlc message header

func (*QlcMessage) Version

func (message *QlcMessage) Version() byte

type QlcNode

type QlcNode struct {
	ID peer.ID

	MessageSub pubsub.Subscription
	// contains filtered or unexported fields
}

func NewNode

func NewNode(config *config.Config) (*QlcNode, error)

NewNode return new QlcNode according to the config.

func (*QlcNode) BroadcastMessage

func (node *QlcNode) BroadcastMessage(messageName MessageType, value interface{})

BroadcastMessage broadcast message.

func (*QlcNode) GetBandwidthStats added in v1.3.0

func (node *QlcNode) GetBandwidthStats(stats *p2pmetrics.Stats)

func (*QlcNode) GetID

func (node *QlcNode) GetID() string

ID return node ID.

func (*QlcNode) HandlePeerFound

func (node *QlcNode) HandlePeerFound(p peer.AddrInfo)

HandlePeerFound attempts to connect to peer from `PeerInfo`.

func (*QlcNode) SendMessageToPeer

func (node *QlcNode) SendMessageToPeer(messageName MessageType, value interface{}, peerID string) error

SendMessageToPeer send message to a peer.

func (*QlcNode) SetQlcService

func (node *QlcNode) SetQlcService(ns *QlcService)

SetQlcService set netService

func (*QlcNode) StartServices

func (node *QlcNode) StartServices() error

func (*QlcNode) Stop

func (node *QlcNode) Stop() error

Stop stop a node.

func (*QlcNode) StreamManager

func (node *QlcNode) StreamManager() *StreamManager

ID return node ID.

type QlcService

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

QlcService service for qlc p2p network

func NewQlcService

func NewQlcService(cfgFile string) (*QlcService, error)

NewQlcService create netService

func (*QlcService) Broadcast

func (ns *QlcService) Broadcast(name MessageType, value interface{})

Broadcast message.

func (*QlcService) Deregister

func (ns *QlcService) Deregister(subscribers *Subscriber)

Deregister Deregister the subscribers.

func (*QlcService) MessageEvent

func (ns *QlcService) MessageEvent() event.EventBus

EventQueue return EventQueue

func (*QlcService) Node

func (ns *QlcService) Node() *QlcNode

Node return the peer node

func (*QlcService) PutMessage

func (ns *QlcService) PutMessage(msg *Message)

PutMessage put dpos message to dispatcher.

func (*QlcService) PutSyncMessage added in v1.3.0

func (ns *QlcService) PutSyncMessage(msg *Message)

PutMessage put snyc message to dispatcher.

func (*QlcService) Register

func (ns *QlcService) Register(subscribers ...*Subscriber)

Register register the subscribers.

func (*QlcService) SendMessageToPeer

func (ns *QlcService) SendMessageToPeer(messageName MessageType, value interface{}, peerID string) error

SendMessageToPeer send message to a peer.

func (*QlcService) Start

func (ns *QlcService) Start() error

Start start p2p manager.

func (*QlcService) Stop

func (ns *QlcService) Stop() error

Stop stop p2p manager.

type ServiceSync

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

Service manage sync tasks

func NewSyncService

func NewSyncService(netService *QlcService, ledger *ledger.Ledger) *ServiceSync

NewService return new Service.

func (*ServiceSync) GetSyncState added in v1.3.0

func (ss *ServiceSync) GetSyncState(s *common.SyncState)

func (*ServiceSync) Start

func (ss *ServiceSync) Start()

func (*ServiceSync) Stop

func (ss *ServiceSync) Stop()

Stop sync service

type Stream

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

Stream define the structure of a stream in p2p network

func NewStream

func NewStream(stream network.Stream, node *QlcNode) *Stream

NewStream return a new Stream

func NewStreamFromPID

func NewStreamFromPID(pid peer.ID, node *QlcNode) *Stream

NewStreamFromPID return a new Stream based on the pid

func (*Stream) Connect

func (s *Stream) Connect() error

Connect to the stream

func (*Stream) IsConnected

func (s *Stream) IsConnected() bool

IsConnected return if the stream is connected

func (*Stream) SendMessageToChan added in v1.2.3

func (s *Stream) SendMessageToChan(message *QlcMessage) error

SendMessage send msg to buffer

func (*Stream) SendMessageToPeer added in v0.0.9

func (s *Stream) SendMessageToPeer(messageType MessageType, data []byte) error

SendMessage send msg to peer

func (*Stream) StartLoop

func (s *Stream) StartLoop()

StartLoop start stream ping loop.

func (*Stream) String

func (s *Stream) String() string

func (*Stream) Write

func (s *Stream) Write(data []byte) error

func (*Stream) WriteQlcMessage

func (s *Stream) WriteQlcMessage(message *QlcMessage) error

WriteQlcMessage write qlc msg in the stream

type StreamManager

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

StreamManager manages all streams

func NewStreamManager

func NewStreamManager() *StreamManager

NewStreamManager return a new stream manager

func (*StreamManager) Add

func (sm *StreamManager) Add(s network.Stream)

Add a new stream into the stream manager

func (*StreamManager) AddStream

func (sm *StreamManager) AddStream(stream *Stream)

AddStream into the stream manager

func (*StreamManager) BroadcastMessage

func (sm *StreamManager) BroadcastMessage(messageName MessageType, v interface{})

BroadcastMessage broadcast the message

func (*StreamManager) CloseStream

func (sm *StreamManager) CloseStream(peerID string) error

CloseStream with the given pid and reason

func (*StreamManager) FindByPeerID

func (sm *StreamManager) FindByPeerID(peerID string) *Stream

FindByPeerID find the stream with the given peerID

func (*StreamManager) GetAllConnectPeersInfo added in v1.1.1

func (sm *StreamManager) GetAllConnectPeersInfo(p map[string]string)

func (*StreamManager) IsConnectWithPeerId added in v1.2.3

func (sm *StreamManager) IsConnectWithPeerId(peerID string) bool

func (*StreamManager) PeerCounts added in v0.0.4

func (sm *StreamManager) PeerCounts() int

func (*StreamManager) RandomPeer

func (sm *StreamManager) RandomPeer() (string, error)

func (*StreamManager) RemoveStream

func (sm *StreamManager) RemoveStream(s *Stream)

RemoveStream from the stream manager

func (*StreamManager) SetQlcNodeAndMaxStreamNum added in v1.3.0

func (sm *StreamManager) SetQlcNodeAndMaxStreamNum(node *QlcNode)

SetQlcService set netService

type Subscriber

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

Subscriber subscriber.

func NewSubscriber

func NewSubscriber(msgChan chan *Message, msgType MessageType) *Subscriber

NewSubscriber return new Subscriber instance.

func (*Subscriber) MessageChan

func (s *Subscriber) MessageChan() chan *Message

MessageChan return msgChan.

func (*Subscriber) MessageType

func (s *Subscriber) MessageType() MessageType

MessageType return msgTypes.

Directories

Path Synopsis
pb

Jump to

Keyboard shortcuts

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