forked from cerc-io/ipld-eth-server
61 lines
2.0 KiB
Go
61 lines
2.0 KiB
Go
package ifconnmgr
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
inet "github.com/libp2p/go-libp2p-net"
|
|
peer "github.com/libp2p/go-libp2p-peer"
|
|
)
|
|
|
|
// ConnManager tracks connections to peers, and allows consumers to associate metadata
|
|
// with each peer.
|
|
//
|
|
// It enables connections to be trimmed based on implementation-defined heuristics.
|
|
type ConnManager interface {
|
|
|
|
// TagPeer tags a peer with a string, associating a weight with the tag.
|
|
TagPeer(peer.ID, string, int)
|
|
|
|
// Untag removes the tagged value from the peer.
|
|
UntagPeer(p peer.ID, tag string)
|
|
|
|
// GetTagInfo returns the metadata associated with the peer,
|
|
// or nil if no metadata has been recorded for the peer.
|
|
GetTagInfo(p peer.ID) *TagInfo
|
|
|
|
// TrimOpenConns terminates open connections based on an implementation-defined
|
|
// heuristic.
|
|
TrimOpenConns(ctx context.Context)
|
|
|
|
// Notifee returns an implementation that can be called back to inform of
|
|
// opened and closed connections.
|
|
Notifee() inet.Notifiee
|
|
|
|
// Protect protects a peer from having its connection(s) pruned.
|
|
//
|
|
// Tagging allows different parts of the system to manage protections without interfering with one another.
|
|
//
|
|
// Calls to Protect() with the same tag are idempotent. They are not refcounted, so after multiple calls
|
|
// to Protect() with the same tag, a single Unprotect() call bearing the same tag will revoke the protection.
|
|
Protect(id peer.ID, tag string)
|
|
|
|
// Unprotect removes a protection that may have been placed on a peer, under the specified tag.
|
|
//
|
|
// The return value indicates whether the peer continues to be protected after this call, by way of a different tag.
|
|
// See notes on Protect() for more info.
|
|
Unprotect(id peer.ID, tag string) (protected bool)
|
|
}
|
|
|
|
// TagInfo stores metadata associated with a peer.
|
|
type TagInfo struct {
|
|
FirstSeen time.Time
|
|
Value int
|
|
|
|
// Tags maps tag ids to the numerical values.
|
|
Tags map[string]int
|
|
|
|
// Conns maps connection ids (such as remote multiaddr) to their creation time.
|
|
Conns map[string]time.Time
|
|
}
|