p2p

package module
v0.2.10 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2019 License: Apache-2.0 Imports: 34 Imported by: 0

README

go-p2p

It's the assembly of libp2p to build a working network layer for p2p applications.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultConfig = Config{
	HostName:                 "127.0.0.1",
	Port:                     30001,
	ExternalHostName:         "",
	ExternalPort:             30001,
	SecureIO:                 false,
	Gossip:                   false,
	ConnectTimeout:           time.Minute,
	MasterKey:                "",
	Relay:                    "disable",
	ConnLowWater:             200,
	ConnHighWater:            500,
	RateLimiterLRUSize:       1000,
	BlackListLRUSize:         1000,
	BlackListCleanupInterval: 600 * time.Second,
	ConnGracePeriod:          0,
	EnableRateLimit:          false,
	RateLimit:                DefaultRatelimitConfig,
}

DefaultConfig is a set of default configs

View Source
var DefaultRatelimitConfig = RateLimitConfig{
	GlobalUnicastAvg:   300,
	GlobalUnicastBurst: 500,
	PeerAvg:            300,
	PeerBurst:          500,
}

DefaultRatelimitConfig is the default rate limit config

View Source
var ProtocolDHT protocol.ID = "/iotex/kad/1.0.0"

ProtocolDHT is the DHT protocol ID

Functions

func EnsureIPv4

func EnsureIPv4(ipOrHost string) (string, error)

EnsureIPv4 returns an IPv4 address regardless the input is a IPv4 address or host name. If the host name has multiple IPv4 address be associated, a random one will be returned.

func GetBroadcastMsg

func GetBroadcastMsg(ctx context.Context) (*pubsub.Message, bool)

GetBroadcastMsg retrieves *pubsub.Message from broadcast message context.

func GetUnicastStream

func GetUnicastStream(ctx context.Context) (net.Stream, bool)

GetUnicastStream retrieves net.Stream from unicast request context.

func Logger

func Logger() *zap.Logger

Logger returns the logger

func SetLogger

func SetLogger(l *zap.Logger)

SetLogger sets the logger

Types

type Config

type Config struct {
	HostName                 string          `yaml:"hostName"`
	Port                     int             `yaml:"port"`
	ExternalHostName         string          `yaml:"externalHostName"`
	ExternalPort             int             `yaml:"externalPort"`
	SecureIO                 bool            `yaml:"secureIO"`
	Gossip                   bool            `yaml:"gossip"`
	ConnectTimeout           time.Duration   `yaml:"connectTimeout"`
	MasterKey                string          `yaml:"masterKey"`
	Relay                    string          `yaml:"relay"` // could be `active`, `nat`, `disable`
	ConnLowWater             int             `yaml:"connLowWater"`
	ConnHighWater            int             `yaml:"connHighWater"`
	RateLimiterLRUSize       int             `yaml:"rateLimiterLRUSize"`
	BlackListLRUSize         int             `yaml:"blackListLRUSize"`
	BlackListCleanupInterval time.Duration   `yaml:"blackListCleanupInterval"`
	ConnGracePeriod          time.Duration   `yaml:"connGracePeriod"`
	EnableRateLimit          bool            `yaml:"enableRateLimit"`
	RateLimit                RateLimitConfig `yaml:"rateLimit"`
}

Config enumerates the configs required by a host

type HandleBroadcast

type HandleBroadcast func(ctx context.Context, data []byte) error

HandleBroadcast defines the callback function triggered when a broadcast message reaches a host

type HandleUnicast

type HandleUnicast func(ctx context.Context, w io.Writer, data []byte) error

HandleUnicast defines the callback function triggered when a unicast message reaches a host

type Host

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

Host is the main struct that represents a host that communicating with the rest of the P2P networks

func NewHost

func NewHost(ctx context.Context, options ...Option) (*Host, error)

NewHost constructs a host struct

func (*Host) AddBroadcastPubSub

func (h *Host) AddBroadcastPubSub(topic string, callback HandleBroadcast) error

AddBroadcastPubSub adds a broadcast topic that the host will pay attention to. This need to be called before using Connect/JoinOverlay. Otherwise, pubsub may not be aware of the existing overlay topology

func (*Host) AddUnicastPubSub

func (h *Host) AddUnicastPubSub(topic string, callback HandleUnicast) error

