aboutsummaryrefslogtreecommitdiffstats
path: root/p2p
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-05-27 00:07:24 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-05-27 00:07:24 +0800
commite1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833 (patch)
treee60fe4e4aa35fc4d62f186c04b6d0aa85784ca7a /p2p
parent278183c7e727f875fb2eae8ceba29bfd4b01afc2 (diff)
downloaddexon-e1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833.tar.gz
dexon-e1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833.tar.zst
dexon-e1a0ee8fc541bd73ac5d5a0cdacfe5265fcef833.zip
cmd/geth, cmd/utils, eth, p2p: pass and honor a no discovery flag
Diffstat (limited to 'p2p')
-rw-r--r--p2p/server.go37
1 files changed, 29 insertions, 8 deletions
diff --git a/p2p/server.go b/p2p/server.go
index 9c6e8f4db..0e814f494 100644
--- a/p2p/server.go
+++ b/p2p/server.go
@@ -55,6 +55,10 @@ type Server struct {
// Zero defaults to preset values.
MaxPendingPeers int
+ // Discovery specifies whether the peer discovery mechanism should be started
+ // or not. Disabling is usually useful for protocol debugging (manual topology).
+ Discovery bool
+
// Name sets the node name of this server.
// Use common.MakeName to create a name that follows existing conventions.
Name string
@@ -240,6 +244,14 @@ func (srv *Server) Self() *discover.Node {
if !srv.running {
return &discover.Node{IP: net.ParseIP("0.0.0.0")}
}
+ if srv.ntab == nil {
+ addr := srv.listener.Addr().(*net.TCPAddr)
+ return &discover.Node{
+ ID: discover.PubkeyID(&srv.PrivateKey.PublicKey),
+ IP: addr.IP,
+ TCP: uint16(addr.Port),
+ }
+ }
return srv.ntab.Self()
}
@@ -290,15 +302,22 @@ func (srv *Server) Start() (err error) {
srv.peerOpDone = make(chan struct{})
// node table
- ntab, err := discover.ListenUDP(srv.PrivateKey, srv.ListenAddr, srv.NAT, srv.NodeDatabase)
- if err != nil {
- return err
+ if srv.Discovery {
+ ntab, err := discover.ListenUDP(srv.PrivateKey, srv.ListenAddr, srv.NAT, srv.NodeDatabase)
+ if err != nil {
+ return err
+ }
+ srv.ntab = ntab
}
- srv.ntab = ntab
- dialer := newDialState(srv.StaticNodes, srv.ntab, srv.MaxPeers/2)
+
+ dynPeers := srv.MaxPeers / 2
+ if !srv.Discovery {
+ dynPeers = 0
+ }
+ dialer := newDialState(srv.StaticNodes, srv.ntab, dynPeers)
// handshake
- srv.ourHandshake = &protoHandshake{Version: baseProtocolVersion, Name: srv.Name, ID: ntab.Self().ID}
+ srv.ourHandshake = &protoHandshake{Version: baseProtocolVersion, Name: srv.Name, ID: discover.PubkeyID(&srv.PrivateKey.PublicKey)}
for _, p := range srv.Protocols {
srv.ourHandshake.Caps = append(srv.ourHandshake.Caps, p.cap())
}
@@ -454,7 +473,9 @@ running:
}
// Terminate discovery. If there is a running lookup it will terminate soon.
- srv.ntab.Close()
+ if srv.ntab != nil {
+ srv.ntab.Close()
+ }
// Disconnect all peers.
for _, p := range peers {
p.Disconnect(DiscQuitting)
@@ -486,7 +507,7 @@ func (srv *Server) encHandshakeChecks(peers map[discover.NodeID]*Peer, c *conn)
return DiscTooManyPeers
case peers[c.id] != nil:
return DiscAlreadyConnected
- case c.id == srv.ntab.Self().ID:
+ case c.id == srv.Self().ID:
return DiscSelf
default:
return nil