network

package
v0.0.0-...-25c57ca Latest Latest
Warning

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

Go to latest
Published: Jan 17, 2018 License: BSD-2-Clause Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BucketCount           = 1024
	TriedBucketCount      = 64
	TriedBucketsPeerGroup = 8
	NumMissingDays        = 30
	NumReties             = 3
	MinBadDays            = 7
	MaxFailures           = 10
	BucketsPeerAddress    = 8
	NewBucketsPeerGroup   = 64
	NewBucketSize         = 64
	DumpAddressInterval   = time.Minute * 10
	SerialisationVersion  = 1
	NeedAddressThreshold  = 1000
	AddressPercent        = 23
	AddressMax            = 2500
	TriedBucketSize       = 256
)

Variables

View Source
var (

	// OnionCatNet defines the IPv6 address block used to support Tor.
	// bitcoind encodes addressManager .onion address as addressManager 16 byte number by decoding the
	// address prior to the .onion (i.e. the key hash) base32 into a ten
	// byte number. It then stores the first 6 bytes of the address as
	// 0xfd, 0x87, 0xd8, 0x7e, 0xeb, 0x43.
	//
	// This is the same range used by OnionCat, which is part part of the
	// RFC4193 unique local IPv6 range.
	//
	// In summary the format is:
	// { magic 6 bytes, 10 bytes base32 decode of key hash }
	OnionCatNet = ipNet("fd87:d87e:eb43::", 48, 128)

	// Zero4Net defines the IPv4 address block for address staring with 0
	// (0.0.0.0/8).
	Zero4Net = ipNet("0.0.0.0", 8, 32)

	// HeNet defines the Hurricane Electric IPv6 address block.
	HeNet = ipNet("2001:470::", 32, 128)
)

Functions

func MaxPeerAddressPayload

func MaxPeerAddressPayload(version uint32) uint32

func ReadPeerAddress

func ReadPeerAddress(r io.Reader, pver uint32, na *PeerAddress, ts bool) error

func WritePeerAddress

func WritePeerAddress(w io.Writer, pver uint32, na *PeerAddress, ts bool) (err error)

Types

type AddressPriority

type AddressPriority int
const (
	InterfacePriority AddressPriority = iota
	BoundPriority
	UpnpPriority
	HTTPPriority
	ManualPriority
)

type HostToNetAddrFunc

type HostToNetAddrFunc func(host string, port uint16, serviceFlag protocol.ServiceFlag) (*PeerAddress, error)

type KnownAddress

type KnownAddress struct {
	NetAddress *PeerAddress
	SrcAddress *PeerAddress

	LastAttempt time.Time
	// contains filtered or unexported fields
}

func (*KnownAddress) Chance

func (knownAddress *KnownAddress) Chance() float64

func (*KnownAddress) IsBad

func (knownAddress *KnownAddress) IsBad() bool

type LocalAddress

type LocalAddress struct {
	PeerAddress *PeerAddress
	// contains filtered or unexported fields
}

type NATInterface

type NATInterface interface {
	GetExternalAddress(ip net.IP, err error)
	AddPortMapping(protocol string, externalPort, internalPort int, description string, timeout int) (mappedExternalPort int, err error)
	DeletePortMapping(protocol string, externalPort, internalPort int) (err error)
}

type NetAddressManager

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

func NewNetAddressManager

func NewNetAddressManager(dataDir string, lookupFunc utils.LookupFunc) *NetAddressManager

func (*NetAddressManager) AddAddress

func (addressManager *NetAddressManager) AddAddress(addr, srcAddr *PeerAddress)

func (*NetAddressManager) AddAddressByIP

func (addressManager *NetAddressManager) AddAddressByIP(addressIP string) error

func (*NetAddressManager) AddLocalAddress

func (addressManager *NetAddressManager) AddLocalAddress(peerAddress *PeerAddress, priority AddressPriority) error

func (*NetAddressManager) AddPeerAddresses

func (addressManager *NetAddressManager) AddPeerAddresses(addresses []*PeerAddress, srcAddress *PeerAddress)

func (*NetAddressManager) AddressCache

func (addressManager *NetAddressManager) AddressCache() []*PeerAddress

func (*NetAddressManager) Attempt

func (addressManager *NetAddressManager) Attempt(peerAddress *PeerAddress)

func (*NetAddressManager) Connected

func (addressManager *NetAddressManager) Connected(peerAddress *PeerAddress)

func (*NetAddressManager) DeserializeNetAddress

func (addressManager *NetAddressManager) DeserializeNetAddress(addressString string) (*PeerAddress, error)

func (*NetAddressManager) GetAddress

func (addressManager *NetAddressManager) GetAddress() *KnownAddress

func (*NetAddressManager) GetBestLocalAddress

func (addressManager *NetAddressManager) GetBestLocalAddress(remoteAddress *PeerAddress) *PeerAddress

func (*NetAddressManager) HostToNetAddress

func (addressManager *NetAddressManager) HostToNetAddress(host string, port uint16, servicesFlag protocol.ServiceFlag) (*PeerAddress, error)

func (*NetAddressManager) MarkGood

func (addressManager *NetAddressManager) MarkGood(address *PeerAddress)

