mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-30 20:48:52 +03:00
d2cf3233b8
Merge in DNS/adguard-home from 3890-fix-stats to master
Updates #3890.
Squashed commit of the following:
commit a77a6204bc8a58f62a4fac70efdcae4267a64810
Merge: 834493a2 90e65b66
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 17:22:16 2021 +0300
Merge branch 'master' into 3890-fix-stats
commit 834493a22ae79199efcc44e0715e2ac6f6272963
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 17:09:30 2021 +0300
querylog: load once
commit b8000e7ba7a998fcd4553230ec5e5f9c90106e31
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 16:54:41 2021 +0300
querylog: fix docs
commit 7db99ccfa19b58100950c11d67b23bca7af3e5cb
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 16:51:31 2021 +0300
querylog: imp docs
commit 2a84650bd7ac5195730a7ab47b9562a83f721499
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 15:48:09 2021 +0300
querylog: imp anonyization
commit 0f63feb1ff5f006fc528c3b681ef3b9d2199581e
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 14:44:37 2021 +0300
all: imp code & docs
commit c4ccdcbb7248897edd178fd5cb77127e39ada73d
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 14:24:30 2021 +0300
all: log changes
commit 60bb777a5aff36bba129a078fa11ae566298178a
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Mon Dec 6 14:08:41 2021 +0300
all: use atomic value
commit c45886bd20eee2212b42686ff369830d8c08fe36
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date: Tue Nov 30 18:50:02 2021 +0300
all: anonymize separately
43 lines
988 B
Go
43 lines
988 B
Go
package aghnet
|
|
|
|
import (
|
|
"net"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// IPMutFunc is the signature of a function which modifies the IP address
|
|
// instance. It should be safe for concurrent use.
|
|
type IPMutFunc func(ip net.IP)
|
|
|
|
// nopIPMutFunc is the IPMutFunc that does nothing.
|
|
func nopIPMutFunc(net.IP) {}
|
|
|
|
// IPMut is a type-safe wrapper of atomic.Value to store the IPMutFunc.
|
|
type IPMut struct {
|
|
f atomic.Value
|
|
}
|
|
|
|
// NewIPMut returns the new properly initialized *IPMut. The m is guaranteed to
|
|
// always store non-nil IPMutFunc which is safe to call.
|
|
func NewIPMut(f IPMutFunc) (m *IPMut) {
|
|
m = &IPMut{
|
|
f: atomic.Value{},
|
|
}
|
|
m.Store(f)
|
|
|
|
return m
|
|
}
|
|
|
|
// Store sets the IPMutFunc to return from Func. It's safe for concurrent use.
|
|
// If f is nil, the stored function is the no-op one.
|
|
func (m *IPMut) Store(f IPMutFunc) {
|
|
if f == nil {
|
|
f = nopIPMutFunc
|
|
}
|
|
m.f.Store(f)
|
|
}
|
|
|
|
// Load returns the previously stored IPMutFunc.
|
|
func (m *IPMut) Load() (f IPMutFunc) {
|
|
return m.f.Load().(IPMutFunc)
|
|
}
|