network: add ability to specify port for P2P version exchange

This commit is contained in:
Anna Shaleva 2021-04-30 11:24:43 +03:00
parent 5924123927
commit 09bb162de0
3 changed files with 13 additions and 2 deletions

View file

@ -11,6 +11,7 @@ import (
// ApplicationConfiguration config specific to the node.
type ApplicationConfiguration struct {
Address string `yaml:"Address"`
AnnouncedNodePort uint16 `yaml:"AnnouncedPort"`
AttemptConnPeers int `yaml:"AttemptConnPeers"`
DBConfiguration storage.DBConfiguration `yaml:"DBConfiguration"`
DialTimeout time.Duration `yaml:"DialTimeout"`

View file

@ -1278,8 +1278,14 @@ func (s *Server) broadcastTxLoop() {
}
}
// Port returns actual server port. It may differs from that of server.Config.
// Port returns a server port that should be used in P2P version exchange. In
// case if `AnnouncedPort` is set in the server.Config, the announced node port
// will be returned (e.g. consider the node running behind NAT). If `AnnouncedPort`
// isn't set, the port returned may still differs from that of server.Config.
func (s *Server) Port() (uint16, error) {
if s.AnnouncedPort != 0 {
return s.ServerConfig.AnnouncedPort, nil
}
var port uint16
_, portStr, err := net.SplitHostPort(s.transport.Address())
if err != nil {

View file

@ -31,7 +31,10 @@ type (
// Address. Example: "127.0.0.1".
Address string
// Port. Example: 20332.
// AnnouncedPort is an announced node port for P2P version exchange.
AnnouncedPort uint16
// Port is the actual node port it is bound to. Example: 20332.
Port uint16
// The network mode the server will operate on.
@ -92,6 +95,7 @@ func NewServerConfig(cfg config.Config) ServerConfig {
return ServerConfig{
UserAgent: cfg.GenerateUserAgent(),
Address: appConfig.Address,
AnnouncedPort: appConfig.AnnouncedNodePort,
Port: appConfig.NodePort,
Net: protoConfig.Magic,
Relay: appConfig.Relay,