* swarm/api, swarm/network, p2p/simulations: Prerequisites for handshake remove * swarm, p2p: Add full sim node configs for protocoltester * swarm/network: Make stream package pass tests * swarm/network: Extract peer and addr types out of protocol file * p2p, swarm: Make p2p/protocols tests pass + rename types.go * swarm/network: Deactivate ExecAdapter test until binary ENR prep * swarm/api: Remove comments * swarm/network: Uncomment bootnode record load
		
			
				
	
	
		
			94 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package network
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
 | 
						|
	"github.com/ethereum/go-ethereum/p2p"
 | 
						|
	"github.com/ethereum/go-ethereum/p2p/enode"
 | 
						|
	"github.com/ethereum/go-ethereum/p2p/protocols"
 | 
						|
	"github.com/ethereum/go-ethereum/rlp"
 | 
						|
	"github.com/ethereum/go-ethereum/swarm/log"
 | 
						|
)
 | 
						|
 | 
						|
// ENRAddrEntry is the entry type to store the bzz key in the enode
 | 
						|
type ENRAddrEntry struct {
 | 
						|
	data []byte
 | 
						|
}
 | 
						|
 | 
						|
func NewENRAddrEntry(addr []byte) *ENRAddrEntry {
 | 
						|
	return &ENRAddrEntry{
 | 
						|
		data: addr,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (b ENRAddrEntry) Address() []byte {
 | 
						|
	return b.data
 | 
						|
}
 | 
						|
 | 
						|
// ENRKey implements enr.Entry
 | 
						|
func (b ENRAddrEntry) ENRKey() string {
 | 
						|
	return "bzzkey"
 | 
						|
}
 | 
						|
 | 
						|
// EncodeRLP implements rlp.Encoder
 | 
						|
func (b ENRAddrEntry) EncodeRLP(w io.Writer) error {
 | 
						|
	log.Debug("in encoderlp", "b", b, "p", fmt.Sprintf("%p", &b))
 | 
						|
	return rlp.Encode(w, &b.data)
 | 
						|
}
 | 
						|
 | 
						|
// DecodeRLP implements rlp.Decoder
 | 
						|
func (b *ENRAddrEntry) DecodeRLP(s *rlp.Stream) error {
 | 
						|
	byt, err := s.Bytes()
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	b.data = byt
 | 
						|
	log.Debug("in decoderlp", "b", b, "p", fmt.Sprintf("%p", &b))
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
type ENRLightNodeEntry bool
 | 
						|
 | 
						|
func (b ENRLightNodeEntry) ENRKey() string {
 | 
						|
	return "bzzlightnode"
 | 
						|
}
 | 
						|
 | 
						|
type ENRBootNodeEntry bool
 | 
						|
 | 
						|
func (b ENRBootNodeEntry) ENRKey() string {
 | 
						|
	return "bzzbootnode"
 | 
						|
}
 | 
						|
 | 
						|
func getENRBzzPeer(p *p2p.Peer, rw p2p.MsgReadWriter, spec *protocols.Spec) *BzzPeer {
 | 
						|
	var lightnode ENRLightNodeEntry
 | 
						|
	var bootnode ENRBootNodeEntry
 | 
						|
 | 
						|
	// retrieve the ENR Record data
 | 
						|
	record := p.Node().Record()
 | 
						|
	record.Load(&lightnode)
 | 
						|
	record.Load(&bootnode)
 | 
						|
 | 
						|
	// get the address; separate function as long as we need swarm/network:NewAddr() to call it
 | 
						|
	addr := getENRBzzAddr(p.Node())
 | 
						|
 | 
						|
	// build the peer using the retrieved data
 | 
						|
	return &BzzPeer{
 | 
						|
		Peer:      protocols.NewPeer(p, rw, spec),
 | 
						|
		LightNode: bool(lightnode),
 | 
						|
		BzzAddr:   addr,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func getENRBzzAddr(nod *enode.Node) *BzzAddr {
 | 
						|
	var addr ENRAddrEntry
 | 
						|
 | 
						|
	record := nod.Record()
 | 
						|
	record.Load(&addr)
 | 
						|
 | 
						|
	return &BzzAddr{
 | 
						|
		OAddr: addr.data,
 | 
						|
		UAddr: []byte(nod.String()),
 | 
						|
	}
 | 
						|
}
 |