+ addr, ok := nodeAddr(e.addr)
+ if !ok {
+ return
+ }
+ m := &me.msg
+ switch {
+ case addr.IP.To4() != nil:
+ if _, ok := me.dropped[key]; ok {
+ if i := addrIndex(m.Dropped.NodeAddrs(), &addr); i >= 0 {
+ m.Dropped = append(m.Dropped[:i], m.Dropped[i+1:]...)
+ }
+ delete(me.dropped, key)
+ return
+ }
+ m.Added = append(m.Added, addr)
+ m.AddedFlags = append(m.AddedFlags, e.f)
+ case len(addr.IP) == net.IPv6len:
+ if _, ok := me.dropped[key]; ok {
+ if i := addrIndex(m.Dropped6.NodeAddrs(), &addr); i >= 0 {
+ m.Dropped6 = append(m.Dropped6[:i], m.Dropped6[i+1:]...)
+ }
+ delete(me.dropped, key)
+ return
+ }
+ m.Added6 = append(m.Added6, addr)
+ m.Added6Flags = append(m.Added6Flags, e.f)
+ default:
+ panic(addr)
+ }
+ me.added[key] = struct{}{}