func (*NetAddressManager) NeedMoreAddresses

func (addressManager *NetAddressManager) NeedMoreAddresses() bool

func (*NetAddressManager) Numaddresses

func (addressManager *NetAddressManager) Numaddresses() int

func (*NetAddressManager) Start

func (addressManager *NetAddressManager) Start()

func (*NetAddressManager) Stop

func (addressManager *NetAddressManager) Stop() error

type PeerAddress

type PeerAddress struct {
	Timestamp    time.Time
	ServicesFlag protocol.ServiceFlag
	IP           net.IP
	Port         uint16
}

func NewPeerAddress

func NewPeerAddress(addr *net.TCPAddr, serviceFlag protocol.ServiceFlag) *PeerAddress

func NewPeerAddressIPPort

func NewPeerAddressIPPort(serviceFlag protocol.ServiceFlag, ip net.IP, port uint16) *PeerAddress

func NewPeerAddressTimestamp

func NewPeerAddressTimestamp(timestamp time.Time, serviceFlag protocol.ServiceFlag, ip net.IP, port uint16) *PeerAddress

func NewPeerAddressWithNetAddr

func NewPeerAddressWithNetAddr(address net.Addr, servicesFlag protocol.ServiceFlag) (*PeerAddress, error)

func (*PeerAddress) AddService

func (peerAddress *PeerAddress) AddService(serviceFlag protocol.ServiceFlag)

func (*PeerAddress) EqualService

func (peerAddress *PeerAddress) EqualService(serviceFlag protocol.ServiceFlag) bool

func (*PeerAddress) GroupKey

func (peerAddress *PeerAddress) GroupKey() string

func (*PeerAddress) IPString

func (peerAddress *PeerAddress) IPString() string

func (*PeerAddress) IsIPv4

func (peerAddress *PeerAddress) IsIPv4() bool

func (*PeerAddress) IsLocal

func (peerAddress *PeerAddress) IsLocal() bool

func (*PeerAddress) IsOnionCatTor

func (peerAddress *PeerAddress) IsOnionCatTor() bool

IsOnionCatTor returns whether or not the passed address is in the IPv6 range used by bitcoin to support Tor (fd87:d87e:eb43::/48). Note that this range is the same range used by OnionCat, which is part of the RFC4193 unique local IPv6 range.

func (*PeerAddress) IsRFC1918

func (peerAddress *PeerAddress) IsRFC1918() bool

IsRFC1918 returns whether or not the passed address is part of the IPv4 private network address space as defined by RFC1918 (10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16).

func (*PeerAddress) IsRFC2544

func (peerAddress *PeerAddress) IsRFC2544() bool

func (*PeerAddress) IsRFC3849

func (peerAddress *PeerAddress) IsRFC3849() bool

func (*PeerAddress) IsRFC3927

func (peerAddress *PeerAddress) IsRFC3927() bool

func (*PeerAddress) IsRFC3964

func (peerAddress *PeerAddress) IsRFC3964() bool

func (*PeerAddress) IsRFC4193

func (peerAddress *PeerAddress) IsRFC4193() bool

func (*PeerAddress) IsRFC4380

func (peerAddress *PeerAddress) IsRFC4380() bool

func (*PeerAddress) IsRFC4843

func (peerAddress *PeerAddress) IsRFC4843() bool

func (*PeerAddress) IsRFC4862

func (peerAddress *PeerAddress) IsRFC4862() bool

func (*PeerAddress) IsRFC5737

func (peerAddress *PeerAddress) IsRFC5737() bool

func (*PeerAddress) IsRFC6052

func (peerAddress *PeerAddress) IsRFC6052() bool

func (*PeerAddress) IsRFC6145

func (peerAddress *PeerAddress) IsRFC6145() bool

func (*PeerAddress) IsRFC6598

func (peerAddress *PeerAddress) IsRFC6598() bool

func (*PeerAddress) IsRoutable

func (peerAddress *PeerAddress) IsRoutable() bool

IsRoutable returns whether or not the passed address is routable over the public internet. This is true as long as the address is valid and is not in any reserved ranges.

func (*PeerAddress) IsValid

func (peerAddress *PeerAddress) IsValid() bool

func (*PeerAddress) NetAddressKey

func (peerAddress *PeerAddress) NetAddressKey() string

type PeerAddressFunc

type PeerAddressFunc func(remoteAddr *PeerAddress) *PeerAddress

type Reachability

type Reachability int
const (
	Unreachable Reachability = 0
	Default     Reachability = iota
	Teredo
	Ipv6Weak
	Ipv4
	Ipv6Strong
	Private
)

func GetReachabilityFrom

func GetReachabilityFrom(localPeerAddress, remoteAddress *PeerAddress) Reachability

type SerializedAddressManager

type SerializedAddressManager struct {
	Version      int
	Key          [32]byte
	Addresses    []*SerializedKnownAddress
	NewBuckets   [BucketCount][]string
	TriedBuckets [TriedBucketCount][]string
}

type SerializedKnownAddress

type SerializedKnownAddress struct {
	AddressString string
	Source        string
	Attempts      int
	TimeStamp     int64
	LastAttempt   int64
	LastSuccess   int64
}

Jump to

Keyboard shortcuts

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