2018-03-15 20:45:37 +00:00
|
|
|
package network
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
|
2018-03-25 10:45:54 +00:00
|
|
|
"github.com/CityOfZion/neo-go/config"
|
2018-03-15 20:45:37 +00:00
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
// ServerConfig holds the server configuration.
|
|
|
|
ServerConfig struct {
|
2019-10-31 12:04:28 +00:00
|
|
|
// MinPeers is the minimum number of peers for normal operation,
|
|
|
|
// when the node has less than this number of peers it tries to
|
|
|
|
// connect with some new ones.
|
|
|
|
MinPeers int
|
|
|
|
|
2019-11-06 12:17:20 +00:00
|
|
|
// AttemptConnPeers it the number of connection to try to
|
|
|
|
// establish when the connection count drops below the MinPeers
|
|
|
|
// value.
|
|
|
|
AttemptConnPeers int
|
|
|
|
|
2018-03-15 20:45:37 +00:00
|
|
|
// MaxPeers it the maximum numbers of peers that can
|
|
|
|
// be connected to the server.
|
|
|
|
MaxPeers int
|
|
|
|
|
|
|
|
// The user agent of the server.
|
|
|
|
UserAgent string
|
|
|
|
|
|
|
|
// The listen address of the TCP server.
|
|
|
|
ListenTCP uint16
|
|
|
|
|
|
|
|
// The network mode the server will operate on.
|
|
|
|
// ModePrivNet docker private network.
|
|
|
|
// ModeTestNet NEO test network.
|
|
|
|
// ModeMainNet NEO main network.
|
2018-03-25 10:45:54 +00:00
|
|
|
Net config.NetMode
|
2018-03-15 20:45:37 +00:00
|
|
|
|
2019-02-09 15:53:58 +00:00
|
|
|
// Relay determines whether the server is forwarding its inventory.
|
2018-03-15 20:45:37 +00:00
|
|
|
Relay bool
|
|
|
|
|
|
|
|
// Seeds are a list of initial nodes used to establish connectivity.
|
|
|
|
Seeds []string
|
|
|
|
|
|
|
|
// Maximum duration a single dial may take.
|
|
|
|
DialTimeout time.Duration
|
|
|
|
|
|
|
|
// The duration between protocol ticks with each connected peer.
|
|
|
|
// When this is 0, the default interval of 5 seconds will be used.
|
|
|
|
ProtoTickInterval time.Duration
|
|
|
|
|
|
|
|
// Level of the internal logger.
|
|
|
|
LogLevel log.Level
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
// NewServerConfig creates a new ServerConfig struct
|
|
|
|
// using the main applications config.
|
2018-03-25 10:45:54 +00:00
|
|
|
func NewServerConfig(cfg config.Config) ServerConfig {
|
|
|
|
appConfig := cfg.ApplicationConfiguration
|
|
|
|
protoConfig := cfg.ProtocolConfiguration
|
2018-03-15 20:45:37 +00:00
|
|
|
|
|
|
|
return ServerConfig{
|
2018-03-25 10:45:54 +00:00
|
|
|
UserAgent: cfg.GenerateUserAgent(),
|
2018-03-15 20:45:37 +00:00
|
|
|
ListenTCP: appConfig.NodePort,
|
|
|
|
Net: protoConfig.Magic,
|
|
|
|
Relay: appConfig.Relay,
|
|
|
|
Seeds: protoConfig.SeedList,
|
2019-01-25 11:20:35 +00:00
|
|
|
DialTimeout: appConfig.DialTimeout * time.Second,
|
|
|
|
ProtoTickInterval: appConfig.ProtoTickInterval * time.Second,
|
2018-03-15 20:45:37 +00:00
|
|
|
MaxPeers: appConfig.MaxPeers,
|
2019-11-06 12:17:20 +00:00
|
|
|
AttemptConnPeers: appConfig.AttemptConnPeers,
|
2019-10-31 12:04:28 +00:00
|
|
|
MinPeers: appConfig.MinPeers,
|
2018-03-15 20:45:37 +00:00
|
|
|
}
|
|
|
|
}
|