dht

package
v0.0.32 Latest Latest
Warning

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

Go to latest
Published: Oct 15, 2021 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MsgTypeWant = "WANT"
	MsgTypeHave = "HAVE"
	MsgTypeSend = "SEND"
	MsgTypeNope = "NOPE"
	MsgTypePack = "PACK"
)
View Source
const (
	ObjectNamespace = "obj"
)

Variables

View Source
var (
	ErrObjNotFound = fmt.Errorf("object not found")
	MsgTypeLen     = 4
)

Functions

func MakeCID

func MakeCID(data []byte) (cid.Cid, error)

MakeCID creates a content ID

func MakeHaveMsg

func MakeHaveMsg() []byte

MakeHaveMsg creates a 'HAVE' message

func MakeKey

func MakeKey(key string) string

MakeKey returns a key for storing an object

func MakeNopeMsg

func MakeNopeMsg() []byte

MakeNopeMsg creates a 'NOPE' message

func MakeSendMsg

func MakeSendMsg(repoName string, hash []byte) []byte

MakeSendMsg creates a 'SEND' message

  • Format: SEND <reponame> <20 bytes hash>
  • <reponame>: Length varies but not more than MaxResourceNameLength

func MakeWantMsg

func MakeWantMsg(repoName string, hash []byte) []byte

MakeWantMsg creates a 'WANT' message.

  • Format: WANT <reponame> <20 bytes hash>
  • <reponame>: Length varies but not more than MaxResourceNameLength

func ParseObjectKeyToHex

func ParseObjectKeyToHex(key []byte) (string, error)

ParseObjectKeyToHex parses an object key to an hex-encoded version

func ParseWantOrSendMsg

func ParseWantOrSendMsg(msg []byte) (typ string, repoName string, hash []byte, err error)

ParseWantOrSendMsg parses a 'WANT/SEND' message

func ReadWantOrSendMsg

func ReadWantOrSendMsg(r io.Reader) (typ string, repoName string, hash []byte, err error)

ReadWantOrSendMsg reads WANT or SEND message from the reader

Types

type Announcer

type Announcer interface {
	// Announce queues an object to be announced.
	// objType is the type of the object.
	// key is the unique identifier of the object.
	// doneCB is called after successful announcement
	// Returns true if object has been successfully queued
	Announce(objType int, repo string, key []byte, doneCB func(error)) bool

	// Start starts the announcer.
	// Panics if reference announcer is already started.
	Start()

	// IsRunning checks if the announcer is running.
	IsRunning() bool

	// HasTask checks whether there are one or more unprocessed tasks.
	HasTask() bool

	// NewSession creates an instance of Session
	NewSession() Session

	// Stop stops the announcer and releases resources
	Stop()

	// RegisterChecker allows external caller to register existence checker
	// for a given object type. Only one checker per object type.
	RegisterChecker(objType int, checker CheckFunc)
}

type AnnouncerService

type AnnouncerService interface {

	// Announce queues an object to be announced.
	// objType is the type of the object.
	// key is the unique identifier of the object.
	// doneCB is called after successful announcement
	Announce(objType int, repo string, key []byte, doneCB func(error)) bool
}

AnnouncerService is like Announcer but exposes limited methods

type CheckFunc

type CheckFunc func(repo string, key []byte) bool

CheckFunc describes a function for checking a key

type DHT

type DHT interface {

	// Store adds a value corresponding to the given key
	Store(ctx context.Context, key string, value []byte) error

	// Lookup searches for a value corresponding to the given key
	Lookup(ctx context.Context, key string) ([]byte, error)

	// GetProviders finds peers capable of providing value for the given key
	GetProviders(ctx context.Context, key []byte) ([]peer.AddrInfo, error)

	// Announce informs the network that it can provide value for the given key
	Announce(objType int, repo string, key []byte, doneCB func(error)) bool

	// NewAnnouncerSession creates an announcer session
	NewAnnouncerSession() Session

	// RegisterChecker registers an object checker to the announcer.
	RegisterChecker(objType int, f CheckFunc)

	// ObjectStreamer returns the object streamer
	ObjectStreamer() Streamer

	// Host returns the wrapped IPFS host
	Host() host.Host

	// DHT returns the wrapped IPFS dht
	DHT() *kaddht.IpfsDHT

	// Start starts the DHT
	Start() error

	// Peers returns a list of all peers
	Peers() (peers []string)

	// Stop closes the host
	Stop() error
}

