No longer check if the IP is a multicast address when call AddEnr

This commit is contained in:
thinkAfCod 2024-07-30 17:19:07 +08:00 committed by Chen Kai
parent 5e49d18f43
commit d9ac99649f
3 changed files with 31 additions and 3 deletions

View file

@ -252,7 +252,7 @@ func (p *PortalProtocolAPI) RoutingTableInfo() *RoutingTableInfo {
func (p *PortalProtocolAPI) AddEnr(enr string) (bool, error) {
p.portalProtocol.Log.Debug("serving AddEnr", "enr", enr)
n, err := enode.Parse(enode.ValidSchemes, enr)
n, err := enode.ParseForAddEnr(enode.ValidSchemes, enr)
if err != nil {
return false, err
}
@ -263,7 +263,7 @@ func (p *PortalProtocolAPI) AddEnr(enr string) (bool, error) {
func (p *PortalProtocolAPI) AddEnrs(enrs []string) bool {
// Note: unspecified RPC, but useful for our local testnet test
for _, enr := range enrs {
n, err := enode.Parse(enode.ValidSchemes, enr)
n, err := enode.ParseForAddEnr(enode.ValidSchemes, enr)
if err != nil {
continue
}

View file

@ -293,7 +293,7 @@ func (p *PortalProtocol) AddEnr(n *enode.Node) {
defer p.table.mutex.Unlock()
added := p.table.handleAddNode(addNodeOp{node: n, isInbound: true, forceSetLive: true})
if !added {
p.Log.Warn("add node failed", "id", n.ID(), n.IPAddr())
p.Log.Warn("add node failed", "id", n.ID(), "ip", n.IPAddr())
return
}
id := n.ID().String()

View file

@ -149,6 +149,34 @@ func Parse(validSchemes enr.IdentityScheme, input string) (*Node, error) {
return New(validSchemes, &r)
}
func ParseForAddEnr(validSchemes enr.IdentityScheme, input string) (*Node, error) {
if strings.HasPrefix(input, "enode://") {
return ParseV4(input)
}
if !strings.HasPrefix(input, "enr:") {
return nil, errMissingPrefix
}
bin, err := base64.RawURLEncoding.DecodeString(input[4:])
if err != nil {
return nil, err
}
var r enr.Record
if err := rlp.DecodeBytes(bin, &r); err != nil {
return nil, err
}
var n *Node
if n, err = New(validSchemes, &r); err != nil {
return nil, err
}
var ip4 netip.Addr
var ip6 netip.Addr
n.Load((*enr.IPv4Addr)(&ip4))
n.Load((*enr.IPv6Addr)(&ip6))
n.setIP4(ip4)
n.setIP6(ip6)
return n, nil
}
// ID returns the node identifier.
func (n *Node) ID() ID {
return n.id