diff options
author | Péter Szilágyi <peterke@gmail.com> | 2015-05-27 00:16:05 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2015-05-27 00:16:05 +0800 |
commit | 68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95 (patch) | |
tree | 8d0d9d339691c64f28822e4d33f60a1d240392c2 /p2p | |
parent | e1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833 (diff) | |
download | go-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.tar.gz go-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.tar.zst go-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.zip |
p2p: fix Self() panic if listening is disabled
Diffstat (limited to 'p2p')
-rw-r--r-- | p2p/server.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/p2p/server.go b/p2p/server.go index 0e814f494..589041810 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -241,10 +241,18 @@ func (srv *Server) AddPeer(node *discover.Node) { func (srv *Server) Self() *discover.Node { srv.lock.Lock() defer srv.lock.Unlock() + + // If the server's not running, return an empty node if !srv.running { return &discover.Node{IP: net.ParseIP("0.0.0.0")} } + // If the node is running but discovery is off, manually assemble the node infos if srv.ntab == nil { + // Inbound connections disabled, use zero address + if srv.listener == nil { + return &discover.Node{IP: net.ParseIP("0.0.0.0"), ID: discover.PubkeyID(&srv.PrivateKey.PublicKey)} + } + // Otherwise inject the listener address too addr := srv.listener.Addr().(*net.TCPAddr) return &discover.Node{ ID: discover.PubkeyID(&srv.PrivateKey.PublicKey), @@ -252,6 +260,7 @@ func (srv *Server) Self() *discover.Node { TCP: uint16(addr.Port), } } + // Otherwise return the live node infos return srv.ntab.Self() } |