From 5401bf02f1e047dd07ac2bcf29fa06db5db1c7df Mon Sep 17 00:00:00 2001 From: nolash Date: Sat, 18 Mar 2017 16:14:49 +0100 Subject: [PATCH] swarm/network: peersexchange massaging added send peers to newly connected peer from already connected peer removed peermsg expect --- p2p/message.go | 2 +- swarm/network/discovery.go | 22 +++++++++++--- swarm/network/msg | 0 swarm/network/pss_test.go | 43 +++++++++++++++++++++++++++- swarm/network/simulations/overlay.go | 5 ++-- 5 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 swarm/network/msg diff --git a/p2p/message.go b/p2p/message.go index 1292d21213..ee8d0efbb1 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -266,7 +266,7 @@ func ExpectMsg(r MsgReader, code uint64, content interface{}) error { return err } if !bytes.Equal(actualContent, contentEnc) { - return fmt.Errorf("message payload mismatch:\ngot: %x\nwant: %x", actualContent, contentEnc) + return fmt.Errorf("message %v payload mismatch:\ngot: %x\nwant: %x", msg, actualContent, contentEnc) } } return nil diff --git a/swarm/network/discovery.go b/swarm/network/discovery.go index 58085c0566..cf7c086d3b 100644 --- a/swarm/network/discovery.go +++ b/swarm/network/discovery.go @@ -14,15 +14,16 @@ import ( type discPeer struct { Peer - overlay Overlay - proxLimit uint8 - peers map[discover.NodeID]bool + overlay Overlay + proxLimit uint8 + peers map[discover.NodeID]bool + sentPeers bool } // NotifyPeer notifies the receiver remote end of a peer p or PO po. // callback for overlay driver func (self *discPeer) NotifyPeer(p Peer, po uint8) error { - if po < self.proxLimit || self.peers[p.ID()] { + if po < self.proxLimit || self.peers[p.ID()] || !self.sentPeers { return nil } resp := &peersMsg{ @@ -104,6 +105,19 @@ func (self SubPeersMsg) String() string { func (self *discPeer) handleSubPeersMsg(msg interface{}) error { spm := msg.(*SubPeersMsg) + if !self.sentPeers { + var peers []*peerAddr + self.overlay.EachLivePeer(self.OverlayAddr(), 255, func(p Peer, po int) bool { + if uint8(po) > self.proxLimit { + return false + } + self.peers[p.ID()] = true + peers = append(peers, &peerAddr{p.OverlayAddr(), p.UnderlayAddr()}) + return true + }) + self.Send(&peersMsg{Peers: peers}) + } + self.sentPeers = true self.proxLimit = spm.ProxLimit return nil } diff --git a/swarm/network/msg b/swarm/network/msg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/swarm/network/pss_test.go b/swarm/network/pss_test.go index 5b772c9e8f..8c9e3f02e8 100644 --- a/swarm/network/pss_test.go +++ b/swarm/network/pss_test.go @@ -7,22 +7,58 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/p2p/adapters" "github.com/ethereum/go-ethereum/p2p/simulations" + "github.com/ethereum/go-ethereum/p2p/protocols" p2ptest "github.com/ethereum/go-ethereum/p2p/testing" ) type pssTester struct { *p2ptest.ProtocolTester + ct *protocols.CodeMap } func TestPssTwoToSelf(t *testing.T) { addr := RandomAddr() pt := newPssTester(t, addr, 2) + + subpeermsgcode, found := pt.ct.GetCode(&SubPeersMsg{}) + if !found { + t.Fatalf("peerMsg not defined") + } + + /*peermsgcode, found := pt.ct.GetCode(&peersMsg{}) + if !found { + t.Fatalf("peerMsg not defined") + }*/ + hs_pivot := correctBzzHandshake(addr) + for _, id := range pt.Ids { hs_sim := correctBzzHandshake(NewPeerAddrFromNodeId(id)) glog.V(logger.Detail).Infof("Will handshake %v with %v", hs_pivot, hs_sim) <-pt.GetPeer(id).Connc pt.TestExchanges(bzzHandshakeExchange(hs_pivot, hs_sim, id)...) + + pt.TestExchanges( + p2ptest.Exchange{ + Expects: []p2ptest.Expect{ + p2ptest.Expect{ + Code: subpeermsgcode, + Msg: &SubPeersMsg{}, + Peer: id, + }, + }, + },/* + p2ptest.Exchange{ + Expects: []p2ptest.Expect{ + p2ptest.Expect{ + Code: peermsgcode, + Msg: &peersMsg{}, + Peer: id, + }, + }, + },*/ + ) + } } @@ -33,7 +69,11 @@ func newPssTester(t *testing.T, addr *peerAddr, n int) *pssTester { func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester { ct := BzzCodeMap() ct.Register(&PssMsg{}) - + ct.Register(&peersMsg{}) + ct.Register(&getPeersMsg{}) + ct.Register(&SubPeersMsg{}) // why is this official? + + simPipe := adapters.NewSimPipe kp := NewKadParams() to := NewKademlia(addr.OverlayAddr(), kp) @@ -62,6 +102,7 @@ func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester { return &pssTester{ ProtocolTester: s, + ct: ct, } } diff --git a/swarm/network/simulations/overlay.go b/swarm/network/simulations/overlay.go index 4cc02c7224..41c19ebefd 100644 --- a/swarm/network/simulations/overlay.go +++ b/swarm/network/simulations/overlay.go @@ -15,7 +15,7 @@ import ( "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/adapters" "github.com/ethereum/go-ethereum/p2p/simulations" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" + //p2ptest "github.com/ethereum/go-ethereum/p2p/testing" "github.com/ethereum/go-ethereum/swarm/network" ) @@ -111,7 +111,8 @@ func nethook(conf *simulations.NetworkConfig) (simulations.NetworkControl, *simu conf.Backend = true net := NewNetwork(simulations.NewNetwork(conf)) - ids := p2ptest.RandomNodeIds(10) + //ids := p2ptest.RandomNodeIds(10) + ids := adapters.RandomNodeIds(10) for i, id := range ids { net.NewNode(&simulations.NodeConfig{Id: id})