code: func (whisper *Whisper) HandlePeer(peer *p2p.Peer, rw p2p.MsgReadWriter) error {
  	// Create the new peer and start tracking it
  	whisperPeer := newPeer(whisper, peer, rw)
  
  	whisper.peerMu.Lock()
  	whisper.peers[whisperPeer] = struct{}{}
  	whisper.peerMu.Unlock()
  
  	defer func() {
  		whisper.peerMu.Lock()
  		delete(whisper.peers, whisperPeer)
  		whisper.peerMu.Unlock()
  	}()
  
  	// Run the peer handshake and state updates
  	if err := whisperPeer.handshake(); err != nil {
  		return err
  	}
  	whisperPeer.start()
  	defer whisperPeer.stop()
  
  	return whisper.runMessageLoop(whisperPeer, rw)
  }
docs: // HandlePeer is called by the underlying P2P layer when the whisper sub-protocol
  // connection is negotiated.