From 489cc699e8869eb87ad472ada245e2c3394c0459 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet Date: Thu, 29 Mar 2018 19:29:49 +0200 Subject: [PATCH] whisper: use the regular handshake in libp2p --- whisper/whisperv6/libp2p_glue.go | 10 ++++++---- whisper/whisperv6/whisper.go | 12 +++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/whisper/whisperv6/libp2p_glue.go b/whisper/whisperv6/libp2p_glue.go index 7f2b223977..44aea7fcfb 100644 --- a/whisper/whisperv6/libp2p_glue.go +++ b/whisper/whisperv6/libp2p_glue.go @@ -180,12 +180,14 @@ func (server *LibP2PWhisperServer) connectToPeer(p *LibP2PPeer) error { stream: s, } p.connectionStream = &lps + p.ws = p.connectionStream - // If we got here, it means that a connection was established. - // Save the peer. // TODO send my known list of peers + // Call HandlePeer to perform the handshake + go server.whisper.HandlePeer(p, p.connectionStream) + return err } @@ -212,7 +214,7 @@ func (server *LibP2PWhisperServer) Start() error { server.Peers = append(server.Peers, peer.(*LibP2PPeer)) } - go server.whisper.runMessageLoop(peer, lps) + go server.whisper.HandlePeer(peer, lps) }) fmt.Println("Currently having the following peers:", server.Peers) @@ -266,7 +268,7 @@ func (server *LibP2PWhisperServer) AddPeer(addr ma.Multiaddr) *LibP2PPeer { ipfsaddrpart, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", pid)) ipaddr := addr.Decapsulate(ipfsaddrpart) server.Host.Peerstore().AddAddr(peerid, ipaddr, pstore.PermanentAddrTTL) - newPeer := &LibP2PPeer{id: peerid} + newPeer := newLibP2PPeer(server.whisper, peerid, nil).(*LibP2PPeer) server.Peers = append(server.Peers, newPeer) return newPeer diff --git a/whisper/whisperv6/whisper.go b/whisper/whisperv6/whisper.go index e4132639d6..b651a4ad63 100644 --- a/whisper/whisperv6/whisper.go +++ b/whisper/whisperv6/whisper.go @@ -127,7 +127,7 @@ func New(cfg *Config) *Whisper { Name: ProtocolName, Version: uint(ProtocolVersion), Length: NumberOfMessageCodes, - Run: whisper.HandlePeer, + Run: whisper.HandleDevP2PPeer, NodeInfo: func() interface{} { return map[string]interface{}{ "version": ProtocolVersionStr, @@ -626,12 +626,18 @@ func (whisper *Whisper) Stop() error { return nil } -// HandlePeer is called by the underlying P2P layer when the whisper sub-protocol +// HandleDevP2PPeer is called by the underlying P2P layer when the whisper sub-protocol // connection is negotiated. -func (whisper *Whisper) HandlePeer(peer *p2p.Peer, rw p2p.MsgReadWriter) error { +func (whisper *Whisper) HandleDevP2PPeer(peer *p2p.Peer, rw p2p.MsgReadWriter) error { // Create the new peer and start tracking it whisperPeer := newPeer(whisper, peer, rw) + return whisper.HandlePeer(whisperPeer, rw) +} + +// HandlePeer sets up the connection with the peer once the underlying +// layer has established it. +func (whisper *Whisper) HandlePeer(whisperPeer Peer, rw p2p.MsgReadWriter) error { whisper.peerMu.Lock() whisper.peers[whisperPeer] = struct{}{} whisper.peerMu.Unlock()