mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-24 14:05:45 +03:00
d40de33316
Squashed commit of the following: commit3191224d6d
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 26 18:20:04 2024 +0300 client: imp tests commit6cc4ed53a2
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 26 18:04:36 2024 +0300 client: imp code commit79272b299a
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 26 16:10:06 2024 +0300 all: imp code commit0a001fffbe
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Tue Sep 24 20:05:47 2024 +0300 all: imp tests commit80f7e98d30
Merge:df7492e9d
e338214ad
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Tue Sep 24 19:10:13 2024 +0300 Merge branch 'master' into AG-27492-client-storage-runtime-sources commitdf7492e9de
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Tue Sep 24 19:06:37 2024 +0300 all: imp code commit23896ae5a6
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 19 21:04:34 2024 +0300 client: fix typo commitba0ba2478c
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 19 21:02:13 2024 +0300 all: imp code commitf7315be742
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 12 14:35:38 2024 +0300 home: imp code commitf63d0e80fb
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 12 14:15:49 2024 +0300 all: imp code commit9feda414b6
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Tue Sep 10 17:53:42 2024 +0300 all: imp code commitfafd7cbb52
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Mon Sep 9 21:13:05 2024 +0300 all: imp code commit2d2b8e0216
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Sep 5 20:55:10 2024 +0300 client: add tests commit4d394e6f21
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Aug 29 20:40:38 2024 +0300 all: client storage runtime sources
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package client
|
|
|
|
import "net/netip"
|
|
|
|
// runtimeIndex stores information about runtime clients.
|
|
type runtimeIndex struct {
|
|
// index maps IP address to runtime client.
|
|
index map[netip.Addr]*Runtime
|
|
}
|
|
|
|
// newRuntimeIndex returns initialized runtime index.
|
|
func newRuntimeIndex() (ri *runtimeIndex) {
|
|
return &runtimeIndex{
|
|
index: map[netip.Addr]*Runtime{},
|
|
}
|
|
}
|
|
|
|
// client returns the saved runtime client by ip. If no such client exists,
|
|
// returns nil.
|
|
func (ri *runtimeIndex) client(ip netip.Addr) (rc *Runtime) {
|
|
return ri.index[ip]
|
|
}
|
|
|
|
// add saves the runtime client in the index. IP address of a client must be
|
|
// unique. See [Runtime.Client]. rc must not be nil.
|
|
func (ri *runtimeIndex) add(rc *Runtime) {
|
|
ip := rc.Addr()
|
|
ri.index[ip] = rc
|
|
}
|
|
|
|
// rangeClients calls f for each runtime client in an undefined order.
|
|
func (ri *runtimeIndex) rangeClients(f func(rc *Runtime) (cont bool)) {
|
|
for _, rc := range ri.index {
|
|
if !f(rc) {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// setInfo sets the client information from cs for runtime client stored by ip.
|
|
// If no such client exists, it creates one.
|
|
func (ri *runtimeIndex) setInfo(ip netip.Addr, cs Source, hosts []string) (rc *Runtime) {
|
|
rc = ri.index[ip]
|
|
if rc == nil {
|
|
rc = NewRuntime(ip)
|
|
ri.add(rc)
|
|
}
|
|
|
|
rc.setInfo(cs, hosts)
|
|
|
|
return rc
|
|
}
|
|
|
|
// clearSource removes information from the specified source from all clients.
|
|
func (ri *runtimeIndex) clearSource(src Source) {
|
|
for _, rc := range ri.index {
|
|
rc.unset(src)
|
|
}
|
|
}
|
|
|
|
// removeEmpty removes empty runtime clients and returns the number of removed
|
|
// clients.
|
|
func (ri *runtimeIndex) removeEmpty() (n int) {
|
|
for ip, rc := range ri.index {
|
|
if rc.isEmpty() {
|
|
delete(ri.index, ip)
|
|
n++
|
|
}
|
|
}
|
|
|
|
return n
|
|
}
|