Documentation ¶
Index ¶
- Constants
- Variables
- func CreateUUID() string
- func PrefixDiff(a, b []byte, n int) int
- func PrefixLen(a []byte) int
- func SortByDistance(id GRING.PublicKey, ids []GRING.ID) []GRING.ID
- func XOR(a, b []byte) []byte
- type ADMessage
- type ADtoken
- type Deny
- type DownloadMessage
- type Events
- type FindNodeRequest
- type FindNodeResponse
- type GossipMessage
- type Iterator
- type IteratorOption
- func WithIteratorLogger(logger *zap.Logger) IteratorOption
- func WithIteratorLookupTimeout(lookupTimeout time.Duration) IteratorOption
- func WithIteratorMaxNumResults(maxNumResults int) IteratorOption
- func WithIteratorNumParallelLookups(numParallelLookups int) IteratorOption
- func WithIteratorNumParallelRequestsPerLookup(numParallelRequestsPerLookup int) IteratorOption
- type P2pMessage
- type Ping
- type Pong
- type Project
- type Protocol
- func (p *Protocol) Ack_bc(id GRING.ID, isInbound bool, opcode ...byte)
- func (p *Protocol) Ack_gr(id GRING.ID)
- func (p *Protocol) Bind(node *GRING.Node) error
- func (p *Protocol) Broadcast_BC(sender GRING.ID, data []byte, opcode byte)
- func (p *Protocol) Choose(peers []GRING.ID, entry []string) ([]GRING.ID, []GRING.ID)
- func (p *Protocol) DiscoverLocal(isBootstrap bool, opts ...IteratorOption) []GRING.ID
- func (p *Protocol) DiscoverRandom(isBootstrap bool, opts ...IteratorOption) []GRING.ID
- func (p *Protocol) DoneUse()
- func (p *Protocol) Fedcomp_GR(sender GRING.ID, data []byte)
- func (p *Protocol) Find(target GRING.PublicKey, isBootstrap bool, opts ...IteratorOption) []GRING.ID
- func (p *Protocol) FindRandMember(push int, len_peers int, peers []GRING.ID) ([]GRING.ID, []GRING.ID)
- func (p *Protocol) GetGroupSize() int
- func (p *Protocol) GetID() byte
- func (p *Protocol) GetItem() DownloadMessage
- func (p *Protocol) GetLeader() string
- func (p *Protocol) GetNumMembers() int
- func (p *Protocol) GetReport() bool
- func (p *Protocol) GetTotMembers() int
- func (p *Protocol) Gossip_BC(uuid string, data []byte, avoid []string, msgtype byte, targetid GRING.ID)
- func (p *Protocol) GridSearchGroupSize(tot_num_sub int) int
- func (p *Protocol) Handle(ctx GRING.HandlerContext) error
- func (p *Protocol) HasSeenPush(target GRING.ID, euuid []byte) bool
- func (p *Protocol) HasUUID(euuid []byte) bool
- func (p *Protocol) KPeers_bc(k int)
- func (p *Protocol) Lock()
- func (p *Protocol) MarkSeenPush(target GRING.ID, euuid []byte)
- func (p *Protocol) MaxNeighborsBC() int
- func (p *Protocol) MaxNeighborsGR() int
- func (p *Protocol) Multicast_GR(sender GRING.ID, data []byte, opcode byte)
- func (p *Protocol) OnExistingConnection(isInbound bool, client *GRING.Client, opcode ...byte)
- func (p *Protocol) OnJoinGroup(msg P2pMessage)
- func (p *Protocol) OnMessageRecv(client *GRING.Client, opcode ...byte)
- func (p *Protocol) OnMessageSent(client *GRING.Client, opcode ...byte)
- func (p *Protocol) OnPeerConnected(isInbound bool, client *GRING.Client, opcode ...byte)
- func (p *Protocol) OnPingFailed(addr string, err error)
- func (p *Protocol) OnRequestGroupInitiator(msg P2pMessage)
- func (p *Protocol) OnRequestGroupSubleader(msg P2pMessage)
- func (p *Protocol) OnRequestJoinWorker(msg P2pMessage)
- func (p *Protocol) On_recv_gossip_pullreq(msg GossipMessage, ctx GRING.HandlerContext)
- func (p *Protocol) On_recv_gossip_push(msg GossipMessage, ctx GRING.HandlerContext)
- func (p *Protocol) On_recv_gossip_push_only(msg GossipMessage, ctx GRING.HandlerContext)
- func (p *Protocol) On_recv_relay(relaymsg RelayMessage, ctx GRING.HandlerContext)
- func (p *Protocol) Peers_bc()
- func (p *Protocol) Peers_gr()
- func (p *Protocol) Ping(ctx context.Context, addr string, opcode ...byte) error
- func (p *Protocol) Protocol() GRING.Protocol
- func (p *Protocol) PubSub() *PubSub
- func (p *Protocol) Remove(peers []GRING.ID, entry []string) []GRING.ID
- func (p *Protocol) RemoveConn(table *Table, id GRING.ID, isInbound bool)
- func (p *Protocol) ReplaceConn(id GRING.ID, isInbound bool)
- func (p *Protocol) Report_GR(sender GRING.ID, data []byte, aggregation int)
- func (p *Protocol) RequestDownload(euuid []byte, preferred []string) (DownloadMessage, bool)
- func (p *Protocol) Sendmsg(euuid []byte, data []byte, length int, listdata []byte, id GRING.ID, ...)
- func (p *Protocol) SetGroupSize(size int)
- func (p *Protocol) SetID(id byte)
- func (p *Protocol) SetItem(msg DownloadMessage)
- func (p *Protocol) SetLeader(addr string)
- func (p *Protocol) SetMaxNeighborsGR(max int)
- func (p *Protocol) SetNumMembers(mem int)
- func (p *Protocol) SetReport(b bool)
- func (p *Protocol) SetTotMembers(totmem int)
- func (p *Protocol) SetUUID(euuid []byte)
- func (p *Protocol) SetUse()
- func (p *Protocol) Table_bc() *Table
- func (p *Protocol) Table_gr() *Table
- func (p *Protocol) Unlock()
- type ProtocolOption
- func WithProtocolEvents(events Events) ProtocolOption
- func WithProtocolLogger(logger *zap.Logger) ProtocolOption
- func WithProtocolMaxNeighborsBC(maxNeighbors int) ProtocolOption
- func WithProtocolMaxNeighborsGR(maxNeighbors int) ProtocolOption
- func WithProtocolPingTimeout(pingTimeout time.Duration) ProtocolOption
- type PubSub
- type RelayMessage
- type Request
- type SubsMessage
- type Subscriber
- type Table
- func (t *Table) Bucket(target GRING.PublicKey) []GRING.ID
- func (t *Table) DecreaseInBound()
- func (t *Table) DecreaseOutBound()
- func (t *Table) Delete(target GRING.PublicKey) (GRING.ID, bool)
- func (t *Table) DeleteByAddress(target string) (GRING.ID, bool)
- func (t *Table) Entries() []GRING.ID
- func (t *Table) FindClosest(target GRING.PublicKey, k int) []GRING.ID
- func (t *Table) GetDirection(id GRING.PublicKey) (bool, bool)
- func (t *Table) GetNumInBound() int
- func (t *Table) GetNumOutBound() int
- func (t *Table) IncreaseInBound()
- func (t *Table) IncreaseOutBound()
- func (t *Table) KEntries(k int) []GRING.ID
- func (t *Table) KPeers(k int) []GRING.ID
- func (t *Table) Last(target GRING.PublicKey) GRING.ID
- func (t *Table) NumEntries() int
- func (t *Table) Peers() []GRING.ID
- func (t *Table) Recorded(target GRING.PublicKey) bool
- func (t *Table) RemoveDirection(id GRING.PublicKey)
- func (t *Table) Self() GRING.ID
- func (t *Table) SetDirection(id GRING.PublicKey, isInbound bool)
- func (t *Table) Update(target GRING.ID) (bool, error)
- type UserInfo
Constants ¶
const ( // messaging with group routing table OP_GROUP_MULTICAST = 0x02 // register outbound target in group routing table OP_REQUEST_GROUP = 0x03 OP_REQUEST_GROUP_SUB = 0x04 OP_REQUEST_JOIN = 0x05 OP_JOIN_GROUP = 0x06 OP_FED_COMP = 0x07 OP_REPORT = 0x08 OP_ONE_TIME = 0x09 OP_NEW_CONN = 0x10 OP_DISCOVER = 0x11 // hybrid fed comp OP_FED_COMP_PUSH = 0x12 OP_FED_COMP_PULL_REQ = 0x13 // general gossip messaging OP_GOSSIP_PUSH_ONLY = 0x14 OP_GOSSIP_PUSH = 0x15 OP_GOSSIP_PULL_REQ = 0x16 )
protocol opcode
const ( ID_NOBODY = 0x00 ID_PUBLISHER = 0x01 ID_INITIATOR = 0x02 ID_SUBLEADER = 0x03 ID_WORKER = 0x04 )
Identification state
const ( NOOP = 0x00 // Project state STATE_PUBLISHED = 0x01 STATE_ACTIVE = 0x02 STATE_COMMITTED = 0x03 MSG_TYPE_ADMSG = 0x04 MSG_TYPE_SUBSMSG = 0x05 )
protocol opcode
const BucketSize int = 16
BucketSize returns the capacity, or the total number of peer ID entries a single routing table bucket may hold.
Variables ¶
var ErrBucketFull = errors.New("bucket is full")
ErrBucketFull is returned when a routing table bucket is at max capacity.
Functions ¶
func CreateUUID ¶
func CreateUUID() string
func PrefixDiff ¶
PrefixDiff counts the number of equal prefixed bits of a and b.
func SortByDistance ¶
SortByDistance sorts ids by descending XOR distance with respect to id.
Types ¶
type ADMessage ¶
func UnmarshalADMessage ¶
type DownloadMessage ¶
type DownloadMessage struct { UUID []byte //32bytes for plain, 34bytes for encoded Contents []byte }
func UnmarshalDownloadMessage ¶
func UnmarshalDownloadMessage(buf []byte) (DownloadMessage, error)
func (DownloadMessage) Marshal ¶
func (m DownloadMessage) Marshal() []byte
type Events ¶
type Events struct { // OnPeerAdmitted is called when a peer is admitted to being inserted into your nodes' routing table. OnPeerAdmitted_bc func(id GRING.ID) // OnPeerAdmitted is called when a peer is admitted to being inserted into your nodes' routing table. OnPeerAdmitted_gr func(id GRING.ID) // OnPeerContacted is called when a peer is contacting this node. It is for collecting subscribers. OnPeerContacted func(id GRING.ID) // OnPeerActivity is called when your node interacts with a peer, causing the peer's entry in your nodes' routing // table to be bumped to the head of its respective bucket. OnPeerActivity func(id GRING.ID) // OnPeerEvicted is called when your node fails to ping/dial a peer that was previously admitted into your nodes' // routing table, which leads to an eviction of the peers ID from your nodes' routing table. OnPeerEvicted func(id GRING.ID) OnRequestGroup func(msg P2pMessage) OnRequestGroupSub func(msg P2pMessage) OnRequestJoin func(msg P2pMessage) OnSortByMetric func(list map[string]Subscriber) []Subscriber OnJoinGroup func(msg P2pMessage) OnQueryGroupInfo func() []byte OnAggregateGroupInfo func([][]byte) OnGroupDone func(msg P2pMessage) OnFedComputation func(msg P2pMessage) OnReport func(msg P2pMessage) OnFedComputationPush func(msg GossipMessage, ctx GRING.HandlerContext) OnFedComputationPullReq func(msg GossipMessage, ctx GRING.HandlerContext) OnFedComputationPull func(msg GossipMessage, ctx GRING.HandlerContext) OnRecvGossipPush func(msg GossipMessage, ctx GRING.HandlerContext) OnRecvGossipPullReq func(msg GossipMessage, ctx GRING.HandlerContext) OnRecvRelayMessage func(msg RelayMessage, ctx GRING.HandlerContext) OnRecvGossipMsg func(msg GossipMessage) }
Events comprise of callbacks that are to be called upon the encountering of various events as a node follows the Kademlia protocol. An Events declaration may be registered to a Protocol upon instantiation through calling New with the WithProtocolEvents functional option.
type FindNodeRequest ¶
FindNodeRequest represents a FIND_NODE RPC call in the Kademlia specification. It contains a target public key to which a peer is supposed to respond with a slice of IDs that neighbor the target ID w.r.t. XOR distance.
func UnmarshalFindNodeRequest ¶
func UnmarshalFindNodeRequest(buf []byte) (FindNodeRequest, error)
UnmarshalFindNodeRequest decodes buf, which must be the exact size of a public key, into a FindNodeRequest. It throws an io.ErrUnexpectedEOF if buf is malformed.
func (FindNodeRequest) Marshal ¶
func (r FindNodeRequest) Marshal() []byte
Marshal implements GRING.Serializable and returns the public key of the target for this search request as a byte slice.
type FindNodeResponse ¶
FindNodeResponse returns the results of a FIND_NODE RPC call which comprises of the IDs of peers closest to a target public key specified in a FindNodeRequest.
func UnmarshalFindNodeResponse ¶
func UnmarshalFindNodeResponse(buf []byte) (FindNodeResponse, error)
UnmarshalFindNodeResponse decodes buf, which is expected to encode a list of closest peer ID results, into a FindNodeResponse. It throws an io.ErrUnexpectedEOF if buf is malformed.
func (FindNodeResponse) Marshal ¶
func (r FindNodeResponse) Marshal() []byte
Marshal implements GRING.Serializable and encodes the list of closest peer ID results into a byte representative of the length of the list, concatenated with the serialized byte representation of the peer IDs themselves.
type GossipMessage ¶
type GossipMessage struct { Opcode byte Type byte // type of contents e.g. nested msg type in contents UUID []byte //32bytes for plain, 34bytes for encoded Count uint32 TargetID GRING.ID //ID is publickey List []byte Contents []byte }
func UnmarshalGossipMessage ¶
func UnmarshalGossipMessage(buf []byte) (GossipMessage, error)
func (GossipMessage) Marshal ¶
func (m GossipMessage) Marshal() []byte
type Iterator ¶
Iterator represents a S/Kademlia overlay network iterator over all peers that may be discovered in the network. It is used for peer discovery, and for finding peers by their public key over an overlay network.
func NewIterator ¶
func NewIterator(node *GRING.Node, table *Table, opts ...IteratorOption) *Iterator
NewIterator instantiates a new overlay network iterator bounded to a node and routing table that may be optionally configured with a variadic list of functional options.
type IteratorOption ¶
type IteratorOption func(it *Iterator)
IteratorOption represents a functional option which may be passed to NewIterator, or to (*Protocol).Find or (*Protocol).Discover to configure Iterator.
func WithIteratorLogger ¶
func WithIteratorLogger(logger *zap.Logger) IteratorOption
WithIteratorLogger configures the logger instance for an iterator. By default, the logger used is the logger of the node which the iterator is bound to.
func WithIteratorLookupTimeout ¶
func WithIteratorLookupTimeout(lookupTimeout time.Duration) IteratorOption
WithIteratorLookupTimeout sets the max duration to wait until we declare a lookup request sent in amidst a single disjoint lookup to have timed out. By default, it is set to 3 seconds.
func WithIteratorMaxNumResults ¶
func WithIteratorMaxNumResults(maxNumResults int) IteratorOption
WithIteratorMaxNumResults sets the max number of resultant peer IDs from a single (*Iterator).Find call. By default, it is set to the max capacity of a routing table bucket which is 16 based on the S/Kademlia paper.
func WithIteratorNumParallelLookups ¶
func WithIteratorNumParallelLookups(numParallelLookups int) IteratorOption
WithIteratorNumParallelLookups sets the max number of parallel disjoint lookups that may occur at once while executing (*Iterator).Find. By default, it is set to 3 based on the S/Kademlia paper.
func WithIteratorNumParallelRequestsPerLookup ¶
func WithIteratorNumParallelRequestsPerLookup(numParallelRequestsPerLookup int) IteratorOption
WithIteratorNumParallelRequestsPerLookup sets the max number of parallel requests a single disjoint lookup may make during the execution of (*Iterator).Find. By default, it is set to 8 based on the S/Kademlia paper.
type P2pMessage ¶
func (P2pMessage) Marshal ¶
func (m P2pMessage) Marshal() []byte
type Ping ¶
type Ping struct{}
Ping represents an empty ping message.
func UnmarshalPing ¶
UnmarshalPing returns a Ping instance and never throws an error.
type Pong ¶
type Pong struct{}
Pong represents an empty pong message.
func UnmarshalPong ¶
UnmarshalPong returns a Pong instance and never throws an error.
type Project ¶
type Project struct { Owner GRING.ID // project owner PjtID string PjtState byte //project state SubList map[string]Subscriber // contains filtered or unexported fields }
TODO : remove export later
func (*Project) AddSubscriber ¶
func (p *Project) AddSubscriber(subID string, subs Subscriber)
func (*Project) GetPjtState ¶
func (*Project) GetSubList ¶
func (p *Project) GetSubList() map[string]Subscriber
func (*Project) SetPjtState ¶
type Protocol ¶
type Protocol struct {
// contains filtered or unexported fields
}
Protocol implements routing/discovery portion of the Kademlia protocol with improvements suggested by the S/Kademlia paper. It is expected that Protocol is bound to a GRING.Node via (*GRING.Node).Bind before the node starts listening for incoming peers.
func New ¶
func New(opts ...ProtocolOption) *Protocol
New returns a new instance of the Kademlia protocol.
func (*Protocol) Ack_bc ¶
Ack attempts to insert a peer ID into your nodes routing table. If the routing table bucket in which your peer ID was expected to be inserted on is full, the peer ID at the tail of the bucket is pinged. If the ping fails, the peer ID at the tail of the bucket is evicted and your peer ID is inserted to the head of the bucket.
func (*Protocol) Ack_gr ¶
Ack attempts to insert a peer ID into your nodes routing table. If the routing table bucket in which your peer ID was expected to be inserted on is full, the peer ID at the tail of the bucket is pinged. If the ping fails, the peer ID at the tail of the bucket is evicted and your peer ID is inserted to the head of the bucket.
func (*Protocol) Bind ¶
Bind registers messages Ping, Pong, FindNodeRequest, FindNodeResponse, and handles them by registering the (*Protocol).Handle Handler.
func (*Protocol) Broadcast_BC ¶
func (*Protocol) DiscoverLocal ¶
func (p *Protocol) DiscoverLocal(isBootstrap bool, opts ...IteratorOption) []GRING.ID
Discover attempts to discover new peers to your node through peers your node already knows about by calling the FIND_NODE S/Kademlia RPC call with your nodes ID.
func (*Protocol) DiscoverRandom ¶
func (p *Protocol) DiscoverRandom(isBootstrap bool, opts ...IteratorOption) []GRING.ID
Discover attempts to discover new peers to your node through peers your node already knows about by calling the FIND_NODE S/Kademlia RPC call with your nodes ID.
func (*Protocol) Find ¶
func (p *Protocol) Find(target GRING.PublicKey, isBootstrap bool, opts ...IteratorOption) []GRING.ID
Find executes the FIND_NODE S/Kademlia RPC call to find the closest peers to some given target public key. It returns the IDs of the closest peers it finds.
func (*Protocol) FindRandMember ¶
func (*Protocol) GetGroupSize ¶
func (*Protocol) GetItem ¶
func (p *Protocol) GetItem() DownloadMessage
func (*Protocol) GetNumMembers ¶
func (*Protocol) GetTotMembers ¶
func (*Protocol) GridSearchGroupSize ¶
func (*Protocol) Handle ¶
func (p *Protocol) Handle(ctx GRING.HandlerContext) error
Handle implements GRING.Protocol and handles Ping and FindNodeRequest messages.
func (*Protocol) MaxNeighborsBC ¶
MaxNeighbors returns cap of routing table
func (*Protocol) MaxNeighborsGR ¶
MaxNeighbors returns cap of routing table
func (*Protocol) Multicast_GR ¶
func (*Protocol) OnExistingConnection ¶
func (*Protocol) OnJoinGroup ¶
func (p *Protocol) OnJoinGroup(msg P2pMessage)
func (*Protocol) OnMessageRecv ¶
OnMessageRecv implements GRING.Protocol and attempts to push the position in which the clients ID resides in your nodes' routing table's to the head of the bucket it reside within.
func (*Protocol) OnMessageSent ¶
OnMessageSent implements GRING.Protocol and attempts to push the position in which the clients ID resides in your nodes' routing table's to the head of the bucket it reside within.
func (*Protocol) OnPeerConnected ¶
OnPeerConnected attempts to acknowledge the new peers existence by placing its entry into your nodes' routing table via (*Protocol).Ack.
func (*Protocol) OnPingFailed ¶
OnPingFailed evicts peers that your node has failed to dial.
func (*Protocol) OnRequestGroupInitiator ¶
func (p *Protocol) OnRequestGroupInitiator(msg P2pMessage)
forming a group is p2p level protocol. later, we need to move it to protocol
func (*Protocol) OnRequestGroupSubleader ¶
func (p *Protocol) OnRequestGroupSubleader(msg P2pMessage)
forming a group is p2p level protocol. later, we need to move it to protocol
func (*Protocol) OnRequestJoinWorker ¶
func (p *Protocol) OnRequestJoinWorker(msg P2pMessage)
func (*Protocol) On_recv_gossip_pullreq ¶
func (p *Protocol) On_recv_gossip_pullreq(msg GossipMessage, ctx GRING.HandlerContext)
func (*Protocol) On_recv_gossip_push ¶
func (p *Protocol) On_recv_gossip_push(msg GossipMessage, ctx GRING.HandlerContext)
func (*Protocol) On_recv_gossip_push_only ¶
func (p *Protocol) On_recv_gossip_push_only(msg GossipMessage, ctx GRING.HandlerContext)
func (*Protocol) On_recv_relay ¶
func (p *Protocol) On_recv_relay(relaymsg RelayMessage, ctx GRING.HandlerContext)
func (*Protocol) Ping ¶
Ping sends a ping request to addr, and returns no error if a p!!!ong is received back before ctx has expired/was cancelled. It also throws an error if the connection to addr intermittently drops, or if handshaking with addr should there be no live connection to addr yet fails.
func (*Protocol) Protocol ¶
Protocol returns a GRING.Protocol that may registered to a node via (*GRING.Node).Bind.
func (*Protocol) RemoveConn ¶
func (*Protocol) RequestDownload ¶
func (p *Protocol) RequestDownload(euuid []byte, preferred []string) (DownloadMessage, bool)
func (*Protocol) SetGroupSize ¶
func (*Protocol) SetItem ¶
func (p *Protocol) SetItem(msg DownloadMessage)
func (*Protocol) SetMaxNeighborsGR ¶
func (*Protocol) SetNumMembers ¶
func (*Protocol) SetTotMembers ¶
type ProtocolOption ¶
type ProtocolOption func(p *Protocol)
ProtocolOption represents a functional option which may be passed to New to configure a Protocol.
func WithProtocolEvents ¶
func WithProtocolEvents(events Events) ProtocolOption
WithProtocolEvents configures an event listener for a Protocol.
func WithProtocolLogger ¶
func WithProtocolLogger(logger *zap.Logger) ProtocolOption
WithProtocolLogger configures the logger instance for an iterator. By default, the logger used is the logger of the node which the iterator is bound to.
func WithProtocolMaxNeighborsBC ¶
func WithProtocolMaxNeighborsBC(maxNeighbors int) ProtocolOption
func WithProtocolMaxNeighborsGR ¶
func WithProtocolMaxNeighborsGR(maxNeighbors int) ProtocolOption
func WithProtocolPingTimeout ¶
func WithProtocolPingTimeout(pingTimeout time.Duration) ProtocolOption
WithProtocolPingTimeout configures the amount of time to wait for until we declare a ping to have failed. Peers typically either are pinged through a call of (*Protocol).Ping, or in amidst the execution of Kademlia's peer eviction policy. By default, it is set to 3 seconds.
type RelayMessage ¶
type RelayMessage struct { UUID []byte //32bytes for plain, 34bytes for encoded. we expect encoded one Opcode byte Fuel uint32 TargetID GRING.ID //ID is publickey Contents []byte }
func UnmarshalRelayMessage ¶
func UnmarshalRelayMessage(buf []byte) (RelayMessage, error)
func (RelayMessage) Marshal ¶
func (m RelayMessage) Marshal() []byte
type Request ¶
type Request struct {
UUID []byte //32bytes for plain, 34bytes for encoded
}
func UnmarshalRequest ¶
type SubsMessage ¶
type SubsMessage struct { //PjtID GRING.ID //TODO: add pjt ID for multi project SubID GRING.ID // ID is publickey Host net.IP `json:"address"` //subs ip Port uint16 //subs port StaticInfo []byte }
subscriber replies with this message to join the project
func UnmarshalSubsMessage ¶
func UnmarshalSubsMessage(buf []byte) (SubsMessage, error)
type Subscriber ¶
type Table ¶
type Table struct { sync.RWMutex Direction map[string]bool NumOutBound int NumInBound int // contains filtered or unexported fields }
Table represents a Kademlia routing table.
func NewTable ¶
NewTable instantiates a new routing table whose XOR distance metric is defined with respect to some given ID.
func (*Table) DecreaseInBound ¶
func (t *Table) DecreaseInBound()
func (*Table) DecreaseOutBound ¶
func (t *Table) DecreaseOutBound()
func (*Table) Delete ¶
Delete removes target from this routing table. It returns the id of the delted target and true if found, or a zero-value ID and false otherwise.
func (*Table) DeleteByAddress ¶
DeleteByAddress removes the first occurrence of an id with target as its address from this routing table. It returns the id of the deleted target and true if found, or a zero-value ID and false otherwise.
func (*Table) FindClosest ¶
FindClosest returns the k closest peer IDs to target, and sorts them based on how close they are.
func (*Table) GetNumInBound ¶
func (*Table) GetNumOutBound ¶
func (*Table) IncreaseInBound ¶
func (t *Table) IncreaseInBound()
func (*Table) IncreaseOutBound ¶
func (t *Table) IncreaseOutBound()
func (*Table) NumEntries ¶
NumEntries returns the total amount of ids stored in this routing table.
func (*Table) Peers ¶
Peers returns BucketSize closest peer IDs to the ID which this routing table's distance metric is defined against.
func (*Table) RemoveDirection ¶
func (*Table) Self ¶
Self returns the ID which this routing table's XOR distance metric is defined with respect to.
func (*Table) Update ¶
Update attempts to insert the target node/peer ID into this routing table. If the bucket it was expected to be inserted within is full, ErrBucketFull is returned. If the ID already exists in its respective routing table bucket, it is moved to the head of the bucket and false is returned. If the ID has yet to exist, it is appended to the head of its intended bucket and true is returned.