aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-05-27 00:16:05 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-05-27 00:16:05 +0800
commit68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95 (patch)
tree8d0d9d339691c64f28822e4d33f60a1d240392c2
parente1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833 (diff)
downloadgo-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.tar.gz
go-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.tar.zst
go-tangerine-68898a4d6bd5edf0011197ef0a68f3fe3cfd0d95.zip
p2p: fix Self() panic if listening is disabled
-rw-r--r--p2p/server.go9
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()
}