DHT represents a distributed hash table

type GetAncestorArgs

type GetAncestorArgs struct {

	// RepoName is the target repository to query commits from.
	RepoName string

	// StartHash is the hash of the object to start from
	StartHash []byte

	// EndHash is the hash of the object that indicates the end of the query.
	// If provided, it must exist on the local repository of the caller.
	EndHash []byte

	// ExcludeEndCommit when true, indicates that the end commit should not be fetched.
	ExcludeEndCommit bool

	// GitBinPath is the path to the git binary
	GitBinPath string

	// ReposDir is the root directory containing all repositories
	ReposDir string

	// ResultCB is a callback used for collecting packfiles as they are fetched.
	// If not set, all packfile results a collected and return at the end of the query.
	// hash is the object hash of the object that owns the packfile.
	ResultCB func(packfile io.ReadSeekerCloser, hash string) error
}

GetAncestorArgs contain arguments for GetAncestors method

type ProviderInfo

type ProviderInfo struct {
	Addr        *peer.AddrInfo
	Failed      int
	LastFailure time.Time
	LastSeen    time.Time
}

ProviderInfo contains information about a provider

type ProviderTracker

type ProviderTracker interface {
	// Register registers a new provider so it can be tracked
	Register(addrs ...peer.AddrInfo)

	// NumProviders returns the number of registered providers.
	NumProviders() int

	// Get a provider's information. If cb is provided, it is called with the provider
	Get(id peer.ID, cb func(*ProviderInfo)) *ProviderInfo

	// IsGood checks whether the given peer has a good record.
	IsGood(id peer.ID) bool

	// Ban bans a provider for the given duration.
	// If a peer is currently banned, the duration is added to its current ban time.
	Ban(peer peer.ID, dur time.Duration)

	// MarkFailure increments a provider's failure count.
	// When failure count reaches a max, ban the provider.
	MarkFailure(id peer.ID)

	// MarkSeen marks the provider's last seen time and resets its failure count.
	MarkSeen(id peer.ID)

	// PeerSentNope registers a NOPE response from the given peer indicating that
	// the object represented by the given key is unknown to it.
	PeerSentNope(id peer.ID, key []byte)

	// DidPeerSendNope checks whether the given peer previously sent NOPE for a key
	DidPeerSendNope(id peer.ID, key []byte) bool
}

ProviderTracker describes a structure for tracking provider performance

type Session

type Session interface {
	Announce(objType int, repo string, key []byte) bool
	OnDone(cb func(errCount int))
}

type Streamer

type Streamer interface {
	GetCommit(ctx context.Context, repo string, hash []byte) (packfile io.ReadSeekerCloser, commit *object.Commit, err error)
	GetCommitWithAncestors(ctx context.Context, args GetAncestorArgs) (packfiles []io.ReadSeekerCloser, err error)
	GetTaggedCommitWithAncestors(ctx context.Context, args GetAncestorArgs) (packfiles []io.ReadSeekerCloser, err error)
	GetTag(ctx context.Context, repo string, hash []byte) (packfile io.ReadSeekerCloser, tag *object.Tag, err error)
	OnRequest(s network.Stream) (success bool, err error)
	GetProviders(ctx context.Context, repoName string, objectHash []byte) ([]peer.AddrInfo, error)
}

Streamer provides an interface for providing objects and fetching various object types from the underlying DHT network.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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