p2p: fix Self() panic if listening is disabled

This commit is contained in:
Péter Szilágyi 2015-05-26 19:16:05 +03:00
parent e1a0ee8fc5
commit 68898a4d6b

View File

@ -241,10 +241,18 @@ func (srv *Server) AddPeer(node *discover.Node) {
func (srv *Server) Self() *discover.Node { func (srv *Server) Self() *discover.Node {
srv.lock.Lock() srv.lock.Lock()
defer srv.lock.Unlock() defer srv.lock.Unlock()
// If the server's not running, return an empty node
if !srv.running { if !srv.running {
return &discover.Node{IP: net.ParseIP("0.0.0.0")} 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 { 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) addr := srv.listener.Addr().(*net.TCPAddr)
return &discover.Node{ return &discover.Node{
ID: discover.PubkeyID(&srv.PrivateKey.PublicKey), ID: discover.PubkeyID(&srv.PrivateKey.PublicKey),
@ -252,6 +260,7 @@ func (srv *Server) Self() *discover.Node {
TCP: uint16(addr.Port), TCP: uint16(addr.Port),
} }
} }
// Otherwise return the live node infos
return srv.ntab.Self() return srv.ntab.Self()
} }