AddUnicastPubSub adds a unicast topic that the host will pay attention to

func (*Host) Addresses

func (h *Host) Addresses() []multiaddr.Multiaddr

Addresses returns the multi address

func (*Host) Broadcast

func (h *Host) Broadcast(topic string, data []byte) error

Broadcast sends a message to the hosts who subscribe the topic

func (*Host) Close

func (h *Host) Close() error

Close closes the host

func (*Host) Connect

func (h *Host) Connect(ctx context.Context, target peerstore.PeerInfo) error

Connect connects a peer.

func (*Host) ConnectWithMultiaddr

func (h *Host) ConnectWithMultiaddr(ctx context.Context, ma multiaddr.Multiaddr) error

ConnectWithMultiaddr connects a peer given the multi address

func (*Host) HostIdentity

func (h *Host) HostIdentity() string

HostIdentity returns the host identity string

func (*Host) Info

func (h *Host) Info() peerstore.PeerInfo

Info returns host's perr info.

func (*Host) JoinOverlay

func (h *Host) JoinOverlay(ctx context.Context)

JoinOverlay triggers the host to join the DHT overlay

func (*Host) Neighbors

func (h *Host) Neighbors(ctx context.Context) ([]peerstore.PeerInfo, error)

Neighbors returns the closest peer addresses

func (*Host) OverlayIdentity

func (h *Host) OverlayIdentity() string

OverlayIdentity returns the overlay identity string

func (*Host) Unicast

func (h *Host) Unicast(ctx context.Context, target peerstore.PeerInfo, topic string, data []byte) error

Unicast sends a message to a peer on the given address

type LRUBlacklist added in v0.2.4

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

LRUBlacklist is a blacklist implementation using an LRU cache

func NewLRUBlacklist added in v0.2.4

func NewLRUBlacklist(cap int) (*LRUBlacklist, error)

NewLRUBlacklist creates a new LRUBlacklist with capacity cap

func (*LRUBlacklist) Add added in v0.2.4

func (b *LRUBlacklist) Add(p peer.ID)

Add adds a peer ID

func (*LRUBlacklist) Contains added in v0.2.4

func (b *LRUBlacklist) Contains(p peer.ID) bool

Contains checks if the peer ID is in LRU

func (*LRUBlacklist) Remove added in v0.2.4

func (b *LRUBlacklist) Remove(p peer.ID)

Remove removes a peer ID

func (*LRUBlacklist) RemoveOldest added in v0.2.4

func (b *LRUBlacklist) RemoveOldest()

RemoveOldest removes the oldest peer ID

type Option

type Option func(cfg *Config) error

Option defines the option function to modify the config for a host

func ConnectTimeout

func ConnectTimeout(timout time.Duration) Option

ConnectTimeout is the option to override the connect timeout

func ExternalHostName

func ExternalHostName(externalHostName string) Option

ExternalHostName is the option to set the host name or IP address seen from external

func ExternalPort

func ExternalPort(externalPort int) Option

ExternalPort is the option to set the port number seen from external

func Gossip

func Gossip() Option

Gossip is to indicate using gossip protocol

func HostName

func HostName(hostName string) Option

HostName is the option to override the host name or IP address

func MasterKey

func MasterKey(masterKey string) Option

MasterKey is to determine network identifier

func Port

func Port(port int) Option

Port is the option to override the port number

func SecureIO

func SecureIO() Option

SecureIO is to indicate using secured I/O

func WithConnectionManagerConfig added in v0.2.3

func WithConnectionManagerConfig(lo, hi int, grace time.Duration) Option

WithConnectionManagerConfig set configuration for connection manager.

func WithRateLimit added in v0.2.6

func WithRateLimit(rcfg RateLimitConfig) Option

WithRateLimit is to indicate limiting msg rate from peers

func WithRelay

func WithRelay(relayType string) Option

WithRelay config relay option.

type RateLimitConfig added in v0.2.6

type RateLimitConfig struct {
	GlobalUnicastAvg   int `yaml:"globalUnicastAvg"`
	GlobalUnicastBurst int `yaml:"globalUnicastBurst"`
	PeerAvg            int `yaml:"peerAvg"`
	PeerBurst          int `yaml:"peerBurst"`
}

RateLimitConfig all numbers are per second value.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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