Documentation ¶
Overview ¶
Uses nacl's secret_box to encrypt a net.Conn. It is (meant to be) an implementation of the STS protocol. Note we do not (yet) assume that a remote peer's pubkey is known ahead of time, and thus we are technically still vulnerable to MITM. (TODO!) See docs/sts-final.pdf for more info
Index ¶
- Constants
- Variables
- func AddToIPRangeCounts(counts map[string]int, ip string) map[string]int
- func CheckIPRangeCounts(counts map[string]int, limits []int) bool
- func Connect2Switches(switches []*Switch, i, j int)
- func FuzzConn(config *viper.Viper, conn net.Conn) net.Conn
- func StartSwitches(switches []*Switch) error
- type AddrBook
- func (a *AddrBook) AddAddress(addr *NetAddress, src *NetAddress)
- func (a *AddrBook) AddOurAddress(addr *NetAddress)
- func (a *AddrBook) GetSelection() []*NetAddress
- func (a *AddrBook) MarkAttempt(addr *NetAddress)
- func (a *AddrBook) MarkBad(addr *NetAddress)
- func (a *AddrBook) MarkGood(addr *NetAddress)
- func (a *AddrBook) NeedMoreAddrs() bool
- func (a *AddrBook) OnStart() error
- func (a *AddrBook) OnStop()
- func (a *AddrBook) OurAddresses() []*NetAddress
- func (a *AddrBook) PickAddress(newBias int) *NetAddress
- func (a *AddrBook) Size() int
- type AuthorizationFunc
- type BaseReactor
- type Channel
- type ChannelDescriptor
- type ChannelStatus
- type ConnectionStatus
- type DealExchangeDataFunc
- type DefaultListener
- func (l *DefaultListener) Connections() <-chan net.Conn
- func (l *DefaultListener) ExternalAddress() *NetAddress
- func (l *DefaultListener) InternalAddress() *NetAddress
- func (l *DefaultListener) NetListener() net.Listener
- func (l *DefaultListener) OnStart() error
- func (l *DefaultListener) OnStop()
- func (l *DefaultListener) String() string
- type ExchangeData
- type FuzzedConnection
- func (fc *FuzzedConnection) Active() bool
- func (fc *FuzzedConnection) Close() error
- func (fc *FuzzedConnection) Fuzz() bool
- func (fc *FuzzedConnection) LocalAddr() net.Addr
- func (fc *FuzzedConnection) MaxDelayMilliseconds() int
- func (fc *FuzzedConnection) Mode() string
- func (fc *FuzzedConnection) ProbDropConn() float64
- func (fc *FuzzedConnection) ProbDropRW() float64
- func (fc *FuzzedConnection) ProbSleep() float64
- func (fc *FuzzedConnection) Read(data []byte) (n int, err error)
- func (fc *FuzzedConnection) RemoteAddr() net.Addr
- func (fc *FuzzedConnection) SetDeadline(t time.Time) error
- func (fc *FuzzedConnection) SetReadDeadline(t time.Time) error
- func (fc *FuzzedConnection) SetWriteDeadline(t time.Time) error
- func (fc *FuzzedConnection) Write(data []byte) (n int, err error)
- type IPeerErrorReporter
- type IPeerSet
- type Listener
- type MConnection
- func (c *MConnection) CanSend(chID byte) bool
- func (c *MConnection) OnStart() error
- func (c *MConnection) OnStop()
- func (c *MConnection) Send(chID byte, msg interface{}) bool
- func (c *MConnection) Status() ConnectionStatus
- func (c *MConnection) String() string
- func (c *MConnection) TrySend(chID byte, msg interface{}) bool
- type NetAddress
- func (na *NetAddress) Dial() (net.Conn, error)
- func (na *NetAddress) DialTimeout(timeout time.Duration) (net.Conn, error)
- func (na *NetAddress) Equals(other interface{}) bool
- func (na *NetAddress) Less(other interface{}) bool
- func (na *NetAddress) Local() bool
- func (na *NetAddress) RFC1918() bool
- func (na *NetAddress) RFC3849() bool
- func (na *NetAddress) RFC3927() bool
- func (na *NetAddress) RFC3964() bool
- func (na *NetAddress) RFC4193() bool
- func (na *NetAddress) RFC4380() bool
- func (na *NetAddress) RFC4843() bool
- func (na *NetAddress) RFC4862() bool
- func (na *NetAddress) RFC6052() bool
- func (na *NetAddress) RFC6145() bool
- func (na *NetAddress) ReachabilityTo(o *NetAddress) int
- func (na *NetAddress) Routable() bool
- func (na *NetAddress) String() string
- func (na *NetAddress) Valid() bool
- type NodeInfo
- type PEXReactor
- func (pexR *PEXReactor) AddPeer(peer *Peer)
- func (pexR *PEXReactor) GetChannels() []*ChannelDescriptor
- func (pexR *PEXReactor) OnStart() error
- func (pexR *PEXReactor) OnStop()
- func (pexR *PEXReactor) Receive(chID byte, src *Peer, msgBytes []byte)
- func (pexR *PEXReactor) RemovePeer(peer *Peer, reason interface{})
- func (pexR *PEXReactor) RequestPEX(peer *Peer)
- func (pexR *PEXReactor) SendAddrs(peer *Peer, addrs []*NetAddress)
- type Peer
- func (p *Peer) AuditLog(chID byte, msgBytes []byte, begin time.Time, reactorName string)
- func (p *Peer) CanSend(chID byte) bool
- func (p *Peer) Connection() *MConnection
- func (p *Peer) Equals(other *Peer) bool
- func (p *Peer) Get(key string) interface{}
- func (p *Peer) IsOutbound() bool
- func (p *Peer) OnStart() error
- func (p *Peer) OnStop()
- func (p *Peer) Send(chID byte, msg interface{}) bool
- func (p *Peer) String() string
- func (p *Peer) TrySend(chID byte, msg interface{}) bool
- func (p *Peer) WriteTo(w io.Writer) (n int64, err error)
- type PeerSet
- type PexMessage
- type Reactor
- type SecretConnection
- func (sc *SecretConnection) Close() error
- func (sc *SecretConnection) LocalAddr() net.Addr
- func (sc *SecretConnection) Read(data []byte) (n int, err error)
- func (sc *SecretConnection) RemoteAddr() net.Addr
- func (sc *SecretConnection) RemotePubKey() crypto.PubKey
- func (sc *SecretConnection) SetDeadline(t time.Time) error
- func (sc *SecretConnection) SetReadDeadline(t time.Time) error
- func (sc *SecretConnection) SetWriteDeadline(t time.Time) error
- func (sc *SecretConnection) Write(data []byte) (n int, err error)
- type Switch
- func (sw *Switch) AddListener(l Listener)
- func (sw *Switch) AddPeerWithConnection(conn net.Conn, outbound bool) (*Peer, error)
- func (sw *Switch) AddReactor(name string, reactor Reactor) Reactor
- func (sw *Switch) AddToRefuselist(pk []byte) error
- func (sw *Switch) AuthByCA(peerInfo *NodeInfo) error
- func (sw *Switch) Broadcast(chID byte, msg interface{}) chan bool
- func (sw *Switch) DealExchangeData(data *ExchangeData) error
- func (sw *Switch) DialPeerWithAddress(addr *NetAddress) (*Peer, error)
- func (sw *Switch) DialSeeds(seeds []string)
- func (sw *Switch) FilterConnByAddr(addr net.Addr) error
- func (sw *Switch) FilterConnByPubKey(pubkey crypto.PubKey) error
- func (sw *Switch) FilterConnByRefuselist(pubkey crypto.PubKey) error
- func (sw *Switch) GetExchangeData() *ExchangeData
- func (sw *Switch) IsDialing(addr *NetAddress) bool
- func (sw *Switch) IsListening() bool
- func (sw *Switch) Listeners() []Listener
- func (sw *Switch) NodeInfo() *NodeInfo
- func (sw *Switch) NodePrivkey() crypto.PrivKey
- func (sw *Switch) NumPeers() (outbound, inbound, dialing int)
- func (sw *Switch) OnStart() error
- func (sw *Switch) OnStop()
- func (sw *Switch) Peers() IPeerSet
- func (sw *Switch) Reactor(name string) Reactor
- func (sw *Switch) Reactors() map[string]Reactor
- func (sw *Switch) SetAddToRefuselist(f func([]byte) error)
- func (sw *Switch) SetAddrFilter(f func(net.Addr) error)
- func (sw *Switch) SetAuthByCA(f AuthorizationFunc)
- func (sw *Switch) SetDealExchangeDataFunc(f DealExchangeDataFunc)
- func (sw *Switch) SetExchangeData(data *ExchangeData)
- func (sw *Switch) SetNodeInfo(nodeInfo *NodeInfo)
- func (sw *Switch) SetNodePrivKey(nodePrivKey crypto.PrivKey)
- func (sw *Switch) SetPubKeyFilter(f func(crypto.PubKey) error)
- func (sw *Switch) SetRefuseListFilter(cb func(crypto.PubKey) error)
- func (sw *Switch) StopPeerForError(peer *Peer, reason interface{})
- func (sw *Switch) StopPeerGracefully(peer *Peer)
- type SwitchEventDonePeer
- type SwitchEventNewPeer
Constants ¶
const ( FuzzModeDrop = "drop" FuzzModeDelay = "delay" )
const (
PexChannel = byte(0x00)
)
const Version = "0.3.5" // minor fixes
Variables ¶
var ( ErrSwitchDuplicatePeer = errors.New("Duplicate peer") ErrSwitchMaxPeersPerIPRange = errors.New("IP range has too many peers") )
var PanicOnAddPeerErr = false
Functions ¶
func AddToIPRangeCounts ¶
TODO Test
func CheckIPRangeCounts ¶
TODO Test
func Connect2Switches ¶
Will connect switches i and j via net.Pipe() Blocks until a conection is established. NOTE: caller ensures i and j are within bounds
func StartSwitches ¶
Types ¶
type AddrBook ¶
type AddrBook struct { gcmn.BaseService // contains filtered or unexported fields }
AddrBook - concurrency safe peer address manager
func NewAddrBook ¶
Use Start to begin processing asynchronous address updates.
func (*AddrBook) AddAddress ¶
func (a *AddrBook) AddAddress(addr *NetAddress, src *NetAddress)
func (*AddrBook) AddOurAddress ¶
func (a *AddrBook) AddOurAddress(addr *NetAddress)
func (*AddrBook) GetSelection ¶
func (a *AddrBook) GetSelection() []*NetAddress
GetSelection randomly selects some addresses (old & new). Suitable for peer-exchange protocols.
func (*AddrBook) MarkAttempt ¶
func (a *AddrBook) MarkAttempt(addr *NetAddress)
func (*AddrBook) MarkBad ¶
func (a *AddrBook) MarkBad(addr *NetAddress)
func (*AddrBook) MarkGood ¶
func (a *AddrBook) MarkGood(addr *NetAddress)
func (*AddrBook) NeedMoreAddrs ¶
func (*AddrBook) OurAddresses ¶
func (a *AddrBook) OurAddresses() []*NetAddress
func (*AddrBook) PickAddress ¶
func (a *AddrBook) PickAddress(newBias int) *NetAddress
Pick an address to connect to with new/old bias.
type AuthorizationFunc ¶
type BaseReactor ¶
type BaseReactor struct { gcmn.BaseService // Provides Start, Stop, .Quit Switch *Switch }
func NewBaseReactor ¶
func NewBaseReactor(name string, impl Reactor) *BaseReactor
func (*BaseReactor) AddPeer ¶
func (_ *BaseReactor) AddPeer(peer *Peer)
func (*BaseReactor) GetChannels ¶
func (_ *BaseReactor) GetChannels() []*ChannelDescriptor
func (*BaseReactor) RemovePeer ¶
func (_ *BaseReactor) RemovePeer(peer *Peer, reason interface{})
func (*BaseReactor) SetSwitch ¶
func (br *BaseReactor) SetSwitch(sw *Switch)
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
TODO: lowercase. NOTE: not goroutine-safe.
type ChannelDescriptor ¶
type ChannelDescriptor struct { ID byte Priority int SendQueueCapacity int RecvBufferCapacity int RecvMessageCapacity int }
func (*ChannelDescriptor) FillDefaults ¶
func (chDesc *ChannelDescriptor) FillDefaults()
type ChannelStatus ¶
type ConnectionStatus ¶
type ConnectionStatus struct { SendMonitor flow.Status RecvMonitor flow.Status Channels []ChannelStatus }
type DealExchangeDataFunc ¶
type DealExchangeDataFunc func(data *ExchangeData) error
type DefaultListener ¶
type DefaultListener struct { gcmn.BaseService // contains filtered or unexported fields }
Implements Listener
func (*DefaultListener) Connections ¶
func (l *DefaultListener) Connections() <-chan net.Conn
A channel of inbound connections. It gets closed when the listener closes.
func (*DefaultListener) ExternalAddress ¶
func (l *DefaultListener) ExternalAddress() *NetAddress
func (*DefaultListener) InternalAddress ¶
func (l *DefaultListener) InternalAddress() *NetAddress
func (*DefaultListener) NetListener ¶
func (l *DefaultListener) NetListener() net.Listener
NOTE: The returned listener is already Accept()'ing. So it's not suitable to pass into http.Serve().
func (*DefaultListener) OnStart ¶
func (l *DefaultListener) OnStart() error
func (*DefaultListener) OnStop ¶
func (l *DefaultListener) OnStop()
func (*DefaultListener) String ¶
func (l *DefaultListener) String() string
type ExchangeData ¶
type ExchangeData struct {
GenesisJSON []byte `json:"genesis_str"`
}
type FuzzedConnection ¶
type FuzzedConnection struct {
// contains filtered or unexported fields
}
func (*FuzzedConnection) Active ¶
func (fc *FuzzedConnection) Active() bool
func (*FuzzedConnection) Fuzz ¶
func (fc *FuzzedConnection) Fuzz() bool
implements the fuzz (delay, kill conn) and returns whether or not the read/write should be ignored
func (*FuzzedConnection) LocalAddr ¶
func (fc *FuzzedConnection) LocalAddr() net.Addr
func (*FuzzedConnection) MaxDelayMilliseconds ¶
func (fc *FuzzedConnection) MaxDelayMilliseconds() int
func (*FuzzedConnection) Mode ¶
func (fc *FuzzedConnection) Mode() string
func (*FuzzedConnection) ProbDropConn ¶
func (fc *FuzzedConnection) ProbDropConn() float64
func (*FuzzedConnection) ProbDropRW ¶
func (fc *FuzzedConnection) ProbDropRW() float64
func (*FuzzedConnection) ProbSleep ¶
func (fc *FuzzedConnection) ProbSleep() float64
func (*FuzzedConnection) RemoteAddr ¶
func (fc *FuzzedConnection) RemoteAddr() net.Addr
func (*FuzzedConnection) SetDeadline ¶
func (fc *FuzzedConnection) SetDeadline(t time.Time) error
func (*FuzzedConnection) SetReadDeadline ¶
func (fc *FuzzedConnection) SetReadDeadline(t time.Time) error
func (*FuzzedConnection) SetWriteDeadline ¶
func (fc *FuzzedConnection) SetWriteDeadline(t time.Time) error
type IPeerErrorReporter ¶
type IPeerErrorReporter interface {
ReportPeerError(crypto.PubKey, interface{})
}
type Listener ¶
type Listener interface { Connections() <-chan net.Conn InternalAddress() *NetAddress ExternalAddress() *NetAddress String() string Stop() bool }
type MConnection ¶
type MConnection struct { gcmn.BaseService LocalAddress *NetAddress RemoteAddress *NetAddress // contains filtered or unexported fields }
Each peer has one `MConnection` (multiplex connection) instance.
__multiplex__ *noun* a system or signal involving simultaneous transmission of several messages along a single channel of communication.
Each `MConnection` handles message transmission on multiple abstract communication `Channel`s. Each channel has a globally unique byte id. The byte id and the relative priorities of each `Channel` are configured upon initialization of the connection.
There are two methods for sending messages:
func (m MConnection) Send(chID byte, msg interface{}) bool {} func (m MConnection) TrySend(chID byte, msg interface{}) bool {}
`Send(chID, msg)` is a blocking call that waits until `msg` is successfully queued for the channel with the given id byte `chID`, or until the request times out. The message `msg` is serialized using the `tendermint/wire` submodule's `WriteBinary()` reflection routine.
`TrySend(chID, msg)` is a nonblocking call that returns false if the channel's queue is full.
Inbound message bytes are handled with an onReceive callback function.
func NewMConnection ¶
func NewMConnection(config *viper.Viper, conn net.Conn, chDescs []*ChannelDescriptor, onReceive receiveCbFunc, onError errorCbFunc) *MConnection
func (*MConnection) CanSend ¶
func (c *MConnection) CanSend(chID byte) bool
func (*MConnection) OnStart ¶
func (c *MConnection) OnStart() error
func (*MConnection) OnStop ¶
func (c *MConnection) OnStop()
func (*MConnection) Send ¶
func (c *MConnection) Send(chID byte, msg interface{}) bool
Queues a message to be sent to channel.
func (*MConnection) Status ¶
func (c *MConnection) Status() ConnectionStatus
func (*MConnection) String ¶
func (c *MConnection) String() string
func (*MConnection) TrySend ¶
func (c *MConnection) TrySend(chID byte, msg interface{}) bool
Queues a message to be sent to channel. Nonblocking, returns true if successful.
type NetAddress ¶
func NewNetAddressIPPort ¶
func NewNetAddressIPPort(ip net.IP, port uint16) *NetAddress
func NewNetAddressString ¶
func NewNetAddressString(addr string) (*NetAddress, error)
Also resolves the host if host is not an IP.
func (*NetAddress) DialTimeout ¶
func (*NetAddress) Equals ¶
func (na *NetAddress) Equals(other interface{}) bool
func (*NetAddress) Less ¶
func (na *NetAddress) Less(other interface{}) bool
func (*NetAddress) Local ¶
func (na *NetAddress) Local() bool
func (*NetAddress) RFC1918 ¶
func (na *NetAddress) RFC1918() bool
func (*NetAddress) RFC3849 ¶
func (na *NetAddress) RFC3849() bool
func (*NetAddress) RFC3927 ¶
func (na *NetAddress) RFC3927() bool
func (*NetAddress) RFC3964 ¶
func (na *NetAddress) RFC3964() bool
func (*NetAddress) RFC4193 ¶
func (na *NetAddress) RFC4193() bool
func (*NetAddress) RFC4380 ¶
func (na *NetAddress) RFC4380() bool
func (*NetAddress) RFC4843 ¶
func (na *NetAddress) RFC4843() bool
func (*NetAddress) RFC4862 ¶
func (na *NetAddress) RFC4862() bool
func (*NetAddress) RFC6052 ¶
func (na *NetAddress) RFC6052() bool
func (*NetAddress) RFC6145 ¶
func (na *NetAddress) RFC6145() bool
func (*NetAddress) ReachabilityTo ¶
func (na *NetAddress) ReachabilityTo(o *NetAddress) int
func (*NetAddress) Routable ¶
func (na *NetAddress) Routable() bool
func (*NetAddress) String ¶
func (na *NetAddress) String() string
func (*NetAddress) Valid ¶
func (na *NetAddress) Valid() bool
For IPv4 these are either a 0 or all bits set address. For IPv6 a zero address or one that matches the RFC3849 documentation address format.
type NodeInfo ¶
type NodeInfo struct { PubKey crypto.PubKey `json:"pub_key"` SigndPubKey string `json:"signd_pub_key"` Moniker string `json:"moniker"` Network string `json:"network"` RemoteAddr string `json:"remote_addr"` ListenAddr string `json:"listen_addr"` Version string `json:"version"` // major.minor.revision Other []string `json:"other"` // other application specific data }
func (*NodeInfo) CompatibleWith ¶
CONTRACT: two nodes are compatible if the major/minor versions match and network match
func (*NodeInfo) ListenHost ¶
func (*NodeInfo) ListenPort ¶
type PEXReactor ¶
type PEXReactor struct { BaseReactor // contains filtered or unexported fields }
PEXReactor handles PEX (peer exchange) and ensures that an adequate number of peers are connected to the switch.
func NewPEXReactor ¶
func NewPEXReactor(book *AddrBook) *PEXReactor
func (*PEXReactor) GetChannels ¶
func (pexR *PEXReactor) GetChannels() []*ChannelDescriptor
Implements Reactor
func (*PEXReactor) OnStart ¶
func (pexR *PEXReactor) OnStart() error
func (*PEXReactor) OnStop ¶
func (pexR *PEXReactor) OnStop()
func (*PEXReactor) Receive ¶
func (pexR *PEXReactor) Receive(chID byte, src *Peer, msgBytes []byte)
Implements Reactor Handles incoming PEX messages.
func (*PEXReactor) RemovePeer ¶
func (pexR *PEXReactor) RemovePeer(peer *Peer, reason interface{})
Implements Reactor
func (*PEXReactor) RequestPEX ¶
func (pexR *PEXReactor) RequestPEX(peer *Peer)
Asks peer for more addresses.
func (*PEXReactor) SendAddrs ¶
func (pexR *PEXReactor) SendAddrs(peer *Peer, addrs []*NetAddress)
type Peer ¶
type Peer struct { gcmn.BaseService *NodeInfo Key string Data *gcmn.CMap // User data. // contains filtered or unexported fields }
func (*Peer) Connection ¶
func (p *Peer) Connection() *MConnection
func (*Peer) IsOutbound ¶
type PeerSet ¶
type PeerSet struct {
// contains filtered or unexported fields
}
PeerSet is a special structure for keeping a table of peers. Iteration over the peers is super fast and thread-safe. We also track how many peers per IP range and avoid too many
func NewPeerSet ¶
func NewPeerSet() *PeerSet
type PexMessage ¶
type PexMessage interface{}
func DecodeMessage ¶
func DecodeMessage(bz []byte) (msgType byte, msg PexMessage, err error)
type SecretConnection ¶
type SecretConnection struct {
// contains filtered or unexported fields
}
Implements net.Conn
func MakeSecretConnection ¶
func MakeSecretConnection(conn io.ReadWriteCloser, locPrivKey crypto.PrivKey) (*SecretConnection, error)
Performs handshake and returns a new authenticated SecretConnection. Returns nil if error in handshake. Caller should call conn.Close() See docs/sts-final.pdf for more information.
func (*SecretConnection) LocalAddr ¶
func (sc *SecretConnection) LocalAddr() net.Addr
func (*SecretConnection) Read ¶
func (sc *SecretConnection) Read(data []byte) (n int, err error)
CONTRACT: data smaller than dataMaxSize is read atomically.
func (*SecretConnection) RemoteAddr ¶
func (sc *SecretConnection) RemoteAddr() net.Addr
func (*SecretConnection) RemotePubKey ¶
func (sc *SecretConnection) RemotePubKey() crypto.PubKey
Returns authenticated remote pubkey
func (*SecretConnection) SetDeadline ¶
func (sc *SecretConnection) SetDeadline(t time.Time) error
func (*SecretConnection) SetReadDeadline ¶
func (sc *SecretConnection) SetReadDeadline(t time.Time) error
func (*SecretConnection) SetWriteDeadline ¶
func (sc *SecretConnection) SetWriteDeadline(t time.Time) error
type Switch ¶
type Switch struct { gcmn.BaseService // contains filtered or unexported fields }
The `Switch` handles peer connections and exposes an API to receive incoming messages on `Reactors`. Each `Reactor` is responsible for handling incoming messages of one or more `Channels`. So while sending outgoing messages is typically performed on the peer, incoming messages are received on the reactor.
func MakeConnectedSwitches ¶
func MakeConnectedSwitches(cfg *viper.Viper, n int, initSwitch func(int, *Switch) *Switch, connect func([]*Switch, int, int)) []*Switch
Returns n switches, connected according to the connect func. If connect==Connect2Switches, the switches will be fully connected. initSwitch defines how the ith switch should be initialized (ie. with what reactors). NOTE: panics if any switch fails to start.
func (*Switch) AddPeerWithConnection ¶
NOTE: This performs a blocking handshake before the peer is added. CONTRACT: Iff error is returned, peer is nil, and conn is immediately closed.
func (*Switch) AddReactor ¶
Not goroutine safe.
func (*Switch) AddToRefuselist ¶
func (*Switch) Broadcast ¶
Broadcast runs a go routine for each attempted send, which will block trying to send for defaultSendTimeoutSeconds. Returns a channel which receives success values for each attempted send (false if times out) NOTE: Broadcast uses goroutines, so order of broadcast may not be preserved.
func (*Switch) DealExchangeData ¶
func (sw *Switch) DealExchangeData(data *ExchangeData) error
func (*Switch) DialPeerWithAddress ¶
func (sw *Switch) DialPeerWithAddress(addr *NetAddress) (*Peer, error)
func (*Switch) FilterConnByPubKey ¶
func (*Switch) FilterConnByRefuselist ¶
func (*Switch) GetExchangeData ¶
func (sw *Switch) GetExchangeData() *ExchangeData
func (*Switch) IsDialing ¶
func (sw *Switch) IsDialing(addr *NetAddress) bool
func (*Switch) NodePrivkey ¶
func (sw *Switch) NodePrivkey() crypto.PrivKey
func (*Switch) SetAddToRefuselist ¶
func (*Switch) SetAuthByCA ¶
func (sw *Switch) SetAuthByCA(f AuthorizationFunc)
func (*Switch) SetDealExchangeDataFunc ¶
func (sw *Switch) SetDealExchangeDataFunc(f DealExchangeDataFunc)
func (*Switch) SetExchangeData ¶
func (sw *Switch) SetExchangeData(data *ExchangeData)
func (*Switch) SetNodePrivKey ¶
func (sw *Switch) SetNodePrivKey(nodePrivKey crypto.PrivKey)
Not goroutine safe. NOTE: Overwrites sw.nodeInfo.PubKey
func (*Switch) SetPubKeyFilter ¶
func (*Switch) SetRefuseListFilter ¶
func (*Switch) StopPeerForError ¶
Disconnect from a peer due to external error. TODO: make record depending on reason.
func (*Switch) StopPeerGracefully ¶
Disconnect from a peer gracefully. TODO: handle graceful disconnects.
type SwitchEventDonePeer ¶
type SwitchEventDonePeer struct { Peer *Peer Error interface{} }
type SwitchEventNewPeer ¶
type SwitchEventNewPeer struct {
Peer *Peer
}