Documentation ¶
Index ¶
- Constants
- Variables
- func Equal(a []byte, b []byte) bool
- func FromUint32(v uint32) []byte
- func NewQlcMessage(data []byte, currentVersion byte, messageType MessageType) []byte
- func Uint32(data []byte) uint32
- type ConnectionGater
- func (cg *ConnectionGater) InterceptAccept(network.ConnMultiaddrs) bool
- func (cg *ConnectionGater) InterceptAddrDial(p peer.ID, addr ma.Multiaddr) bool
- func (cg *ConnectionGater) InterceptPeerDial(peer.ID) bool
- func (cg *ConnectionGater) InterceptSecured(network.Direction, peer.ID, network.ConnMultiaddrs) bool
- func (cg *ConnectionGater) InterceptUpgraded(network.Conn) (bool, control.DisconnectReason)
- type DiscoveryOption
- type Dispatcher
- type EventBroadcastMsg
- type EventConfirmAckMsg
- type EventFrontiersReqMsg
- type EventPovBulkPullReqMsg
- type EventPovBulkPullRspMsg
- type EventPovPeerStatusMsg
- type EventSendMsgToSingleMsg
- type Message
- type MessageService
- type MessageType
- type PeersSlice
- type QlcMessage
- func (message *QlcMessage) DataCheckSum() uint32
- func (message *QlcMessage) DataLength() uint32
- func (message *QlcMessage) HeaderData() []byte
- func (message *QlcMessage) MagicNumber() []byte
- func (message *QlcMessage) MessageData() []byte
- func (message *QlcMessage) MessageType() MessageType
- func (message *QlcMessage) ParseMessageData(data []byte) error
- func (message *QlcMessage) VerifyData() error
- func (message *QlcMessage) VerifyHeader() error
- func (message *QlcMessage) Version() byte
- type QlcNode
- func (node *QlcNode) BroadcastMessage(messageName MessageType, value interface{})
- func (node *QlcNode) GetBandwidthStats(stats *p2pmetrics.Stats)
- func (node *QlcNode) GetID() string
- func (node *QlcNode) HandlePeerFound(p peer.AddrInfo)
- func (node *QlcNode) SendMessageToPeer(messageName MessageType, value interface{}, peerID string) error
- func (node *QlcNode) SetQlcService(ns *QlcService)
- func (node *QlcNode) StartServices() error
- func (node *QlcNode) Stop() error
- func (node *QlcNode) StreamManager() *StreamManager
- type QlcService
- func (ns *QlcService) Broadcast(name MessageType, value interface{})
- func (ns *QlcService) Deregister(subscribers *Subscriber)
- func (ns *QlcService) MessageEvent() event.EventBus
- func (ns *QlcService) Node() *QlcNode
- func (ns *QlcService) PutMessage(msg *Message)
- func (ns *QlcService) PutSyncMessage(msg *Message)
- func (ns *QlcService) Register(subscribers ...*Subscriber)
- func (ns *QlcService) SendMessageToPeer(messageName MessageType, value interface{}, peerID string) error
- func (ns *QlcService) Start() error
- func (ns *QlcService) Stop() error
- type ServiceSync
- type Stream
- func (s *Stream) Connect() error
- func (s *Stream) IsConnected() bool
- func (s *Stream) SendMessageToChan(message *QlcMessage) error
- func (s *Stream) SendMessageToPeer(messageType MessageType, data []byte) error
- func (s *Stream) StartLoop()
- func (s *Stream) String() string
- func (s *Stream) Write(data []byte) error
- func (s *Stream) WriteQlcMessage(message *QlcMessage) error
- type StreamManager
- func (sm *StreamManager) Add(s network.Stream)
- func (sm *StreamManager) AddOnlineInfo(info *types.PeerInfo)
- func (sm *StreamManager) AddOrUpdateOnlineInfo(info *types.PeerInfo)
- func (sm *StreamManager) AddStream(stream *Stream)
- func (sm *StreamManager) BroadcastMessage(messageName MessageType, v interface{})
- func (sm *StreamManager) CloseStream(peerID string) error
- func (sm *StreamManager) FindByPeerID(peerID string) *Stream
- func (sm *StreamManager) GetAllConnectPeersInfo(pr *[]*types.PeerInfo)
- func (sm *StreamManager) GetOnlinePeersInfo(pr *[]*types.PeerInfo)
- func (sm *StreamManager) IsConnectWithPeerId(peerID string) bool
- func (sm *StreamManager) PeerCounts() int
- func (sm *StreamManager) RandomPeer() (string, error)
- func (sm *StreamManager) RemoveStream(s *Stream)
- func (sm *StreamManager) SetQlcNodeAndMaxStreamNum(node *QlcNode)
- type Subscriber
- type WhiteList
Constants ¶
const ( QlcProtocolID = "qlc/1.0.0" QlcProtocolFOUND = "/qlc/discovery/1.0.0" QlcMDnsFOUND = "/qlc/MDns/1.0.0" )
const ( QlcMessageHeaderLength = 13 QlcMessageMagicNumberEndIdx = 3 QlcMessageVersionEndIdx = 4 QlcMessageTypeEndIdx = 5 QlcMessageDataLengthEndIdx = 9 QlcMessageDataCheckSumEndIdx = 13 )
const ( PublicNet netAttribute = iota Intranet )
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" )
const ( MaxPingTimeOutTimes = 4 PingTimeInterval = 30 * time.Second ConnectBootstrapInterval = 20 * time.Second PublishConnectPeersInfo = 20 * time.Second PublishOnlinePeersInfo = 25 * time.Second PublishBandWithPeersInfo = 60 * time.Second )
const ( MessagePriorityHigh = iota MessagePriorityNormal MessagePriorityLow )
Message Priority.
const ( MaxStreamNum = 50 MaxPeersNumForRandom = 8 )
Variables ¶
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
var ( ErrPeerIsNotConnected = errors.New("peer is not connected") ErrNoBootNode = errors.New("can not get bootNode") )
Error types
var ( ErrStreamIsNotConnected = errors.New("stream is not connected") ErrNoStream = errors.New("no stream") ErrCloseStream = errors.New("stream close error") )
Stream Errors
var (
MagicNumber = []byte{0x51, 0x4C, 0x43} //QLC
)
Functions ¶
func NewQlcMessage ¶
func NewQlcMessage(data []byte, currentVersion byte, messageType MessageType) []byte
NewQlcMessage new qlc message
Types ¶
type ConnectionGater ¶ added in v1.4.0
type ConnectionGater struct {
// contains filtered or unexported fields
}
func NewConnectionGater ¶ added in v1.4.0
func NewConnectionGater() *ConnectionGater
func (*ConnectionGater) InterceptAccept ¶ added in v1.4.0
func (cg *ConnectionGater) InterceptAccept(network.ConnMultiaddrs) bool
func (*ConnectionGater) InterceptAddrDial ¶ added in v1.4.0
func (*ConnectionGater) InterceptPeerDial ¶ added in v1.4.0
func (cg *ConnectionGater) InterceptPeerDial(peer.ID) bool
func (*ConnectionGater) InterceptSecured ¶ added in v1.4.0
func (cg *ConnectionGater) InterceptSecured(network.Direction, peer.ID, network.ConnMultiaddrs) bool
func (*ConnectionGater) InterceptUpgraded ¶ added in v1.4.0
func (cg *ConnectionGater) InterceptUpgraded(network.Conn) (bool, control.DisconnectReason)
type Dispatcher ¶
type Dispatcher struct {
// contains filtered or unexported fields
}
Dispatcher a message dispatcher service.
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.
type EventBroadcastMsg ¶ added in v1.4.0
type EventBroadcastMsg struct { Type MessageType Message interface{} }
type EventConfirmAckMsg ¶ added in v1.4.0
type EventConfirmAckMsg struct { Block *protos.ConfirmAckBlock From string }
type EventFrontiersReqMsg ¶ added in v1.4.0
type EventFrontiersReqMsg struct {
PeerID string
}
type EventPovBulkPullReqMsg ¶ added in v1.4.0
type EventPovBulkPullReqMsg struct { Req *protos.PovBulkPullReq From string }
type EventPovBulkPullRspMsg ¶ added in v1.4.0
type EventPovBulkPullRspMsg struct { Resp *protos.PovBulkPullRsp From string }
type EventPovPeerStatusMsg ¶ added in v1.4.0
type EventSendMsgToSingleMsg ¶ added in v1.4.0
type EventSendMsgToSingleMsg struct { Type MessageType Message interface{} PeerID string }
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) MessageFrom ¶
MessageFrom get message who send
func (*Message) MessageType ¶
func (msg *Message) MessageType() MessageType
MessageType get message type
type MessageService ¶
type MessageService struct {
// contains filtered or unexported fields
}
func NewMessageService ¶
func NewMessageService(netService *QlcService, ledger ledger.Store) *MessageService
NewService return new 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 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 MessageTopic *pubsub.Topic MessageSub pubsub.Subscription // contains filtered or unexported fields }
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) HandlePeerFound ¶
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 (*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) 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.
type ServiceSync ¶
type ServiceSync struct {
// contains filtered or unexported fields
}
Service manage sync tasks
func NewSyncService ¶
func NewSyncService(netService *QlcService, ledger ledger.Store) *ServiceSync
NewService return new Service.
func (*ServiceSync) Start ¶
func (ss *ServiceSync) Start()
type Stream ¶
type Stream struct {
// contains filtered or unexported fields
}
Stream define the structure of a stream in p2p network
func NewStreamFromPID ¶
NewStreamFromPID return a new Stream based on the pid
func (*Stream) IsConnected ¶
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) 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) AddOnlineInfo ¶ added in v1.3.2
func (sm *StreamManager) AddOnlineInfo(info *types.PeerInfo)
func (*StreamManager) AddOrUpdateOnlineInfo ¶ added in v1.3.2
func (sm *StreamManager) AddOrUpdateOnlineInfo(info *types.PeerInfo)
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(pr *[]*types.PeerInfo)
func (*StreamManager) GetOnlinePeersInfo ¶ added in v1.3.1
func (sm *StreamManager) GetOnlinePeersInfo(pr *[]*types.PeerInfo)
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.