mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2025-05-04 19:02:28 +00:00
network: rework discoverer/server interaction
* treat connected/handshaked peers separately in the discoverer, save "original" address for connected ones, it can be a name instead of IP and it's important to keep it to avoid reconnections * store name->IP mapping for seeds if and when they're connected to avoid reconnections * block seed if it's detected to be our own node (which is often the case for small private networks) * add an event for handshaked peers in the server, connected but non-handshaked ones are not really helpful for MinPeers or GetAddr logic Fixes #2796.
This commit is contained in:
parent
6ba4afc977
commit
23f118a1a9
10 changed files with 180 additions and 100 deletions
|
@ -7,10 +7,12 @@ import (
|
|||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||
)
|
||||
|
||||
// Peer represents a network node neo-go is connected to.
|
||||
type Peer interface {
|
||||
// RemoteAddr returns the remote address that we're connected to now.
|
||||
RemoteAddr() net.Addr
|
||||
type AddressablePeer interface {
|
||||
// ConnectionAddr returns an address-like identifier of this connection
|
||||
// before we have a proper one (after the handshake). It's either the
|
||||
// address from discoverer (if initiated from node) or one from socket
|
||||
// (if connected to node from outside).
|
||||
ConnectionAddr() string
|
||||
// PeerAddr returns the remote address that should be used to establish
|
||||
// a new connection to the node. It can differ from the RemoteAddr
|
||||
// address in case the remote node is a client and its current
|
||||
|
@ -18,6 +20,16 @@ type Peer interface {
|
|||
// to connect to it. It's only valid after the handshake is completed.
|
||||
// Before that, it returns the same address as RemoteAddr.
|
||||
PeerAddr() net.Addr
|
||||
// Version returns peer's version message if the peer has handshaked
|
||||
// already.
|
||||
Version() *payload.Version
|
||||
}
|
||||
|
||||
// Peer represents a network node neo-go is connected to.
|
||||
type Peer interface {
|
||||
AddressablePeer
|
||||
// RemoteAddr returns the remote address that we're connected to now.
|
||||
RemoteAddr() net.Addr
|
||||
Disconnect(error)
|
||||
|
||||
// BroadcastPacket is a context-bound packet enqueuer, it either puts the
|
||||
|
@ -49,7 +61,6 @@ type Peer interface {
|
|||
// EnqueueHPPacket is similar to EnqueueHPMessage, but accepts a slice of
|
||||
// message(s) bytes.
|
||||
EnqueueHPPacket([]byte) error
|
||||
Version() *payload.Version
|
||||
LastBlockIndex() uint32
|
||||
Handshaked() bool
|
||||
IsFullNode() bool
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue