code: func (c *meteredConn) handshakeDone(id enode.ID) {
  	// TODO (kurkomisi): use the node URL instead of the pure node ID. (the String() method of *Node)
  	if atomic.AddInt32(&meteredPeerCount, 1) >= MeteredPeerLimit {
  		// Don't register the peer in the traffic registries.
  		atomic.AddInt32(&meteredPeerCount, -1)
  		c.lock.Lock()
  		c.id, c.trafficMetered = id, false
  		c.lock.Unlock()
  		log.Warn("Metered peer count reached the limit")
  	} else {
  		key := fmt.Sprintf("%s/%s", c.ip, id.String())
  		c.lock.Lock()
  		c.id, c.trafficMetered = id, true
  		c.ingressMeter = metrics.NewRegisteredMeter(key, PeerIngressRegistry)
  		c.egressMeter = metrics.NewRegisteredMeter(key, PeerEgressRegistry)
  		c.lock.Unlock()
  	}
  	meteredPeerFeed.Send(MeteredPeerEvent{
  		Type:    PeerConnected,
  		IP:      c.ip,
  		ID:      id,
  		Elapsed: time.Since(c.connected),
  	})
  }
docs: // handshakeDone is called when a peer handshake is done. Registers the peer to
  // the ingress and the egress traffic registries using the peer's IP and node ID,
  // also emits connect event.