From eaffabec4f8058b995964e214cf6cb35edd4ded9 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Tue, 23 Sep 2014 05:17:16 -0700 Subject: [PATCH 1/2] handshake: error out while sending + dbg --- crypto/spipe/handshake.go | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/crypto/spipe/handshake.go b/crypto/spipe/handshake.go index b457f9b5c1a..8019f6fc4cc 100644 --- a/crypto/spipe/handshake.go +++ b/crypto/spipe/handshake.go @@ -67,8 +67,12 @@ func (s *SecurePipe) handshake() error { return err } - // u.POut("sending encoded handshake\n") - s.insecure.Out <- encoded + // Send our Propose packet + select { + case s.insecure.Out <- encoded: + case <-s.ctx.Done(): + return ErrClosed + } // Parse their Propose packet and generate an Exchange packet. // Exchange = (EphemeralPubKey, Signature) @@ -137,7 +141,12 @@ func (s *SecurePipe) handshake() error { exEncoded, err := proto.Marshal(exPacket) - s.insecure.Out <- exEncoded + // send out Exchange packet + select { + case s.insecure.Out <- exEncoded: + case <-s.ctx.Done(): + return ErrClosed + } // Parse their Exchange packet and generate a Finish packet. // Finish = E('Finish') @@ -182,7 +191,14 @@ func (s *SecurePipe) handshake() error { finished := []byte("Finished") - s.Out <- finished + // send finished msg + select { + case <-s.ctx.Done(): + return ErrClosed + case s.Out <- finished: + } + + // recv finished msg var resp2 []byte select { case <-s.ctx.Done(): @@ -194,7 +210,7 @@ func (s *SecurePipe) handshake() error { return errors.New("Negotiation failed.") } - u.DOut("[%s] identify: Got node id: %s\n", s.local.ID.Pretty(), s.remote.ID.Pretty()) + u.DOut("[%s] handshake: Got node id: %s\n", s.local.ID.Pretty(), s.remote.ID.Pretty()) return nil } From 10a1a01cf7372a3f88b815ff304ebbff98afcd66 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Tue, 23 Sep 2014 05:21:35 -0700 Subject: [PATCH 2/2] ping: return sme msg This fixes the broken pinging. (the issue was the cluster level, it's bein set incorrectly (off by one)) Anyway, this works now: [peer: QmfQTbC3LxfpK5WoyHW2WgnAzo6d6GePuq2wHTsJNXM5PS] Sent message type: 'PING' [to = QmNXUeFrV9gxR4aqJddEsfhWZLSJrUsfpUSeRb3R7xvSp9] [QmfQTbC3LxfpK5WoyHW2WgnAzo6d6GePuq2wHTsJNXM5PS] ping QmNXUeFrV9gxR4aqJddEsfhWZLSJrUsfpUSeRb3R7xvSp9 end (err = %!s()) cc @whyrusleeping --- routing/dht/handlers.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/routing/dht/handlers.go b/routing/dht/handlers.go index fe22121bb28..4301d1e4e97 100644 --- a/routing/dht/handlers.go +++ b/routing/dht/handlers.go @@ -104,8 +104,7 @@ func (dht *IpfsDHT) handlePutValue(p *peer.Peer, pmes *Message) (*Message, error func (dht *IpfsDHT) handlePing(p *peer.Peer, pmes *Message) (*Message, error) { u.DOut("[%s] Responding to ping from [%s]!\n", dht.self.ID.Pretty(), p.ID.Pretty()) - - return newMessage(pmes.GetType(), "", int(pmes.GetClusterLevel())), nil + return pmes, nil } func (dht *IpfsDHT) handleFindPeer(p *peer.Peer, pmes *Message) (*Message, error) {