mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
swarm/network: Don't require NodeAdapter to initialise bzz protocol
Signed-off-by: Lewis Marshall <lewis@lmars.net>
This commit is contained in:
parent
5dcae2e26e
commit
bcf2622f29
8 changed files with 61 additions and 85 deletions
|
|
@ -67,8 +67,6 @@ type NodeAdapter interface {
|
||||||
Connect([]byte) error
|
Connect([]byte) error
|
||||||
Disconnect([]byte) error
|
Disconnect([]byte) error
|
||||||
// Disconnect(*p2p.Peer, p2p.MsgReadWriter)
|
// Disconnect(*p2p.Peer, p2p.MsgReadWriter)
|
||||||
LocalAddr() []byte
|
|
||||||
ParseAddr([]byte, string) ([]byte, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProtocolRunner interface {
|
type ProtocolRunner interface {
|
||||||
|
|
|
||||||
|
|
@ -56,9 +56,8 @@ const networkId = "420"
|
||||||
// newProtocol sets up a protocol
|
// newProtocol sets up a protocol
|
||||||
// the run function here demonstrates a typical protocol using peerPool, handshake
|
// the run function here demonstrates a typical protocol using peerPool, handshake
|
||||||
// and messages registered to handlers
|
// and messages registered to handlers
|
||||||
func newProtocol(pp *p2ptest.TestPeerPool) func(adapters.NodeAdapter) adapters.ProtoCall {
|
func newProtocol(pp *p2ptest.TestPeerPool) adapters.ProtoCall {
|
||||||
ct := NewCodeMap("test", 42, 1024, &protoHandshake{}, &hs0{}, &kill{}, &drop{})
|
ct := NewCodeMap("test", 42, 1024, &protoHandshake{}, &hs0{}, &kill{}, &drop{})
|
||||||
return func(na adapters.NodeAdapter) adapters.ProtoCall {
|
|
||||||
return func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
|
return func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
|
||||||
peer := NewPeer(p, ct, rw)
|
peer := NewPeer(p, ct, rw)
|
||||||
|
|
||||||
|
|
@ -116,7 +115,6 @@ func newProtocol(pp *p2ptest.TestPeerPool) func(adapters.NodeAdapter) adapters.P
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func protocolTester(t *testing.T, pp *p2ptest.TestPeerPool) *p2ptest.ProtocolTester {
|
func protocolTester(t *testing.T, pp *p2ptest.TestPeerPool) *p2ptest.ProtocolTester {
|
||||||
|
|
|
||||||
|
|
@ -15,14 +15,14 @@ type ProtocolTester struct {
|
||||||
na adapters.NodeAdapter
|
na adapters.NodeAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(id adapters.NodeAdapter) adapters.ProtoCall) *ProtocolTester {
|
func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run adapters.ProtoCall) *ProtocolTester {
|
||||||
|
|
||||||
net := simulations.NewNetwork(&simulations.NetworkConfig{})
|
net := simulations.NewNetwork(&simulations.NetworkConfig{})
|
||||||
naf := func(conf *simulations.NodeConfig) adapters.NodeAdapter {
|
naf := func(conf *simulations.NodeConfig) adapters.NodeAdapter {
|
||||||
na := adapters.NewSimNode(conf.Id, net)
|
na := adapters.NewSimNode(conf.Id, net)
|
||||||
if conf.Id.NodeID == id.NodeID {
|
if conf.Id.NodeID == id.NodeID {
|
||||||
glog.V(logger.Detail).Infof("adapter run function set to protocol for node %v (=%v)", conf.Id, id)
|
glog.V(logger.Detail).Infof("adapter run function set to protocol for node %v (=%v)", conf.Id, id)
|
||||||
na.Run = run(na)
|
na.Run = run
|
||||||
}
|
}
|
||||||
return na
|
return na
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
"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"
|
||||||
|
|
@ -40,7 +39,6 @@ const (
|
||||||
// bzz is the bzz protocol view of a protocols.Peer (itself an extension of p2p.Peer)
|
// bzz is the bzz protocol view of a protocols.Peer (itself an extension of p2p.Peer)
|
||||||
type bzzPeer struct {
|
type bzzPeer struct {
|
||||||
*protocols.Peer
|
*protocols.Peer
|
||||||
network adapters.NodeAdapter
|
|
||||||
localAddr *peerAddr
|
localAddr *peerAddr
|
||||||
*peerAddr // remote address
|
*peerAddr // remote address
|
||||||
lastActive time.Time
|
lastActive time.Time
|
||||||
|
|
@ -79,14 +77,11 @@ func BzzCodeMap(msgs ...interface{}) *protocols.CodeMap {
|
||||||
|
|
||||||
// Bzz is the protocol constructor
|
// Bzz is the protocol constructor
|
||||||
// returns p2p.Protocol that is to be offered by the node.Service
|
// returns p2p.Protocol that is to be offered by the node.Service
|
||||||
func Bzz(localAddr []byte, na adapters.NodeAdapter, ct *protocols.CodeMap, services func(Peer) error, peerInfo func(id discover.NodeID) interface{}, nodeInfo func() interface{}) *p2p.Protocol {
|
func Bzz(oAddr, uAddr []byte, ct *protocols.CodeMap, services func(Peer) error, peerInfo func(id discover.NodeID) interface{}, nodeInfo func() interface{}) *p2p.Protocol {
|
||||||
run := func(p *protocols.Peer) error {
|
run := func(p *protocols.Peer) error {
|
||||||
addr := &peerAddr{localAddr, na.LocalAddr()}
|
|
||||||
|
|
||||||
bee := &bzzPeer{
|
bee := &bzzPeer{
|
||||||
Peer: p,
|
Peer: p,
|
||||||
network: na,
|
localAddr: &peerAddr{oAddr, uAddr},
|
||||||
localAddr: addr,
|
|
||||||
}
|
}
|
||||||
// protocol handshake and its validation
|
// protocol handshake and its validation
|
||||||
// sets remote peer address
|
// sets remote peer address
|
||||||
|
|
@ -193,22 +188,13 @@ func (self *bzzPeer) bzzHandshake() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
rhs := hs.(*bzzHandshake)
|
rhs := hs.(*bzzHandshake)
|
||||||
|
self.peerAddr = rhs.Addr
|
||||||
err = checkBzzHandshake(rhs)
|
err = checkBzzHandshake(rhs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(6).Infof("handshake between %v and %v failed: %v", self.localAddr, self.peerAddr, err)
|
glog.V(6).Infof("handshake between %v and %v failed: %v", self.localAddr, self.peerAddr, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
addr := rhs.Addr
|
|
||||||
// Addr returns the remote address of the network connection.
|
|
||||||
// with rlpx use this to set adverrtised IP
|
|
||||||
self.localAddr.UAddr, err = self.network.ParseAddr(self.localAddr.UAddr, self.RemoteAddr().String())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
glog.V(logger.Debug).Infof("self: advertised net address: %x, local address: %v\npeer: advertised: %v, remote address: %v\n", self.network.LocalAddr(), self.LocalAddr(), NodeId(addr), self.RemoteAddr())
|
|
||||||
self.peerAddr = addr
|
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,10 +47,7 @@ func newBzzBaseTester(t *testing.T, n int, addr *peerAddr, ct *protocols.CodeMap
|
||||||
return services(p)
|
return services(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
protocall := func(na adapters.NodeAdapter) adapters.ProtoCall {
|
protocall := Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), ct, srv, nil, nil).Run
|
||||||
protocol := Bzz(addr.OverlayAddr(), na, ct, srv, nil, nil)
|
|
||||||
return protocol.Run
|
|
||||||
}
|
|
||||||
|
|
||||||
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)
|
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -190,10 +190,7 @@ func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
protocall := func(na adapters.NodeAdapter) adapters.ProtoCall {
|
protocall := Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), ct, srv, nil, nil).Run
|
||||||
protocol := Bzz(addr.OverlayAddr(), na, ct, srv, nil, nil)
|
|
||||||
return protocol.Run
|
|
||||||
}
|
|
||||||
|
|
||||||
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)
|
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ func newNode(id *adapters.NodeId, net *simulations.Network, trigger chan *adapte
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
nodeAdapter.Run = network.Bzz(addr.OverlayAddr(), nodeAdapter, codeMap, services, nil, nil).Run
|
nodeAdapter.Run = network.Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), codeMap, services, nil, nil).Run
|
||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ func (self *Network) NewSimNode(conf *simulations.NodeConfig) adapters.NodeAdapt
|
||||||
}
|
}
|
||||||
|
|
||||||
ct := network.BzzCodeMap(network.DiscoveryMsgs...) // bzz protocol code map
|
ct := network.BzzCodeMap(network.DiscoveryMsgs...) // bzz protocol code map
|
||||||
na.Run = network.Bzz(addr.OverlayAddr(), na, ct, services, nil, nil).Run
|
na.Run = network.Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), ct, services, nil, nil).Run
|
||||||
connect := func(s string) error {
|
connect := func(s string) error {
|
||||||
return self.Connect(id, adapters.NewNodeIdFromHex(s))
|
return self.Connect(id, adapters.NewNodeIdFromHex(s))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue