Documentation ¶
Overview ¶
Package connmgr implements a generic Bitcoin network connection manager.
Connection Manager Overview ¶
Connection Manager handles all the general connection concerns such as maintaining a set number of outbound connections, sourcing peers, banning, limiting max connections, etc.
Index ¶
- Variables
- func SeedFromDNS(chainParams *chaincfg.Params, reqServices protocol.ServiceFlag, ...)
- func TorLookupIP(host, proxy string) ([]net.IP, er.R)
- type Config
- type ConnManager
- func (cm *ConnManager) Connect(c *ConnReq)
- func (cm *ConnManager) Disconnect(id uint64)
- func (cm *ConnManager) NewConnReq()
- func (cm *ConnManager) NotifyConnectionRequestActuallyCompleted()
- func (cm *ConnManager) Remove(id uint64)
- func (cm *ConnManager) Start()
- func (cm *ConnManager) Stop()
- func (cm *ConnManager) Wait()
- type ConnReq
- type ConnState
- type LookupFunc
- type OnSeed
Constants ¶
This section is empty.
Variables ¶
var ( Err = er.NewErrorType("connmgr.Err") // ErrTorInvalidAddressResponse indicates an invalid address was // returned by the Tor DNS resolver. ErrTorInvalidAddressResponse = Err.CodeWithDetail("ErrTorInvalidAddressResponse", "invalid address response") // ErrTorInvalidProxyResponse indicates the Tor proxy returned a // response in an unexpected format. ErrTorInvalidProxyResponse = Err.CodeWithDetail("ErrTorInvalidProxyResponse", "invalid proxy response") // ErrTorUnrecognizedAuthMethod indicates the authentication method // provided is not recognized. ErrTorUnrecognizedAuthMethod = Err.CodeWithDetail("ErrTorUnrecognizedAuthMethod", "invalid proxy authentication method") )
var ( //ErrDialNil is used to indicate that Dial cannot be nil in the configuration. ErrDialNil = errors.New("Config: Dial cannot be nil") )
Functions ¶
func SeedFromDNS ¶
func SeedFromDNS(chainParams *chaincfg.Params, reqServices protocol.ServiceFlag, lookupFn LookupFunc, seedFn OnSeed)
SeedFromDNS uses DNS seeding to populate the address manager with peers.
Types ¶
type Config ¶
type Config struct { // Listeners defines a slice of listeners for which the connection // manager will take ownership of and accept connections. When a // connection is accepted, the OnAccept handler will be invoked with the // connection. Since the connection manager takes ownership of these // listeners, they will be closed when the connection manager is // stopped. // // This field will not have any effect if the OnAccept field is not // also specified. It may be nil if the caller does not wish to listen // for incoming connections. Listeners []net.Listener // OnAccept is a callback that is fired when an inbound connection is // accepted. It is the caller's responsibility to close the connection. // Failure to close the connection will result in the connection manager // believing the connection is still active and thus have undesirable // side effects such as still counting toward maximum connection limits. // // This field will not have any effect if the Listeners field is not // also specified since there couldn't possibly be any accepted // connections in that case. OnAccept func(net.Conn) // TargetOutbound is the number of outbound network connections to // maintain. Defaults to 8. TargetOutbound uint32 // RetryDuration is the duration to wait before retrying connection // requests. Defaults to 5s. RetryDuration time.Duration // OnConnection is a callback that is fired when a new outbound // connection is established. OnConnection func(*ConnReq, net.Conn) // OnDisconnection is a callback that is fired when an outbound // connection is disconnected. OnDisconnection func(*ConnReq) // GetNewAddress is a way to get an address to make a network connection // to. If nil, no new connections will be made automatically. GetNewAddress func() (net.Addr, er.R) // Dial connects to the address on the named network. It cannot be nil. Dial func(net.Addr) (net.Conn, er.R) }
Config holds the configuration options related to the connection manager.
type ConnManager ¶
type ConnManager struct {
// contains filtered or unexported fields
}
ConnManager provides a manager to handle network connections.
func New ¶
func New(cfg *Config) (*ConnManager, er.R)
New returns a new connection manager. Use Start to start connecting to the network.
func (*ConnManager) Connect ¶
func (cm *ConnManager) Connect(c *ConnReq)
Connect assigns an id and dials a connection to the address of the connection request.
func (*ConnManager) Disconnect ¶
func (cm *ConnManager) Disconnect(id uint64)
Disconnect disconnects the connection corresponding to the given connection id. If permanent, the connection will be retried with an increasing backoff duration.
func (*ConnManager) NewConnReq ¶
func (cm *ConnManager) NewConnReq()
NewConnReq creates a new connection request and connects to the corresponding address.
func (*ConnManager) NotifyConnectionRequestActuallyCompleted ¶
func (cm *ConnManager) NotifyConnectionRequestActuallyCompleted()
NotifyConnectionRequestActuallyCompleted tells the connection manager the peer was actually added and has already been marked as being good.
func (*ConnManager) Remove ¶
func (cm *ConnManager) Remove(id uint64)
Remove removes the connection corresponding to the given connection id from known connections.
NOTE: This method can also be used to cancel a lingering connection attempt that hasn't yet succeeded.
func (*ConnManager) Start ¶
func (cm *ConnManager) Start()
Start launches the connection manager and begins connecting to the network.
func (*ConnManager) Stop ¶
func (cm *ConnManager) Stop()
Stop gracefully shuts down the connection manager.
func (*ConnManager) Wait ¶
func (cm *ConnManager) Wait()
Wait blocks until the connection manager halts gracefully.
type ConnReq ¶
ConnReq is the connection request to a network address. If permanent, the connection will be retried on disconnection.
type ConnState ¶
type ConnState uint8
ConnState represents the state of the requested connection.
ConnState can be either pending, established, disconnected or failed. When a new connection is requested, it is attempted and categorized as established or failed depending on the connection result. An established connection which was disconnected is categorized as disconnected.
type LookupFunc ¶
LookupFunc is the signature of the DNS lookup function.
type OnSeed ¶
type OnSeed func(addrs []*wire.NetAddress)
OnSeed is the signature of the callback function which is invoked when DNS seeding is succesfull.