Added Set data structure. This caused by fact that two NS may have same domains

This commit is contained in:
2025-01-19 22:43:20 +03:00
parent f31165f6f5
commit bb8b4c9a0b
2 changed files with 40 additions and 5 deletions

View File

@ -132,7 +132,7 @@ func (c *client) UpdateRecord(rec *dns.Record) (error, *dns.Response) {
}
func (c *client) GetRecords() (error, []*dns.Record) {
var subdomains []*dns.Record
var subdomains = CreateSet()
var wg sync.WaitGroup
result_chan := make(chan []*dns.Record)
@ -169,11 +169,13 @@ func (c *client) GetRecords() (error, []*dns.Record) {
select {
case records, ok := <-result_chan:
if !ok {
return nil, subdomains
return nil, subdomains.List()
}
subdomains = append(subdomains, records...)
case _, _ = <-err_chan:
for record := range records {
subdomains.Add(record)
}
case _, _ = <-err_chan:
}
}

33
set.go Normal file
View File

@ -0,0 +1,33 @@
package dnsexit_manager
type Set struct {
elements map[interface{}]struct{}
}
func CreateSet() *Set {
return &Set{
elements: make(map[interface{}]struct{}),
}
}
func (set *Set) Add(value interface{}) {
_, found := set.elements[value]
if !found{
set.elements[value] = struct{}{}
}
}
func (set *Set) Delete(value interface{}) {
delete(set.elements, value)
}
func (set *Set) List() []interface{} {
keys := make([]interface{}, 0, len(set.elements))
for key := range set.elements {
keys = append(keys, key)
}
return keys
}