swarm/network: Don't require NodeAdapter to initialise bzz protocol

Signed-off-by: Lewis Marshall <lewis@lmars.net>
This commit is contained in:
Lewis Marshall 2017-04-19 22:02:15 +01:00
parent 5dcae2e26e
commit bcf2622f29
8 changed files with 61 additions and 85 deletions

View file

@ -67,8 +67,6 @@ type NodeAdapter interface {
Connect([]byte) error
Disconnect([]byte) error
// Disconnect(*p2p.Peer, p2p.MsgReadWriter)
LocalAddr() []byte
ParseAddr([]byte, string) ([]byte, error)
}
type ProtocolRunner interface {

View file

@ -56,9 +56,8 @@ const networkId = "420"
// newProtocol sets up a protocol
// the run function here demonstrates a typical protocol using peerPool, handshake
// 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{})
return func(na adapters.NodeAdapter) adapters.ProtoCall {
return func(p *p2p.Peer, rw p2p.MsgReadWriter) error {
peer := NewPeer(p, ct, rw)
@ -117,7 +116,6 @@ func newProtocol(pp *p2ptest.TestPeerPool) func(adapters.NodeAdapter) adapters.P
return err
}
}
}
func protocolTester(t *testing.T, pp *p2ptest.TestPeerPool) *p2ptest.ProtocolTester {
id := adapters.RandomNodeId()

View file

@ -15,14 +15,14 @@ type ProtocolTester struct {
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{})
naf := func(conf *simulations.NodeConfig) adapters.NodeAdapter {
na := adapters.NewSimNode(conf.Id, net)
if conf.Id.NodeID == id.NodeID {
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
}

View file

@ -21,7 +21,6 @@ import (
"time"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/p2p"
"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)
type bzzPeer struct {
*protocols.Peer
network adapters.NodeAdapter
localAddr *peerAddr
*peerAddr // remote address
lastActive time.Time
@ -79,14 +77,11 @@ func BzzCodeMap(msgs ...interface{}) *protocols.CodeMap {
// Bzz is the protocol constructor
// 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 {
addr := &peerAddr{localAddr, na.LocalAddr()}
bee := &bzzPeer{
Peer: p,
network: na,
localAddr: addr,
localAddr: &peerAddr{oAddr, uAddr},
}
// protocol handshake and its validation
// sets remote peer address
@ -193,22 +188,13 @@ func (self *bzzPeer) bzzHandshake() error {
}
rhs := hs.(*bzzHandshake)
self.peerAddr = rhs.Addr
err = checkBzzHandshake(rhs)
if err != nil {
glog.V(6).Infof("handshake between %v and %v failed: %v", self.localAddr, self.peerAddr, 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
}

View file

@ -47,10 +47,7 @@ func newBzzBaseTester(t *testing.T, n int, addr *peerAddr, ct *protocols.CodeMap
return services(p)
}
protocall := func(na adapters.NodeAdapter) adapters.ProtoCall {
protocol := Bzz(addr.OverlayAddr(), na, ct, srv, nil, nil)
return protocol.Run
}
protocall := Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), ct, srv, nil, nil).Run
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)

View file

@ -190,10 +190,7 @@ func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
})
return nil
}
protocall := func(na adapters.NodeAdapter) adapters.ProtoCall {
protocol := Bzz(addr.OverlayAddr(), na, ct, srv, nil, nil)
return protocol.Run
}
protocall := Bzz(addr.OverlayAddr(), addr.UnderlayAddr(), ct, srv, nil, nil).Run
s := p2ptest.NewProtocolTester(t, NodeId(addr), n, protocall)

View file

@ -125,7 +125,7 @@ func newNode(id *adapters.NodeId, net *simulations.Network, trigger chan *adapte
})
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
}

View file

@ -87,7 +87,7 @@ func (self *Network) NewSimNode(conf *simulations.NodeConfig) adapters.NodeAdapt
}
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 {
return self.Connect(id, adapters.NewNodeIdFromHex(s))
}