From bb8b4c9a0bdf4aa67d3cbd2ae694413ffd052e41 Mon Sep 17 00:00:00 2001 From: ZueffC Date: Sun, 19 Jan 2025 22:43:20 +0300 Subject: [PATCH] Added Set data structure. This caused by fact that two NS may have same domains --- dnsexit_manager.go | 12 +++++++----- set.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 set.go diff --git a/dnsexit_manager.go b/dnsexit_manager.go index 94c8018..b48d0e4 100644 --- a/dnsexit_manager.go +++ b/dnsexit_manager.go @@ -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: } } diff --git a/set.go b/set.go new file mode 100644 index 0000000..879527a --- /dev/null +++ b/set.go @@ -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 +}