swarm/network: peersexchange massaging

added send peers to newly connected peer from already connected peer
removed peermsg expect
This commit is contained in:
nolash 2017-03-18 16:14:49 +01:00 committed by Lewis Marshall
parent 9cad74910f
commit 5401bf02f1
5 changed files with 64 additions and 8 deletions

View file

@ -266,7 +266,7 @@ func ExpectMsg(r MsgReader, code uint64, content interface{}) error {
return err return err
} }
if !bytes.Equal(actualContent, contentEnc) { 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 return nil

View file

@ -14,15 +14,16 @@ import (
type discPeer struct { type discPeer struct {
Peer Peer
overlay Overlay overlay Overlay
proxLimit uint8 proxLimit uint8
peers map[discover.NodeID]bool peers map[discover.NodeID]bool
sentPeers bool
} }
// NotifyPeer notifies the receiver remote end of a peer p or PO po. // NotifyPeer notifies the receiver remote end of a peer p or PO po.
// callback for overlay driver // callback for overlay driver
func (self *discPeer) NotifyPeer(p Peer, po uint8) error { 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 return nil
} }
resp := &peersMsg{ resp := &peersMsg{
@ -104,6 +105,19 @@ func (self SubPeersMsg) String() string {
func (self *discPeer) handleSubPeersMsg(msg interface{}) error { func (self *discPeer) handleSubPeersMsg(msg interface{}) error {
spm := msg.(*SubPeersMsg) 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 self.proxLimit = spm.ProxLimit
return nil return nil
} }

0
swarm/network/msg Normal file
View file

View file

@ -7,22 +7,58 @@ import (
"github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/p2p/adapters" "github.com/ethereum/go-ethereum/p2p/adapters"
"github.com/ethereum/go-ethereum/p2p/simulations" "github.com/ethereum/go-ethereum/p2p/simulations"
"github.com/ethereum/go-ethereum/p2p/protocols"
p2ptest "github.com/ethereum/go-ethereum/p2p/testing" p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
) )
type pssTester struct { type pssTester struct {
*p2ptest.ProtocolTester *p2ptest.ProtocolTester
ct *protocols.CodeMap
} }
func TestPssTwoToSelf(t *testing.T) { func TestPssTwoToSelf(t *testing.T) {
addr := RandomAddr() addr := RandomAddr()
pt := newPssTester(t, addr, 2) 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) hs_pivot := correctBzzHandshake(addr)
for _, id := range pt.Ids { for _, id := range pt.Ids {
hs_sim := correctBzzHandshake(NewPeerAddrFromNodeId(id)) hs_sim := correctBzzHandshake(NewPeerAddrFromNodeId(id))
glog.V(logger.Detail).Infof("Will handshake %v with %v", hs_pivot, hs_sim) glog.V(logger.Detail).Infof("Will handshake %v with %v", hs_pivot, hs_sim)
<-pt.GetPeer(id).Connc <-pt.GetPeer(id).Connc
pt.TestExchanges(bzzHandshakeExchange(hs_pivot, hs_sim, id)...) 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 { func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
ct := BzzCodeMap() ct := BzzCodeMap()
ct.Register(&PssMsg{}) ct.Register(&PssMsg{})
ct.Register(&peersMsg{})
ct.Register(&getPeersMsg{})
ct.Register(&SubPeersMsg{}) // why is this official?
simPipe := adapters.NewSimPipe simPipe := adapters.NewSimPipe
kp := NewKadParams() kp := NewKadParams()
to := NewKademlia(addr.OverlayAddr(), kp) to := NewKademlia(addr.OverlayAddr(), kp)
@ -62,6 +102,7 @@ func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
return &pssTester{ return &pssTester{
ProtocolTester: s, ProtocolTester: s,
ct: ct,
} }
} }

View file

@ -15,7 +15,7 @@ import (
"github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/adapters" "github.com/ethereum/go-ethereum/p2p/adapters"
"github.com/ethereum/go-ethereum/p2p/simulations" "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" "github.com/ethereum/go-ethereum/swarm/network"
) )
@ -111,7 +111,8 @@ func nethook(conf *simulations.NetworkConfig) (simulations.NetworkControl, *simu
conf.Backend = true conf.Backend = true
net := NewNetwork(simulations.NewNetwork(conf)) net := NewNetwork(simulations.NewNetwork(conf))
ids := p2ptest.RandomNodeIds(10) //ids := p2ptest.RandomNodeIds(10)
ids := adapters.RandomNodeIds(10)
for i, id := range ids { for i, id := range ids {
net.NewNode(&simulations.NodeConfig{Id: id}) net.NewNode(&simulations.NodeConfig{Id: id})