浏览代码

p2p: fix Self() panic if listening is disabled

Péter Szilágyi 10 年之前
父节点
当前提交
68898a4d6b
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      p2p/server.go

+ 9 - 0
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()
 }