mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
swarm/network: peersexchange massaging
added send peers to newly connected peer from already connected peer removed peermsg expect
This commit is contained in:
parent
9cad74910f
commit
5401bf02f1
5 changed files with 64 additions and 8 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
0
swarm/network/msg
Normal file
0
swarm/network/msg
Normal file
|
|
@ -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,
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
Loading…
Reference in a new issue