Compare commits
6 Commits
v0.108.0-b
...
6399-fix-u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24a62d0638 | ||
|
|
f81a94eb94 | ||
|
|
ca898fe74e | ||
|
|
366ec81621 | ||
|
|
f9ee511094 | ||
|
|
deedc490e1 |
72
CHANGELOG.md
72
CHANGELOG.md
@@ -14,73 +14,46 @@ and this project adheres to
|
|||||||
<!--
|
<!--
|
||||||
## [v0.108.0] - TBA
|
## [v0.108.0] - TBA
|
||||||
|
|
||||||
## [v0.107.42] - 2023-12-06 (APPROX.)
|
## [v0.107.41] - 2023-11-01 (APPROX.)
|
||||||
|
|
||||||
See also the [v0.107.42 GitHub milestone][ms-v0.107.42].
|
See also the [v0.107.41 GitHub milestone][ms-v0.107.41].
|
||||||
|
|
||||||
[ms-v0.107.42]: https://github.com/AdguardTeam/AdGuardHome/milestone/77?closed=1
|
[ms-v0.107.41]: https://github.com/AdguardTeam/AdGuardHome/milestone/76?closed=1
|
||||||
|
|
||||||
NOTE: Add new changes BELOW THIS COMMENT.
|
NOTE: Add new changes BELOW THIS COMMENT.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!--
|
|
||||||
NOTE: Add new changes ABOVE THIS COMMENT.
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.107.41] - 2023-11-13
|
|
||||||
|
|
||||||
See also the [v0.107.41 GitHub milestone][ms-v0.107.41].
|
|
||||||
|
|
||||||
### Security
|
|
||||||
|
|
||||||
- Go version has been updated to prevent the possibility of exploiting the
|
|
||||||
CVE-2023-45283 and CVE-2023-45284 Go vulnerabilities fixed in
|
|
||||||
[Go 1.20.11][go-1.20.11].
|
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Ability to specify subnet lengths for IPv4 and IPv6 addresses, used for rate
|
|
||||||
limiting requests, in the configuration file ([#6368]).
|
|
||||||
- Ability to specify multiple domain specific upstreams per line, e.g.
|
- Ability to specify multiple domain specific upstreams per line, e.g.
|
||||||
`[/domain1/../domain2/]upstream1 upstream2 .. upstreamN` ([#4977]).
|
`[/domain1/../domain2/]upstream1 upstream2 .. upstreamN` ([#4977]).
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Increased the height of the ready-to-use filter lists dialog ([#6358]).
|
- The height of ready-to-use filter lists has been increased ([#6358]).
|
||||||
- Improved logging of authentication failures ([#6357]).
|
- Improved authentication failure logging ([#6357]).
|
||||||
|
|
||||||
#### Configuration changes
|
|
||||||
|
|
||||||
- New properties `dns.ratelimit_subnet_len_ipv4` and
|
|
||||||
`dns.ratelimit_subnet_len_ipv6` have been added to the configuration file
|
|
||||||
([#6368]).
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Schedule timezone not being sent ([#6401]).
|
- Redundant shortening long client names in the Top Clients table ([#6338]).
|
||||||
- Average request processing time calculation ([#6220]).
|
|
||||||
- Redundant truncation of long client names in the Top Clients table ([#6338]).
|
|
||||||
- Scrolling column headers in the tables ([#6337]).
|
- Scrolling column headers in the tables ([#6337]).
|
||||||
- `$important,dnsrewrite` rules not overriding allowlist rules ([#6204]).
|
- `$important,dnsrewrite` rules do not take precedence over allowlist rules
|
||||||
|
([#6204]).
|
||||||
- Dark mode DNS rewrite background ([#6329]).
|
- Dark mode DNS rewrite background ([#6329]).
|
||||||
- Issues with QUIC and HTTP/3 upstreams on Linux ([#6335]).
|
- Issues with QUIC and HTTP/3 upstreams on Linux ([#6335]).
|
||||||
|
|
||||||
[#4977]: https://github.com/AdguardTeam/AdGuardHome/issues/4977
|
[#4977]: https://github.com/AdguardTeam/AdGuardHome/issues/4977
|
||||||
[#6204]: https://github.com/AdguardTeam/AdGuardHome/issues/6204
|
[#6204]: https://github.com/AdguardTeam/AdGuardHome/issues/6204
|
||||||
[#6220]: https://github.com/AdguardTeam/AdGuardHome/issues/6220
|
|
||||||
[#6329]: https://github.com/AdguardTeam/AdGuardHome/issues/6329
|
[#6329]: https://github.com/AdguardTeam/AdGuardHome/issues/6329
|
||||||
[#6335]: https://github.com/AdguardTeam/AdGuardHome/issues/6335
|
[#6335]: https://github.com/AdguardTeam/AdGuardHome/issues/6335
|
||||||
[#6337]: https://github.com/AdguardTeam/AdGuardHome/issues/6337
|
[#6337]: https://github.com/AdguardTeam/AdGuardHome/issues/6337
|
||||||
[#6338]: https://github.com/AdguardTeam/AdGuardHome/issues/6338
|
[#6338]: https://github.com/AdguardTeam/AdGuardHome/issues/6338
|
||||||
[#6357]: https://github.com/AdguardTeam/AdGuardHome/issues/6357
|
[#6357]: https://github.com/AdguardTeam/AdGuardHome/issues/6357
|
||||||
[#6358]: https://github.com/AdguardTeam/AdGuardHome/issues/6358
|
[#6358]: https://github.com/AdguardTeam/AdGuardHome/issues/6358
|
||||||
[#6368]: https://github.com/AdguardTeam/AdGuardHome/issues/6368
|
|
||||||
[#6401]: https://github.com/AdguardTeam/AdGuardHome/issues/6401
|
|
||||||
|
|
||||||
[go-1.20.11]: https://groups.google.com/g/golang-announce/c/4tU8LZfBFkY/m/d-jSKR_jBwAJ
|
<!--
|
||||||
[ms-v0.107.41]: https://github.com/AdguardTeam/AdGuardHome/milestone/76?closed=1
|
NOTE: Add new changes ABOVE THIS COMMENT.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -211,7 +184,7 @@ See also the [v0.107.37 GitHub milestone][ms-v0.107.37].
|
|||||||
is returned if the blocking mode isn't set to `Null IP`. In previous versions
|
is returned if the blocking mode isn't set to `Null IP`. In previous versions
|
||||||
it returned NXDOMAIN response in such cases.
|
it returned NXDOMAIN response in such cases.
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 24 to 27.
|
In this release, the schema version has changed from 24 to 27.
|
||||||
|
|
||||||
@@ -421,7 +394,7 @@ See also the [v0.107.34 GitHub milestone][ms-v0.107.34].
|
|||||||
|
|
||||||
- Improved CPU and RAM consumption during updates of filtering-rule lists.
|
- Improved CPU and RAM consumption during updates of filtering-rule lists.
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 23 to 24.
|
In this release, the schema version has changed from 23 to 24.
|
||||||
|
|
||||||
@@ -501,7 +474,7 @@ See also the [v0.107.33 GitHub milestone][ms-v0.107.33].
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 20 to 23.
|
In this release, the schema version has changed from 20 to 23.
|
||||||
|
|
||||||
@@ -766,7 +739,7 @@ See also the [v0.107.28 GitHub milestone][ms-v0.107.28].
|
|||||||
- ARPA domain names containing a subnet within private networks now also
|
- ARPA domain names containing a subnet within private networks now also
|
||||||
considered private, behaving closer to [RFC 6761][rfc6761] ([#5567]).
|
considered private, behaving closer to [RFC 6761][rfc6761] ([#5567]).
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 17 to 20.
|
In this release, the schema version has changed from 17 to 20.
|
||||||
|
|
||||||
@@ -906,7 +879,7 @@ See also the [v0.107.26 GitHub milestone][ms-v0.107.26].
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
- Property `edns_client_subnet`, which in schema versions 16 and earlier used
|
- Property `edns_client_subnet`, which in schema versions 16 and earlier used
|
||||||
to be a part of the `dns` object, is now part of the `dns.edns_client_subnet`
|
to be a part of the `dns` object, is now part of the `dns.edns_client_subnet`
|
||||||
@@ -995,7 +968,7 @@ See also the [v0.107.24 GitHub milestone][ms-v0.107.24].
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 14 to 16.
|
In this release, the schema version has changed from 14 to 16.
|
||||||
|
|
||||||
@@ -1705,7 +1678,7 @@ See also the [v0.107.7 GitHub milestone][ms-v0.107.7].
|
|||||||
- The `dns.bogus_nxdomain` property in the configuration file now supports CIDR
|
- The `dns.bogus_nxdomain` property in the configuration file now supports CIDR
|
||||||
notation alongside IP addresses ([#1730]).
|
notation alongside IP addresses ([#1730]).
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 12 to 14.
|
In this release, the schema version has changed from 12 to 14.
|
||||||
|
|
||||||
@@ -2046,7 +2019,7 @@ See also the [v0.107.0 GitHub milestone][ms-v0.107.0].
|
|||||||
file, together with the new `group` and `user` properties ([#2763]).
|
file, together with the new `group` and `user` properties ([#2763]).
|
||||||
- Permissions on filter files are now `0o644` instead of `0o600` ([#3198]).
|
- Permissions on filter files are now `0o644` instead of `0o600` ([#3198]).
|
||||||
|
|
||||||
#### Configuration changes
|
#### Configuration Changes
|
||||||
|
|
||||||
In this release, the schema version has changed from 10 to 12.
|
In this release, the schema version has changed from 10 to 12.
|
||||||
|
|
||||||
@@ -2612,12 +2585,11 @@ See also the [v0.104.2 GitHub milestone][ms-v0.104.2].
|
|||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.42...HEAD
|
|
||||||
[v0.107.42]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...v0.107.42
|
|
||||||
-->
|
|
||||||
|
|
||||||
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...HEAD
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.41...HEAD
|
||||||
[v0.107.41]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.40...v0.107.41
|
[v0.107.41]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.40...v0.107.41
|
||||||
|
-->
|
||||||
|
|
||||||
|
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.40...HEAD
|
||||||
[v0.107.40]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.39...v0.107.40
|
[v0.107.40]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.39...v0.107.40
|
||||||
[v0.107.39]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.38...v0.107.39
|
[v0.107.39]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.38...v0.107.39
|
||||||
[v0.107.38]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.37...v0.107.38
|
[v0.107.38]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.107.37...v0.107.38
|
||||||
|
|||||||
@@ -272,7 +272,7 @@
|
|||||||
# need to build a few of these.
|
# need to build a few of these.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'beta'
|
'channel': 'beta'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:7.5'
|
'dockerGo': 'adguard/golang-ubuntu:7.4'
|
||||||
# release-vX.Y.Z branches are the branches from which the actual final
|
# release-vX.Y.Z branches are the branches from which the actual final
|
||||||
# release is built.
|
# release is built.
|
||||||
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
|
- '^release-v[0-9]+\.[0-9]+\.[0-9]+':
|
||||||
@@ -287,4 +287,4 @@
|
|||||||
# are the ones that actually get released.
|
# are the ones that actually get released.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'release'
|
'channel': 'release'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:7.5'
|
'dockerGo': 'adguard/golang-ubuntu:7.4'
|
||||||
|
|||||||
@@ -191,7 +191,7 @@
|
|||||||
# need to build a few of these.
|
# need to build a few of these.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'beta'
|
'channel': 'beta'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:7.5'
|
'dockerGo': 'adguard/golang-ubuntu:7.4'
|
||||||
'snapcraftChannel': 'beta'
|
'snapcraftChannel': 'beta'
|
||||||
# release-vX.Y.Z branches are the branches from which the actual final
|
# release-vX.Y.Z branches are the branches from which the actual final
|
||||||
# release is built.
|
# release is built.
|
||||||
@@ -207,5 +207,5 @@
|
|||||||
# are the ones that actually get released.
|
# are the ones that actually get released.
|
||||||
'variables':
|
'variables':
|
||||||
'channel': 'release'
|
'channel': 'release'
|
||||||
'dockerGo': 'adguard/golang-ubuntu:7.5'
|
'dockerGo': 'adguard/golang-ubuntu:7.4'
|
||||||
'snapcraftChannel': 'candidate'
|
'snapcraftChannel': 'candidate'
|
||||||
|
|||||||
@@ -143,6 +143,7 @@
|
|||||||
"enforced_save_search": "Ужыты бяспечны пошук",
|
"enforced_save_search": "Ужыты бяспечны пошук",
|
||||||
"number_of_dns_query_to_safe_search": "Колькасць запытаў DNS для пошукавых сістэм, для якіх быў ужыты Бяспечны пошук",
|
"number_of_dns_query_to_safe_search": "Колькасць запытаў DNS для пошукавых сістэм, для якіх быў ужыты Бяспечны пошук",
|
||||||
"average_processing_time": "Сярэдні час апрацоўкі запыту",
|
"average_processing_time": "Сярэдні час апрацоўкі запыту",
|
||||||
|
"processing_time": "Час апрацоўкі",
|
||||||
"average_processing_time_hint": "Сярэдні час для апрацоўкі запыту DNS у мілісекундах",
|
"average_processing_time_hint": "Сярэдні час для апрацоўкі запыту DNS у мілісекундах",
|
||||||
"block_domain_use_filters_and_hosts": "Блакаваць дамены з выкарыстаннем фільтраў і файлаў хастоў",
|
"block_domain_use_filters_and_hosts": "Блакаваць дамены з выкарыстаннем фільтраў і файлаў хастоў",
|
||||||
"filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў «<a>Фільтрах</a>».",
|
"filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў «<a>Фільтрах</a>».",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Nastavení klienta",
|
"client_settings": "Nastavení klienta",
|
||||||
"example_upstream_reserved": "odchozí DNS připojení <0>pro konkrétní doménu(y)</0>;",
|
"example_upstream_reserved": "odchozí DNS připojení <0>pro konkrétní doménu(y)</0>;",
|
||||||
"example_multiple_upstreams_reserved": "více odchozích připojení <0>pro konkrétní domény</0>;",
|
|
||||||
"example_upstream_comment": "komentář.",
|
"example_upstream_comment": "komentář.",
|
||||||
"upstream_parallel": "Použijte paralelní požadavky na urychlení řešení simultánním dotazováním na všechny navazující servery.",
|
"upstream_parallel": "Použijte paralelní požadavky na urychlení řešení simultánním dotazováním na všechny navazující servery.",
|
||||||
"parallel_requests": "Paralelní požadavky",
|
"parallel_requests": "Paralelní požadavky",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Vynucené bezpečné vyhledávání",
|
"enforced_save_search": "Vynucené bezpečné vyhledávání",
|
||||||
"number_of_dns_query_to_safe_search": "Počet požadavků DNS na vyhledávače, při kterých bylo vynucené bezpečné vyhledávání",
|
"number_of_dns_query_to_safe_search": "Počet požadavků DNS na vyhledávače, při kterých bylo vynucené bezpečné vyhledávání",
|
||||||
"average_processing_time": "Průměrný čas zpracování",
|
"average_processing_time": "Průměrný čas zpracování",
|
||||||
"average_upstream_response_time": "Průměrná doba odezvy odchozích připojení",
|
"processing_time": "Doba zpracování",
|
||||||
"response_time": "Čas odezvy",
|
|
||||||
"average_processing_time_hint": "Průměrný čas zpracování požadavků DNS v milisekundách",
|
"average_processing_time_hint": "Průměrný čas zpracování požadavků DNS v milisekundách",
|
||||||
"block_domain_use_filters_and_hosts": "Blokovat domény pomocí filtrů a seznamů adres",
|
"block_domain_use_filters_and_hosts": "Blokovat domény pomocí filtrů a seznamů adres",
|
||||||
"filters_block_toggle_hint": "Pravidla blokování můžete nastavit v nastavení <a>Filtry</a>.",
|
"filters_block_toggle_hint": "Pravidla blokování můžete nastavit v nastavení <a>Filtry</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Klientindstillinger",
|
"client_settings": "Klientindstillinger",
|
||||||
"example_upstream_reserved": "en upstream <0>for bestemte domæner</0>;",
|
"example_upstream_reserved": "en upstream <0>for bestemte domæner</0>;",
|
||||||
"example_multiple_upstreams_reserved": "flere upstreams <0>til bestemte domæner</0>;",
|
|
||||||
"example_upstream_comment": "en kommentaren.",
|
"example_upstream_comment": "en kommentaren.",
|
||||||
"upstream_parallel": "Brug parallelforespørgsler til at accelerere fortolkningen ved at forespørge alle upstream-servere samtidigt.",
|
"upstream_parallel": "Brug parallelforespørgsler til at accelerere fortolkningen ved at forespørge alle upstream-servere samtidigt.",
|
||||||
"parallel_requests": "Parallelle forespørgsler",
|
"parallel_requests": "Parallelle forespørgsler",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Håndhævet sikker søgning",
|
"enforced_save_search": "Håndhævet sikker søgning",
|
||||||
"number_of_dns_query_to_safe_search": "Antallet af DNS-forespørgsler til søgemaskiner, hvor Sikker Søgning blev håndhævet",
|
"number_of_dns_query_to_safe_search": "Antallet af DNS-forespørgsler til søgemaskiner, hvor Sikker Søgning blev håndhævet",
|
||||||
"average_processing_time": "Gennemsnitlig behandlingstid",
|
"average_processing_time": "Gennemsnitlig behandlingstid",
|
||||||
"average_upstream_response_time": "Gennemsnitlig upstream-responstid",
|
"processing_time": "Behandlingstid",
|
||||||
"response_time": "Responstid",
|
|
||||||
"average_processing_time_hint": "Gennemsnitlig behandlingstid i millisekunder af DNS-forespørgsel",
|
"average_processing_time_hint": "Gennemsnitlig behandlingstid i millisekunder af DNS-forespørgsel",
|
||||||
"block_domain_use_filters_and_hosts": "Blokér domæner vha. filtre og værtsfiler",
|
"block_domain_use_filters_and_hosts": "Blokér domæner vha. filtre og værtsfiler",
|
||||||
"filters_block_toggle_hint": "Du kan opsætte blokeringsregler i <a>Filterindstillingerne</a>.",
|
"filters_block_toggle_hint": "Du kan opsætte blokeringsregler i <a>Filterindstillingerne</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Client-Einstellungen",
|
"client_settings": "Client-Einstellungen",
|
||||||
"example_upstream_reserved": "ein Upstream <0>für bestimmte Domains</0>;",
|
"example_upstream_reserved": "ein Upstream <0>für bestimmte Domains</0>;",
|
||||||
"example_multiple_upstreams_reserved": "mehrere Upstreams <0>für bestimmte Domains</0>;",
|
|
||||||
"example_upstream_comment": "ein Kommentar.",
|
"example_upstream_comment": "ein Kommentar.",
|
||||||
"upstream_parallel": "Parallele Abfragen verwenden, um das Auflösen zu beschleunigen, indem alle Upstream-Server gleichzeitig abgefragt werden.",
|
"upstream_parallel": "Parallele Abfragen verwenden, um das Auflösen zu beschleunigen, indem alle Upstream-Server gleichzeitig abgefragt werden.",
|
||||||
"parallel_requests": "Paralleles Abfragen",
|
"parallel_requests": "Paralleles Abfragen",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Sichere Suche erzwungen",
|
"enforced_save_search": "Sichere Suche erzwungen",
|
||||||
"number_of_dns_query_to_safe_search": "Anzahl der DNS-Anfragen bei denen Sichere Suche für Suchanfragen erzwungen wurde",
|
"number_of_dns_query_to_safe_search": "Anzahl der DNS-Anfragen bei denen Sichere Suche für Suchanfragen erzwungen wurde",
|
||||||
"average_processing_time": "Durchschnittliche Bearbeitungsdauer",
|
"average_processing_time": "Durchschnittliche Bearbeitungsdauer",
|
||||||
"average_upstream_response_time": "Durchschnittliche Upstream-Antwortzeit",
|
"processing_time": "Verarbeitungszeit",
|
||||||
"response_time": "Antwortzeit",
|
|
||||||
"average_processing_time_hint": "Durchschnittliche Zeit in Millisekunden zur Bearbeitung von DNS-Anfragen",
|
"average_processing_time_hint": "Durchschnittliche Zeit in Millisekunden zur Bearbeitung von DNS-Anfragen",
|
||||||
"block_domain_use_filters_and_hosts": "Domains durch Filter und Host-Dateien sperren",
|
"block_domain_use_filters_and_hosts": "Domains durch Filter und Host-Dateien sperren",
|
||||||
"filters_block_toggle_hint": "Sie können Blockierregeln in den <a>Filter</a>einstellungen erstellen.",
|
"filters_block_toggle_hint": "Sie können Blockierregeln in den <a>Filter</a>einstellungen erstellen.",
|
||||||
|
|||||||
@@ -144,8 +144,7 @@
|
|||||||
"enforced_save_search": "Enforced safe search",
|
"enforced_save_search": "Enforced safe search",
|
||||||
"number_of_dns_query_to_safe_search": "The number of DNS requests to search engines for which Safe Search was enforced",
|
"number_of_dns_query_to_safe_search": "The number of DNS requests to search engines for which Safe Search was enforced",
|
||||||
"average_processing_time": "Average processing time",
|
"average_processing_time": "Average processing time",
|
||||||
"average_upstream_response_time": "Average upstream response time",
|
"processing_time": "Processing time",
|
||||||
"response_time": "Response time",
|
|
||||||
"average_processing_time_hint": "Average time in milliseconds on processing a DNS request",
|
"average_processing_time_hint": "Average time in milliseconds on processing a DNS request",
|
||||||
"block_domain_use_filters_and_hosts": "Block domains using filters and hosts files",
|
"block_domain_use_filters_and_hosts": "Block domains using filters and hosts files",
|
||||||
"filters_block_toggle_hint": "You can setup blocking rules in the <a>Filters</a> settings.",
|
"filters_block_toggle_hint": "You can setup blocking rules in the <a>Filters</a> settings.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Configuración de clientes",
|
"client_settings": "Configuración de clientes",
|
||||||
"example_upstream_reserved": "un DNS de subida <0>para un dominio específico</0>.",
|
"example_upstream_reserved": "un DNS de subida <0>para un dominio específico</0>.",
|
||||||
"example_multiple_upstreams_reserved": "múltiples upstreams <0>para dominios específicos</0>;",
|
|
||||||
"example_upstream_comment": "un comentario.",
|
"example_upstream_comment": "un comentario.",
|
||||||
"upstream_parallel": "Usar consultas paralelas para acelerar la resolución al consultar simultáneamente a todos los servidores DNS de subida.",
|
"upstream_parallel": "Usar consultas paralelas para acelerar la resolución al consultar simultáneamente a todos los servidores DNS de subida.",
|
||||||
"parallel_requests": "Consultas paralelas",
|
"parallel_requests": "Consultas paralelas",
|
||||||
@@ -9,9 +8,9 @@
|
|||||||
"load_balancing_desc": "Consulta un servidor DNS de subida a la vez. AdGuard Home utiliza su algoritmo aleatorio ponderado para elegir el servidor más rápido y sea utilizado con más frecuencia.",
|
"load_balancing_desc": "Consulta un servidor DNS de subida a la vez. AdGuard Home utiliza su algoritmo aleatorio ponderado para elegir el servidor más rápido y sea utilizado con más frecuencia.",
|
||||||
"bootstrap_dns": "Servidores DNS de arranque",
|
"bootstrap_dns": "Servidores DNS de arranque",
|
||||||
"bootstrap_dns_desc": "Direcciones IP de servidores DNS utilizadas para resolver direcciones IP de los solucionadores DoH/DoT que especifiques como ascendentes. No se permiten comentarios.",
|
"bootstrap_dns_desc": "Direcciones IP de servidores DNS utilizadas para resolver direcciones IP de los solucionadores DoH/DoT que especifiques como ascendentes. No se permiten comentarios.",
|
||||||
"fallback_dns_title": "Servidores DNS alternativos",
|
"fallback_dns_title": "Servidores DNS de fallback",
|
||||||
"fallback_dns_desc": "Lista de servidores DNS alternativos utilizados cuando los servidores DNS de subida no responden. La sintaxis es la misma que en el campo de los principales DNS de subida anterior.",
|
"fallback_dns_desc": "La lista de DNS de fallback serán usadas cuando los servidores de upstream de DNS no respondan. La sintaxis es la misma que en los principales del campo anterior.",
|
||||||
"fallback_dns_placeholder": "Ingresa un servidor DNS alternativo por línea",
|
"fallback_dns_placeholder": "Ingresa un servidor de DNS alternativo por línea",
|
||||||
"local_ptr_title": "Servidores DNS inversos y privados",
|
"local_ptr_title": "Servidores DNS inversos y privados",
|
||||||
"local_ptr_desc": "Los servidores DNS que AdGuard Home utiliza para las consultas PTR locales. Estos servidores se utilizan para resolver las peticiones PTR de direcciones en rangos de IP privadas, por ejemplo \"192.168.12.34\", utilizando DNS inverso. Si no está establecido, AdGuard Home utilizará los resolutores DNS predeterminados de tu sistema operativo, excepto las direcciones del propio AdGuard Home.",
|
"local_ptr_desc": "Los servidores DNS que AdGuard Home utiliza para las consultas PTR locales. Estos servidores se utilizan para resolver las peticiones PTR de direcciones en rangos de IP privadas, por ejemplo \"192.168.12.34\", utilizando DNS inverso. Si no está establecido, AdGuard Home utilizará los resolutores DNS predeterminados de tu sistema operativo, excepto las direcciones del propio AdGuard Home.",
|
||||||
"local_ptr_default_resolver": "Por defecto, AdGuard Home utiliza los siguientes resolutores DNS inversos: {{ip}}.",
|
"local_ptr_default_resolver": "Por defecto, AdGuard Home utiliza los siguientes resolutores DNS inversos: {{ip}}.",
|
||||||
@@ -132,8 +131,8 @@
|
|||||||
"top_clients": "Clientes más frecuentes",
|
"top_clients": "Clientes más frecuentes",
|
||||||
"no_clients_found": "No se han encontrado clientes",
|
"no_clients_found": "No se han encontrado clientes",
|
||||||
"general_statistics": "Estadísticas generales",
|
"general_statistics": "Estadísticas generales",
|
||||||
"top_upstreams": "DNS de subida más frecuentes",
|
"top_upstreams": "Mejores upstreams",
|
||||||
"no_upstreams_data_found": "No se han encontrado datos de DNS de subida",
|
"no_upstreams_data_found": "No se han encontrado datos de upstreams",
|
||||||
"number_of_dns_query_days": "Número de consultas DNS procesadas durante el último {{count}} día",
|
"number_of_dns_query_days": "Número de consultas DNS procesadas durante el último {{count}} día",
|
||||||
"number_of_dns_query_days_plural": "Número de consultas DNS procesadas durante los últimos {{count}} días",
|
"number_of_dns_query_days_plural": "Número de consultas DNS procesadas durante los últimos {{count}} días",
|
||||||
"number_of_dns_query_hours": "Número de consultas DNS procesadas durante la última {{count}} hora",
|
"number_of_dns_query_hours": "Número de consultas DNS procesadas durante la última {{count}} hora",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Búsquedas seguras forzadas",
|
"enforced_save_search": "Búsquedas seguras forzadas",
|
||||||
"number_of_dns_query_to_safe_search": "Número de peticiones DNS a los motores de búsqueda para los que se aplicó la búsqueda segura forzada",
|
"number_of_dns_query_to_safe_search": "Número de peticiones DNS a los motores de búsqueda para los que se aplicó la búsqueda segura forzada",
|
||||||
"average_processing_time": "Tiempo promedio de procesamiento",
|
"average_processing_time": "Tiempo promedio de procesamiento",
|
||||||
"average_upstream_response_time": "Tiempo promedio de respuesta upstream",
|
"processing_time": "Tiempo de procesamiento",
|
||||||
"response_time": "Tiempo de respuesta",
|
|
||||||
"average_processing_time_hint": "Tiempo promedio en milisegundos al procesar una petición DNS",
|
"average_processing_time_hint": "Tiempo promedio en milisegundos al procesar una petición DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Bloquear dominios usando filtros y archivos hosts",
|
"block_domain_use_filters_and_hosts": "Bloquear dominios usando filtros y archivos hosts",
|
||||||
"filters_block_toggle_hint": "Puedes configurar las reglas de bloqueo en la configuración de <a>filtros</a>.",
|
"filters_block_toggle_hint": "Puedes configurar las reglas de bloqueo en la configuración de <a>filtros</a>.",
|
||||||
@@ -170,7 +168,7 @@
|
|||||||
"upstream_dns_configured_in_file": "Configurado en {{path}}",
|
"upstream_dns_configured_in_file": "Configurado en {{path}}",
|
||||||
"test_upstream_btn": "Probar DNS de subida",
|
"test_upstream_btn": "Probar DNS de subida",
|
||||||
"upstreams": "DNS de subida",
|
"upstreams": "DNS de subida",
|
||||||
"upstream": "DNS de subida",
|
"upstream": "Upstream",
|
||||||
"apply_btn": "Aplicar",
|
"apply_btn": "Aplicar",
|
||||||
"disabled_filtering_toast": "Filtrado deshabilitado",
|
"disabled_filtering_toast": "Filtrado deshabilitado",
|
||||||
"enabled_filtering_toast": "Filtrado habilitado",
|
"enabled_filtering_toast": "Filtrado habilitado",
|
||||||
@@ -679,21 +677,21 @@
|
|||||||
"disable_for_hours": "Por {{count}} hora",
|
"disable_for_hours": "Por {{count}} hora",
|
||||||
"disable_for_hours_plural": "Por {{count}} horas",
|
"disable_for_hours_plural": "Por {{count}} horas",
|
||||||
"disable_until_tomorrow": "Hasta mañana",
|
"disable_until_tomorrow": "Hasta mañana",
|
||||||
"disable_notify_for_seconds": "Deshabilitar protección por {{count}} segundo",
|
"disable_notify_for_seconds": "Desactivar la protección por {{count}} segundo",
|
||||||
"disable_notify_for_seconds_plural": "Deshabilitar protección por {{count}} segundos",
|
"disable_notify_for_seconds_plural": "Desactivar la protección por {{count}} segundos",
|
||||||
"disable_notify_for_minutes": "Deshabilitar protección por {{count}} minuto",
|
"disable_notify_for_minutes": "Desactivar la protección por {{count}} minuto",
|
||||||
"disable_notify_for_minutes_plural": "Deshabilitar protección por {{count}} minutos",
|
"disable_notify_for_minutes_plural": "Desactivar la protección por {{count}} minutos",
|
||||||
"disable_notify_for_hours": "Deshabilitar protección por {{count}} hora",
|
"disable_notify_for_hours": "Desactivar la protección por {{count}} hora",
|
||||||
"disable_notify_for_hours_plural": "Deshabilitar protección por {{count}} horas",
|
"disable_notify_for_hours_plural": "Desactivar la protección por {{count}} horas",
|
||||||
"disable_notify_until_tomorrow": "Deshabilitar protección hasta mañana",
|
"disable_notify_until_tomorrow": "Desactivar la protección hasta mañana",
|
||||||
"enable_protection_timer": "La protección se habilitará a las {{time}}",
|
"enable_protection_timer": "La protección se activará en {{time}}",
|
||||||
"custom_retention_input": "Ingresa la retención en horas",
|
"custom_retention_input": "Ingresa la retención en horas",
|
||||||
"custom_rotation_input": "Ingresa la rotación en horas",
|
"custom_rotation_input": "Ingresa la rotación en horas",
|
||||||
"protection_section_label": "Protección",
|
"protection_section_label": "Protección",
|
||||||
"log_and_stats_section_label": "Registro de consultas y estadísticas",
|
"log_and_stats_section_label": "Registro de consultas y estadísticas",
|
||||||
"ignore_query_log": "Ignorar este cliente en el registro de consultas",
|
"ignore_query_log": "Ignorar este cliente en el registro de consultas",
|
||||||
"ignore_statistics": "Ignorar este cliente en las estadísticas",
|
"ignore_statistics": "Ignorar este cliente en las estadísticas",
|
||||||
"schedule_services": "Pausar servicio de bloqueo",
|
"schedule_services": "Pausar el servicio de bloqueo",
|
||||||
"schedule_services_desc": "Configura el horario programado de pausa del servicio de bloqueo",
|
"schedule_services_desc": "Configura el horario programado de pausa del servicio de bloqueo",
|
||||||
"schedule_services_desc_client": "Configurar el horario programado de pausa del bloqueo de servicio filtrado para este cliente",
|
"schedule_services_desc_client": "Configurar el horario programado de pausa del bloqueo de servicio filtrado para este cliente",
|
||||||
"schedule_desc": "Establecer periodos de inactividad para servicios bloqueados",
|
"schedule_desc": "Establecer periodos de inactividad para servicios bloqueados",
|
||||||
@@ -703,7 +701,7 @@
|
|||||||
"schedule_current_timezone": "Zona horaria actual: {{value}}",
|
"schedule_current_timezone": "Zona horaria actual: {{value}}",
|
||||||
"schedule_time_all_day": "Todo el dia",
|
"schedule_time_all_day": "Todo el dia",
|
||||||
"schedule_modal_description": "Este horario sustituirá cualquier horario existente para el mismo día de la semana. Cada día de la semana solo puede tener un periodo de inactividad.",
|
"schedule_modal_description": "Este horario sustituirá cualquier horario existente para el mismo día de la semana. Cada día de la semana solo puede tener un periodo de inactividad.",
|
||||||
"schedule_modal_time_off": "Detener servicio de bloqueo:",
|
"schedule_modal_time_off": "Detener el servicio de bloqueo:",
|
||||||
"schedule_new": "Nuevo horario",
|
"schedule_new": "Nuevo horario",
|
||||||
"schedule_edit": "Editar horario",
|
"schedule_edit": "Editar horario",
|
||||||
"schedule_save": "Guardar horario",
|
"schedule_save": "Guardar horario",
|
||||||
|
|||||||
@@ -139,6 +139,7 @@
|
|||||||
"enforced_save_search": "جستجوی اَمن اجبار شده",
|
"enforced_save_search": "جستجوی اَمن اجبار شده",
|
||||||
"number_of_dns_query_to_safe_search": "تعداد درخواست های DNS برای موتور جستجو که جستجوی اَمن اجبار شده",
|
"number_of_dns_query_to_safe_search": "تعداد درخواست های DNS برای موتور جستجو که جستجوی اَمن اجبار شده",
|
||||||
"average_processing_time": "میانگین زمان پردازش",
|
"average_processing_time": "میانگین زمان پردازش",
|
||||||
|
"processing_time": "زمان پردازش",
|
||||||
"average_processing_time_hint": "زمان میانگین بر هزارم ثانیه در پردازش درخواست DNS",
|
"average_processing_time_hint": "زمان میانگین بر هزارم ثانیه در پردازش درخواست DNS",
|
||||||
"block_domain_use_filters_and_hosts": "مسدودسازی دامنه ها توسط فیلترها و فایل های میزبان",
|
"block_domain_use_filters_and_hosts": "مسدودسازی دامنه ها توسط فیلترها و فایل های میزبان",
|
||||||
"filters_block_toggle_hint": "میتوانید دستورات مسدودسازی را در تنظیمات <a>فیلترها</a> راه اندازی کنید.",
|
"filters_block_toggle_hint": "میتوانید دستورات مسدودسازی را در تنظیمات <a>فیلترها</a> راه اندازی کنید.",
|
||||||
|
|||||||
@@ -143,7 +143,7 @@
|
|||||||
"enforced_save_search": "Turvallinen haku pakotettiin",
|
"enforced_save_search": "Turvallinen haku pakotettiin",
|
||||||
"number_of_dns_query_to_safe_search": "DNS-pyyntöjen määrä, joille turvallinen haku pakotettiin käyttöön",
|
"number_of_dns_query_to_safe_search": "DNS-pyyntöjen määrä, joille turvallinen haku pakotettiin käyttöön",
|
||||||
"average_processing_time": "Keskimääräinen käsittelyaika",
|
"average_processing_time": "Keskimääräinen käsittelyaika",
|
||||||
"response_time": "Vasteaika",
|
"processing_time": "Käsittelyaika",
|
||||||
"average_processing_time_hint": "Keskimääräinen DNS-pyynnön käsittelyyn kulutettu aika millisekunteina",
|
"average_processing_time_hint": "Keskimääräinen DNS-pyynnön käsittelyyn kulutettu aika millisekunteina",
|
||||||
"block_domain_use_filters_and_hosts": "Estä verkkotunnuksia suodattimilla ja hosts-tiedostoilla",
|
"block_domain_use_filters_and_hosts": "Estä verkkotunnuksia suodattimilla ja hosts-tiedostoilla",
|
||||||
"filters_block_toggle_hint": "Voit määrittää estosääntöjä <a>suodatinasetuksissa</a>.",
|
"filters_block_toggle_hint": "Voit määrittää estosääntöjä <a>suodatinasetuksissa</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Paramètres du client",
|
"client_settings": "Paramètres du client",
|
||||||
"example_upstream_reserved": "un amont <0>pour des domaines spécifiques</0> ;",
|
"example_upstream_reserved": "un amont <0>pour des domaines spécifiques</0> ;",
|
||||||
"example_multiple_upstreams_reserved": "plusieurs amonts <0>pour des domaines spécifiques</0> ;",
|
|
||||||
"example_upstream_comment": " un commentaire.",
|
"example_upstream_comment": " un commentaire.",
|
||||||
"upstream_parallel": "Utilisez des requêtes parallèles pour accélérer la résolution en requêtant simultanément tous les serveurs en amont.",
|
"upstream_parallel": "Utilisez des requêtes parallèles pour accélérer la résolution en requêtant simultanément tous les serveurs en amont.",
|
||||||
"parallel_requests": "Requêtes en parallèle",
|
"parallel_requests": "Requêtes en parallèle",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Recherche sécurisée forcée",
|
"enforced_save_search": "Recherche sécurisée forcée",
|
||||||
"number_of_dns_query_to_safe_search": "Le nombre de requêtes DNS faites avec la Recherche securisée",
|
"number_of_dns_query_to_safe_search": "Le nombre de requêtes DNS faites avec la Recherche securisée",
|
||||||
"average_processing_time": "Temps moyen de traitement",
|
"average_processing_time": "Temps moyen de traitement",
|
||||||
"average_upstream_response_time": "Temps de réponse moyen en amont",
|
"processing_time": "Délai de traitement",
|
||||||
"response_time": "Temps de réponse",
|
|
||||||
"average_processing_time_hint": "Temps moyen (en millisecondes) de traitement d'une requête DNS",
|
"average_processing_time_hint": "Temps moyen (en millisecondes) de traitement d'une requête DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Bloquez les domaines à l'aide des filtres et fichiers hosts",
|
"block_domain_use_filters_and_hosts": "Bloquez les domaines à l'aide des filtres et fichiers hosts",
|
||||||
"filters_block_toggle_hint": "Vous pouvez configurer les règles de filtrage dans les paramètres des <a>Filtres</a>.",
|
"filters_block_toggle_hint": "Vous pouvez configurer les règles de filtrage dans les paramètres des <a>Filtres</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Postavke klijenta",
|
"client_settings": "Postavke klijenta",
|
||||||
"example_upstream_reserved": "upstream <0>za određene domene</0>;",
|
"example_upstream_reserved": "upstream <0>za određene domene</0>;",
|
||||||
"example_multiple_upstreams_reserved": "višestruke upstream poslužitelje <0>za određene domene</0>;",
|
|
||||||
"example_upstream_comment": "komentar.",
|
"example_upstream_comment": "komentar.",
|
||||||
"upstream_parallel": "Koristi paralelne upite kako bi ubrzali rješavanje istovremenim ispitavanjem svih upstream poslužitelja.",
|
"upstream_parallel": "Koristi paralelne upite kako bi ubrzali rješavanje istovremenim ispitavanjem svih upstream poslužitelja.",
|
||||||
"parallel_requests": "Paralelni zahtjevi",
|
"parallel_requests": "Paralelni zahtjevi",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Omogućeno sigurno pretraživanje",
|
"enforced_save_search": "Omogućeno sigurno pretraživanje",
|
||||||
"number_of_dns_query_to_safe_search": "Broj DNS zahtjeva prema pretraživačima za koje je omogućeno Sigurno pretraživanje",
|
"number_of_dns_query_to_safe_search": "Broj DNS zahtjeva prema pretraživačima za koje je omogućeno Sigurno pretraživanje",
|
||||||
"average_processing_time": "Prosječno vrijeme obrade",
|
"average_processing_time": "Prosječno vrijeme obrade",
|
||||||
"average_upstream_response_time": "Prosječno vrijeme odziva upstream poslužitelja",
|
"processing_time": "Vrijeme obrade",
|
||||||
"response_time": "Vrijeme odziva",
|
|
||||||
"average_processing_time_hint": "Prosječno vrijeme u milisekundama za obradu DNS zahtjeva",
|
"average_processing_time_hint": "Prosječno vrijeme u milisekundama za obradu DNS zahtjeva",
|
||||||
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtre ili hosts datoteke",
|
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtre ili hosts datoteke",
|
||||||
"filters_block_toggle_hint": "Pravila blokiranja možete postaviti u postavkama <a>filtara</a>.",
|
"filters_block_toggle_hint": "Pravila blokiranja možete postaviti u postavkama <a>filtara</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Kliens beállítások",
|
"client_settings": "Kliens beállítások",
|
||||||
"example_upstream_reserved": "Megadhat egy DNS kiszolgálót <0>egy adott domainhez vagy domainekhez</0>",
|
"example_upstream_reserved": "Megadhat egy DNS kiszolgálót <0>egy adott domainhez vagy domainekhez</0>",
|
||||||
"example_multiple_upstreams_reserved": "több upstream szerver <0>adott domainekhez</0>;",
|
|
||||||
"example_upstream_comment": "egy megjegyzés.",
|
"example_upstream_comment": "egy megjegyzés.",
|
||||||
"upstream_parallel": "Használjon párhuzamos lekéréseket a domainek feloldásának felgyorsításához az összes upstream kiszolgálóra való egyidejű lekérdezéssel.",
|
"upstream_parallel": "Használjon párhuzamos lekéréseket a domainek feloldásának felgyorsításához az összes upstream kiszolgálóra való egyidejű lekérdezéssel.",
|
||||||
"parallel_requests": "Párhuzamos lekérések",
|
"parallel_requests": "Párhuzamos lekérések",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Kényszerített biztonságos keresés",
|
"enforced_save_search": "Kényszerített biztonságos keresés",
|
||||||
"number_of_dns_query_to_safe_search": "A biztonságos keresésre kényszerített DNS lekérdezések száma",
|
"number_of_dns_query_to_safe_search": "A biztonságos keresésre kényszerített DNS lekérdezések száma",
|
||||||
"average_processing_time": "Átlagos feldolgozási idő",
|
"average_processing_time": "Átlagos feldolgozási idő",
|
||||||
"average_upstream_response_time": "Átlagos upstream válaszidő",
|
"processing_time": "Feldolgozási idő",
|
||||||
"response_time": "Válaszidő",
|
|
||||||
"average_processing_time_hint": "A DNS lekérdezések feldolgozásához szükséges átlagos idő milliszekundumban",
|
"average_processing_time_hint": "A DNS lekérdezések feldolgozásához szükséges átlagos idő milliszekundumban",
|
||||||
"block_domain_use_filters_and_hosts": "Domainek blokkolása szűrők és hosztfájlok használatával",
|
"block_domain_use_filters_and_hosts": "Domainek blokkolása szűrők és hosztfájlok használatával",
|
||||||
"filters_block_toggle_hint": "A <a> szűrőbeállításoknál</a> megadhatja a blokkolási szabályokat.",
|
"filters_block_toggle_hint": "A <a> szűrőbeállításoknál</a> megadhatja a blokkolási szabályokat.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Pengaturan klien",
|
"client_settings": "Pengaturan klien",
|
||||||
"example_upstream_reserved": "upstream <0>untuk domain spesifik</0>;",
|
"example_upstream_reserved": "upstream <0>untuk domain spesifik</0>;",
|
||||||
"example_multiple_upstreams_reserved": "beberapa server upstream <0>untuk domain spesifik</0>;",
|
|
||||||
"example_upstream_comment": "komentar.",
|
"example_upstream_comment": "komentar.",
|
||||||
"upstream_parallel": "Gunakan kueri paralel untuk mempercepat resoluasi dengan menanyakan semua server upstream secara bersamaan",
|
"upstream_parallel": "Gunakan kueri paralel untuk mempercepat resoluasi dengan menanyakan semua server upstream secara bersamaan",
|
||||||
"parallel_requests": "Permintaan paralel",
|
"parallel_requests": "Permintaan paralel",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Paksa pencarian aman",
|
"enforced_save_search": "Paksa pencarian aman",
|
||||||
"number_of_dns_query_to_safe_search": "Jumlah perminataan DNS ke mesin pencari yang dipaksa Pencarian Aman",
|
"number_of_dns_query_to_safe_search": "Jumlah perminataan DNS ke mesin pencari yang dipaksa Pencarian Aman",
|
||||||
"average_processing_time": "Rata-rata waktu pemrosesan",
|
"average_processing_time": "Rata-rata waktu pemrosesan",
|
||||||
"average_upstream_response_time": "Waktu respons server upstream rata-rata",
|
"processing_time": "Waktu pemrosesan",
|
||||||
"response_time": "Waktu respons",
|
|
||||||
"average_processing_time_hint": "Rata-rata waktu dalam milidetik untuk pemrosesan sebuah permintaan DNS",
|
"average_processing_time_hint": "Rata-rata waktu dalam milidetik untuk pemrosesan sebuah permintaan DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan file hosts",
|
"block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan file hosts",
|
||||||
"filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran di pengaturan <a>Penyaringan</a>.",
|
"filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran di pengaturan <a>Penyaringan</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Impostazioni client",
|
"client_settings": "Impostazioni client",
|
||||||
"example_upstream_reserved": "un upstream <0>per specifici domini</0>;",
|
"example_upstream_reserved": "un upstream <0>per specifici domini</0>;",
|
||||||
"example_multiple_upstreams_reserved": "upstream multipli <0>per domini specifici</0>;",
|
|
||||||
"example_upstream_comment": "un commento.",
|
"example_upstream_comment": "un commento.",
|
||||||
"upstream_parallel": "Utilizza richieste parallele per accelerare la risoluzione interrogando simultaneamente tutti i server upstream.",
|
"upstream_parallel": "Utilizza richieste parallele per accelerare la risoluzione interrogando simultaneamente tutti i server upstream.",
|
||||||
"parallel_requests": "Richieste parallele",
|
"parallel_requests": "Richieste parallele",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Ricerca sicura forzata",
|
"enforced_save_search": "Ricerca sicura forzata",
|
||||||
"number_of_dns_query_to_safe_search": "Numero di richieste DNS dai motori di ricerca per i quali la Ricerca Sicura è stata forzata",
|
"number_of_dns_query_to_safe_search": "Numero di richieste DNS dai motori di ricerca per i quali la Ricerca Sicura è stata forzata",
|
||||||
"average_processing_time": "Tempo di elaborazione medio",
|
"average_processing_time": "Tempo di elaborazione medio",
|
||||||
"average_upstream_response_time": "Tempo medio di risposta upstream",
|
"processing_time": "Tempo di elaborazione",
|
||||||
"response_time": "Tempo di risposta",
|
|
||||||
"average_processing_time_hint": "Tempo medio in millisecondi per elaborare una richiesta DNS",
|
"average_processing_time_hint": "Tempo medio in millisecondi per elaborare una richiesta DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Blocca domini utilizzando filtri e file hosts",
|
"block_domain_use_filters_and_hosts": "Blocca domini utilizzando filtri e file hosts",
|
||||||
"filters_block_toggle_hint": "Puoi impostare le regole di blocco nelle impostazioni dei <a>Filtri</a>.",
|
"filters_block_toggle_hint": "Puoi impostare le regole di blocco nelle impostazioni dei <a>Filtri</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "クライアント設定",
|
"client_settings": "クライアント設定",
|
||||||
"example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます。",
|
"example_upstream_reserved": "<0>特定のドメイン</0>に対してDNSアップストリームを指定できます。",
|
||||||
"example_multiple_upstreams_reserved": "<0>特定ドメイン</0>のための複数のアップストリームサーバー;",
|
|
||||||
"example_upstream_comment": "コメントを追加できます。",
|
"example_upstream_comment": "コメントを追加できます。",
|
||||||
"upstream_parallel": "並列リクエストを使用する(同時にすべてのアップストリームサーバーに処理要求することで解決スピードが向上)",
|
"upstream_parallel": "並列リクエストを使用する(同時にすべてのアップストリームサーバーに処理要求することで解決スピードが向上)",
|
||||||
"parallel_requests": "並列リクエスト",
|
"parallel_requests": "並列リクエスト",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "強制されたセーフサーチ",
|
"enforced_save_search": "強制されたセーフサーチ",
|
||||||
"number_of_dns_query_to_safe_search": "セーフサーチが強制適用された検索エンジンへのDNSリクエストの数",
|
"number_of_dns_query_to_safe_search": "セーフサーチが強制適用された検索エンジンへのDNSリクエストの数",
|
||||||
"average_processing_time": "平均処理時間",
|
"average_processing_time": "平均処理時間",
|
||||||
"average_upstream_response_time": "アップストリームの平均応答時間",
|
"processing_time": "処理時間",
|
||||||
"response_time": "応答時間",
|
|
||||||
"average_processing_time_hint": "DNSリクエストの処理にかかる平均時間(ミリ秒単位)",
|
"average_processing_time_hint": "DNSリクエストの処理にかかる平均時間(ミリ秒単位)",
|
||||||
"block_domain_use_filters_and_hosts": "フィルタとhostsファイルを使用してドメインをブロックする",
|
"block_domain_use_filters_and_hosts": "フィルタとhostsファイルを使用してドメインをブロックする",
|
||||||
"filters_block_toggle_hint": "<a>フィルタ</a>の設定でブロックするルールを設定することができます。",
|
"filters_block_toggle_hint": "<a>フィルタ</a>の設定でブロックするルールを設定することができます。",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "클라이언트 설정",
|
"client_settings": "클라이언트 설정",
|
||||||
"example_upstream_reserved": "<0>특정 도메인에 대한</0> 업스트림;",
|
"example_upstream_reserved": "<0>특정 도메인에 대한</0> 업스트림;",
|
||||||
"example_multiple_upstreams_reserved": "<0>특정 도메인</0>에 대한 여러 업스트림",
|
|
||||||
"example_upstream_comment": "댓글.",
|
"example_upstream_comment": "댓글.",
|
||||||
"upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.",
|
"upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.",
|
||||||
"parallel_requests": "병렬 처리 요청",
|
"parallel_requests": "병렬 처리 요청",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "세이프서치 강제",
|
"enforced_save_search": "세이프서치 강제",
|
||||||
"number_of_dns_query_to_safe_search": "세이프서치가 적용된 검색 엔진에 대해 DNS 요청 수",
|
"number_of_dns_query_to_safe_search": "세이프서치가 적용된 검색 엔진에 대해 DNS 요청 수",
|
||||||
"average_processing_time": "평균처리 시간",
|
"average_processing_time": "평균처리 시간",
|
||||||
"average_upstream_response_time": "평균 업스트림 응답 시간",
|
"processing_time": "처리 시간",
|
||||||
"response_time": "응답 시간",
|
|
||||||
"average_processing_time_hint": "DNS 요청 처리시 평균 시간(밀리초)",
|
"average_processing_time_hint": "DNS 요청 처리시 평균 시간(밀리초)",
|
||||||
"block_domain_use_filters_and_hosts": "필터 및 호스트 파일을 사용하여 도메인 차단",
|
"block_domain_use_filters_and_hosts": "필터 및 호스트 파일을 사용하여 도메인 차단",
|
||||||
"filters_block_toggle_hint": "차단규칙<a>필터</a>을 설정할 수 있습니다.",
|
"filters_block_toggle_hint": "차단규칙<a>필터</a>을 설정할 수 있습니다.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Cliëntinstellingen",
|
"client_settings": "Cliëntinstellingen",
|
||||||
"example_upstream_reserved": "een upstream <0>voor specifieke domeinen</0>;",
|
"example_upstream_reserved": "een upstream <0>voor specifieke domeinen</0>;",
|
||||||
"example_multiple_upstreams_reserved": "meerdere upstreams <0>voor specifieke domeinen</0>;",
|
|
||||||
"example_upstream_comment": "een commentaar.",
|
"example_upstream_comment": "een commentaar.",
|
||||||
"upstream_parallel": "Parallelle verzoeken gebruiken om te versnellen door gelijktijdig verzoeken te sturen naar alle upstream servers.",
|
"upstream_parallel": "Parallelle verzoeken gebruiken om te versnellen door gelijktijdig verzoeken te sturen naar alle upstream servers.",
|
||||||
"parallel_requests": "Parallelle verzoeken",
|
"parallel_requests": "Parallelle verzoeken",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Geforceerd veilig zoeken",
|
"enforced_save_search": "Geforceerd veilig zoeken",
|
||||||
"number_of_dns_query_to_safe_search": "Aantal DNS aanvragen in zoekmachines dmv geforceerd veilig zoeken",
|
"number_of_dns_query_to_safe_search": "Aantal DNS aanvragen in zoekmachines dmv geforceerd veilig zoeken",
|
||||||
"average_processing_time": "Gemiddelde procestijd",
|
"average_processing_time": "Gemiddelde procestijd",
|
||||||
"average_upstream_response_time": "Gemiddelde upstream responstijd",
|
"processing_time": "Verwerkingstijd",
|
||||||
"response_time": "Responsetijd",
|
|
||||||
"average_processing_time_hint": "Gemiddelde verwerkingstijd in milliseconden van een DNS aanvraag",
|
"average_processing_time_hint": "Gemiddelde verwerkingstijd in milliseconden van een DNS aanvraag",
|
||||||
"block_domain_use_filters_and_hosts": "Domeinen blokkeren d.m.v. filters en host-bestanden",
|
"block_domain_use_filters_and_hosts": "Domeinen blokkeren d.m.v. filters en host-bestanden",
|
||||||
"filters_block_toggle_hint": "Je kan blokkeringsregels toevoegen in de <a>Filters</a> instellingen.",
|
"filters_block_toggle_hint": "Je kan blokkeringsregels toevoegen in de <a>Filters</a> instellingen.",
|
||||||
|
|||||||
@@ -128,6 +128,7 @@
|
|||||||
"enforced_save_search": "Påtvungede barnevennlige søk",
|
"enforced_save_search": "Påtvungede barnevennlige søk",
|
||||||
"number_of_dns_query_to_safe_search": "Antall DNS-forespørsler til søkemotorer der \"Safe Search\" ble fremtvunget",
|
"number_of_dns_query_to_safe_search": "Antall DNS-forespørsler til søkemotorer der \"Safe Search\" ble fremtvunget",
|
||||||
"average_processing_time": "Gjennomsnittlig behandlingstid",
|
"average_processing_time": "Gjennomsnittlig behandlingstid",
|
||||||
|
"processing_time": "Behandlingstid",
|
||||||
"average_processing_time_hint": "Gjennomsnittstid for behandling av DNS-forespørsler i millisekunder",
|
"average_processing_time_hint": "Gjennomsnittstid for behandling av DNS-forespørsler i millisekunder",
|
||||||
"block_domain_use_filters_and_hosts": "Blokker domener ved hjelp av filtre, «hosts»-filer, og rå domener",
|
"block_domain_use_filters_and_hosts": "Blokker domener ved hjelp av filtre, «hosts»-filer, og rå domener",
|
||||||
"filters_block_toggle_hint": "Du kan sette opp blokkeringsoppføringer i <a>Filtre</a>-innstillingene.",
|
"filters_block_toggle_hint": "Du kan sette opp blokkeringsoppføringer i <a>Filtre</a>-innstillingene.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Ustawienia klienta",
|
"client_settings": "Ustawienia klienta",
|
||||||
"example_upstream_reserved": "upstream <0>dla określonych domen</0>;",
|
"example_upstream_reserved": "upstream <0>dla określonych domen</0>;",
|
||||||
"example_multiple_upstreams_reserved": "wiele serwerów nadrzędnych <0>dla konkretnej domeny</0>;",
|
|
||||||
"example_upstream_comment": "komentarz.",
|
"example_upstream_comment": "komentarz.",
|
||||||
"upstream_parallel": "Użyj zapytań równoległych, aby przyspieszyć rozwiązywanie przez jednoczesne wysyłanie zapytań do wszystkich serwerów nadrzędnych.",
|
"upstream_parallel": "Użyj zapytań równoległych, aby przyspieszyć rozwiązywanie przez jednoczesne wysyłanie zapytań do wszystkich serwerów nadrzędnych.",
|
||||||
"parallel_requests": "Równoległe żądania",
|
"parallel_requests": "Równoległe żądania",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Wymuszone bezpieczne wyszukiwanie",
|
"enforced_save_search": "Wymuszone bezpieczne wyszukiwanie",
|
||||||
"number_of_dns_query_to_safe_search": "Liczba żądań DNS kierowanych do wyszukiwarek, dla których wymuszono Bezpieczne wyszukiwanie",
|
"number_of_dns_query_to_safe_search": "Liczba żądań DNS kierowanych do wyszukiwarek, dla których wymuszono Bezpieczne wyszukiwanie",
|
||||||
"average_processing_time": "Średni czas przetwarzania",
|
"average_processing_time": "Średni czas przetwarzania",
|
||||||
"average_upstream_response_time": "Średni czas odpowiedzi serwera nadrzędnego",
|
"processing_time": "Czas przetwarzania",
|
||||||
"response_time": "Czas odpowiedzi",
|
|
||||||
"average_processing_time_hint": "Średni czas przetwarzania żądania DNS liczony w milisekundach",
|
"average_processing_time_hint": "Średni czas przetwarzania żądania DNS liczony w milisekundach",
|
||||||
"block_domain_use_filters_and_hosts": "Zablokuj domeny za pomocą filtrów i plików host",
|
"block_domain_use_filters_and_hosts": "Zablokuj domeny za pomocą filtrów i plików host",
|
||||||
"filters_block_toggle_hint": "Możesz skonfigurować reguły blokowania w ustawieniach <a>Filtry</a>.",
|
"filters_block_toggle_hint": "Możesz skonfigurować reguły blokowania w ustawieniach <a>Filtry</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Configurações do cliente",
|
"client_settings": "Configurações do cliente",
|
||||||
"example_upstream_reserved": "um DNS primário <0>para o domínios especificos</0>;",
|
"example_upstream_reserved": "um DNS primário <0>para o domínios especificos</0>;",
|
||||||
"example_multiple_upstreams_reserved": "múltiplos upstreams <0>para domínios específicos</0>;",
|
|
||||||
"example_upstream_comment": "um comentário.",
|
"example_upstream_comment": "um comentário.",
|
||||||
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores DNS primário",
|
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores DNS primário",
|
||||||
"parallel_requests": "Solicitações paralelas",
|
"parallel_requests": "Solicitações paralelas",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Forçar pesquisa segura",
|
"enforced_save_search": "Forçar pesquisa segura",
|
||||||
"number_of_dns_query_to_safe_search": "O número de solicitações de DNS para mecanismos de pesquisa para os quais a pesquisa segura foi aplicada",
|
"number_of_dns_query_to_safe_search": "O número de solicitações de DNS para mecanismos de pesquisa para os quais a pesquisa segura foi aplicada",
|
||||||
"average_processing_time": "Tempo médio de processamento",
|
"average_processing_time": "Tempo médio de processamento",
|
||||||
"average_upstream_response_time": "Tempo médio de resposta upstream",
|
"processing_time": "Tempo de processamento",
|
||||||
"response_time": "Tempo de resposta",
|
|
||||||
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
|
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Bloquear domínios usando arquivos de filtros e hosts",
|
"block_domain_use_filters_and_hosts": "Bloquear domínios usando arquivos de filtros e hosts",
|
||||||
"filters_block_toggle_hint": "Você pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
|
"filters_block_toggle_hint": "Você pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Definições do cliente",
|
"client_settings": "Definições do cliente",
|
||||||
"example_upstream_reserved": "Podes especificar o DNS primário <0>para domínio(s) especifico(s)</0>",
|
"example_upstream_reserved": "Podes especificar o DNS primário <0>para domínio(s) especifico(s)</0>",
|
||||||
"example_multiple_upstreams_reserved": "múltiplos upstreams <0>para domínios específicos</0>;",
|
|
||||||
"example_upstream_comment": "um comentário.",
|
"example_upstream_comment": "um comentário.",
|
||||||
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores DNS",
|
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores DNS",
|
||||||
"parallel_requests": "Solicitações paralelas",
|
"parallel_requests": "Solicitações paralelas",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Forçar pesquisa segura",
|
"enforced_save_search": "Forçar pesquisa segura",
|
||||||
"number_of_dns_query_to_safe_search": "O número de solicitações de DNS para motores de busca para os quais a pesquisa segura foi aplicada",
|
"number_of_dns_query_to_safe_search": "O número de solicitações de DNS para motores de busca para os quais a pesquisa segura foi aplicada",
|
||||||
"average_processing_time": "Tempo médio de processamento",
|
"average_processing_time": "Tempo médio de processamento",
|
||||||
"average_upstream_response_time": "Tempo médio de resposta upstream",
|
"processing_time": "Tempo de processamento",
|
||||||
"response_time": "Tempo de resposta",
|
|
||||||
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
|
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Bloquear domínios usando ficheiros de filtros e hosts",
|
"block_domain_use_filters_and_hosts": "Bloquear domínios usando ficheiros de filtros e hosts",
|
||||||
"filters_block_toggle_hint": "Pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
|
"filters_block_toggle_hint": "Pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Setări client",
|
"client_settings": "Setări client",
|
||||||
"example_upstream_reserved": "un flux în amonte <0>pentru domenii specifice</0>;",
|
"example_upstream_reserved": "un flux în amonte <0>pentru domenii specifice</0>;",
|
||||||
"example_multiple_upstreams_reserved": "mai mulți servere în amonte <0>pentru domenii specifice</0>;",
|
|
||||||
"example_upstream_comment": "un comentariu.",
|
"example_upstream_comment": "un comentariu.",
|
||||||
"upstream_parallel": "Folosiți interogări paralele pentru a accelera rezolvarea, interogând simultan toate serverele în amonte.",
|
"upstream_parallel": "Folosiți interogări paralele pentru a accelera rezolvarea, interogând simultan toate serverele în amonte.",
|
||||||
"parallel_requests": "Solicitări paralele",
|
"parallel_requests": "Solicitări paralele",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Căutare protejată întărită",
|
"enforced_save_search": "Căutare protejată întărită",
|
||||||
"number_of_dns_query_to_safe_search": "Numărul de interogări DNS pe motoarele de căutare pentru care a fost impusă Căutarea Sigură",
|
"number_of_dns_query_to_safe_search": "Numărul de interogări DNS pe motoarele de căutare pentru care a fost impusă Căutarea Sigură",
|
||||||
"average_processing_time": "Timpul mediu de procesare",
|
"average_processing_time": "Timpul mediu de procesare",
|
||||||
"average_upstream_response_time": "Timpul mediu de răspuns al serverului în amonte",
|
"processing_time": "Timp de procesare",
|
||||||
"response_time": "Timp de răspuns",
|
|
||||||
"average_processing_time_hint": "Timp mediu în milisecunde la procesarea unei cereri DNS",
|
"average_processing_time_hint": "Timp mediu în milisecunde la procesarea unei cereri DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Blocați domenii folosind filtre și fișiere hosts",
|
"block_domain_use_filters_and_hosts": "Blocați domenii folosind filtre și fișiere hosts",
|
||||||
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a>Filtre</a>.",
|
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a>Filtre</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Настройки клиентов",
|
"client_settings": "Настройки клиентов",
|
||||||
"example_upstream_reserved": "DNS-сервер <0>для конкретных доменов</0>;",
|
"example_upstream_reserved": "DNS-сервер <0>для конкретных доменов</0>;",
|
||||||
"example_multiple_upstreams_reserved": "несколько DNS-серверов <0>для конкретных доменов</0>;",
|
|
||||||
"example_upstream_comment": "комментарий.",
|
"example_upstream_comment": "комментарий.",
|
||||||
"upstream_parallel": "Использовать параллельные запросы ко всем серверам одновременно для ускорения обработки запроса.",
|
"upstream_parallel": "Использовать параллельные запросы ко всем серверам одновременно для ускорения обработки запроса.",
|
||||||
"parallel_requests": "Параллельные запросы",
|
"parallel_requests": "Параллельные запросы",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Применён безопасный поиск",
|
"enforced_save_search": "Применён безопасный поиск",
|
||||||
"number_of_dns_query_to_safe_search": "Количество запросов DNS для поисковых систем, для которых был применён Безопасный поиск",
|
"number_of_dns_query_to_safe_search": "Количество запросов DNS для поисковых систем, для которых был применён Безопасный поиск",
|
||||||
"average_processing_time": "Среднее время обработки запроса",
|
"average_processing_time": "Среднее время обработки запроса",
|
||||||
"average_upstream_response_time": "Среднее время ответа upstream-сервера",
|
"processing_time": "Время обработки",
|
||||||
"response_time": "Время ответа",
|
|
||||||
"average_processing_time_hint": "Среднее время для обработки запроса DNS в миллисекундах",
|
"average_processing_time_hint": "Среднее время для обработки запроса DNS в миллисекундах",
|
||||||
"block_domain_use_filters_and_hosts": "Блокировать домены с использованием фильтров и файлов hosts",
|
"block_domain_use_filters_and_hosts": "Блокировать домены с использованием фильтров и файлов hosts",
|
||||||
"filters_block_toggle_hint": "Вы можете настроить правила блокировки в <a>«Фильтрах»</a>.",
|
"filters_block_toggle_hint": "Вы можете настроить правила блокировки в <a>«Фильтрах»</a>.",
|
||||||
|
|||||||
@@ -122,6 +122,7 @@
|
|||||||
"enforced_save_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ",
|
"enforced_save_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ",
|
||||||
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
|
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
|
||||||
"average_processing_time": "සාමාන්ය සැකසුම් කාලය",
|
"average_processing_time": "සාමාන්ය සැකසුම් කාලය",
|
||||||
|
"processing_time": "සැකසුම් කාලය",
|
||||||
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්ය කාලය මිලි තත්පර වලින්",
|
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්ය කාලය මිලි තත්පර වලින්",
|
||||||
"block_domain_use_filters_and_hosts": "පෙරහන් හා සත්කාරක ගොනු භාවිතයෙන් වසම් අවහිර කරන්න",
|
"block_domain_use_filters_and_hosts": "පෙරහන් හා සත්කාරක ගොනු භාවිතයෙන් වසම් අවහිර කරන්න",
|
||||||
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
|
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
|
||||||
@@ -646,20 +647,6 @@
|
|||||||
"log_and_stats_section_label": "විමසුම් සටහන හා සංඛ්යාලේඛන",
|
"log_and_stats_section_label": "විමසුම් සටහන හා සංඛ්යාලේඛන",
|
||||||
"ignore_query_log": "විමසුම් සටහනට මෙම අනුග්රාහකය යොදන්න එපා",
|
"ignore_query_log": "විමසුම් සටහනට මෙම අනුග්රාහකය යොදන්න එපා",
|
||||||
"ignore_statistics": "සංඛ්යාලේඛනයට මෙම අනුග්රාහකය යොදන්න එපා",
|
"ignore_statistics": "සංඛ්යාලේඛනයට මෙම අනුග්රාහකය යොදන්න එපා",
|
||||||
"schedule_invalid_select": "ආරම්භක වේලාව අවසන් වේලාවට කලින් විය යුතුය",
|
|
||||||
"schedule_select_days": "දවස් තෝරන්න",
|
|
||||||
"schedule_timezone": "වේලා කලාපයක් තෝරන්න",
|
|
||||||
"schedule_current_timezone": "වත්මන් වේලා කලාපය: {{value}}",
|
|
||||||
"schedule_time_all_day": "දවස පුරාම",
|
|
||||||
"schedule_from": "සිට",
|
|
||||||
"schedule_to": "දක්වා",
|
|
||||||
"sunday": "ඉරිදා",
|
|
||||||
"monday": "සඳුදා",
|
|
||||||
"tuesday": "අඟහරුවාදා",
|
|
||||||
"wednesday": "බදාදා",
|
|
||||||
"thursday": "බ්රහස්පතින්දා",
|
|
||||||
"friday": "සිකුරාදා",
|
|
||||||
"saturday": "සෙනසුරාදා",
|
|
||||||
"sunday_short": "ඉරිදා",
|
"sunday_short": "ඉරිදා",
|
||||||
"monday_short": "සඳුදා",
|
"monday_short": "සඳුදා",
|
||||||
"tuesday_short": "අඟහ",
|
"tuesday_short": "අඟහ",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Nastavenie klienta",
|
"client_settings": "Nastavenie klienta",
|
||||||
"example_upstream_reserved": "upstream <0>pre konkrétne domény</0>;",
|
"example_upstream_reserved": "upstream <0>pre konkrétne domény</0>;",
|
||||||
"example_multiple_upstreams_reserved": "viaceré upstreamy pre <0>konkrétne domény</0>;",
|
|
||||||
"example_upstream_comment": "komentár.",
|
"example_upstream_comment": "komentár.",
|
||||||
"upstream_parallel": "Používať paralelné dopyty na zrýchlenie súčasným dopytovaním všetkých upstream serverov súčasne.",
|
"upstream_parallel": "Používať paralelné dopyty na zrýchlenie súčasným dopytovaním všetkých upstream serverov súčasne.",
|
||||||
"parallel_requests": "Paralelné dopyty",
|
"parallel_requests": "Paralelné dopyty",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Vynútené bezpečné vyhľadávanie",
|
"enforced_save_search": "Vynútené bezpečné vyhľadávanie",
|
||||||
"number_of_dns_query_to_safe_search": "Počet DNS dopytov na vyhľadávače, pri ktorých bolo vynútené bezpečné vyhľadávanie",
|
"number_of_dns_query_to_safe_search": "Počet DNS dopytov na vyhľadávače, pri ktorých bolo vynútené bezpečné vyhľadávanie",
|
||||||
"average_processing_time": "Priemerný čas spracovania",
|
"average_processing_time": "Priemerný čas spracovania",
|
||||||
"average_upstream_response_time": "Priemerný čas odozvy upstreamu",
|
"processing_time": "Doba spracovania",
|
||||||
"response_time": "Čas odozvy",
|
|
||||||
"average_processing_time_hint": "Priemerný čas spracovania DNS dopytu v milisekundách",
|
"average_processing_time_hint": "Priemerný čas spracovania DNS dopytu v milisekundách",
|
||||||
"block_domain_use_filters_and_hosts": "Blokovať domény pomocou filtrov a zoznamov adries",
|
"block_domain_use_filters_and_hosts": "Blokovať domény pomocou filtrov a zoznamov adries",
|
||||||
"filters_block_toggle_hint": "Pravidlá blokovania môžete nastaviť v nastaveniach <a>Filtre</a>.",
|
"filters_block_toggle_hint": "Pravidlá blokovania môžete nastaviť v nastaveniach <a>Filtre</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Nastavitve odjemalca",
|
"client_settings": "Nastavitve odjemalca",
|
||||||
"example_upstream_reserved": "gorvodni <0>za določene domene</0>;",
|
"example_upstream_reserved": "gorvodni <0>za določene domene</0>;",
|
||||||
"example_multiple_upstreams_reserved": "več gorvodnih <0>za določene domene</0>;",
|
|
||||||
"example_upstream_comment": "komentar.",
|
"example_upstream_comment": "komentar.",
|
||||||
"upstream_parallel": "Uporabite vzporedne zahteve za pospešitev reševanja s hkratnim poizvedovanjem vseh gorvodnih strežnikov.",
|
"upstream_parallel": "Uporabite vzporedne zahteve za pospešitev reševanja s hkratnim poizvedovanjem vseh gorvodnih strežnikov.",
|
||||||
"parallel_requests": "Vzporedne zahteve",
|
"parallel_requests": "Vzporedne zahteve",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Prisilno varno iskanje",
|
"enforced_save_search": "Prisilno varno iskanje",
|
||||||
"number_of_dns_query_to_safe_search": "Število zahtev DNS za iskalnike, za katere je bilo uveljavljeno varno iskanje",
|
"number_of_dns_query_to_safe_search": "Število zahtev DNS za iskalnike, za katere je bilo uveljavljeno varno iskanje",
|
||||||
"average_processing_time": "Povprečni čas obdelave",
|
"average_processing_time": "Povprečni čas obdelave",
|
||||||
"average_upstream_response_time": "Povprečni gorvodni odzivni čas",
|
"processing_time": "Čas obdelave",
|
||||||
"response_time": "Odzivni čas",
|
|
||||||
"average_processing_time_hint": "Povprečni čas v milisekundah pri obdelavi zahteve DNS",
|
"average_processing_time_hint": "Povprečni čas v milisekundah pri obdelavi zahteve DNS",
|
||||||
"block_domain_use_filters_and_hosts": "Onemogoči domene s filtri in gostiteljskimi datotekami",
|
"block_domain_use_filters_and_hosts": "Onemogoči domene s filtri in gostiteljskimi datotekami",
|
||||||
"filters_block_toggle_hint": "Pravila zaviranja lahko nastavite v nastavitvah <a>Filtri</a>.",
|
"filters_block_toggle_hint": "Pravila zaviranja lahko nastavite v nastavitvah <a>Filtri</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Postavke klijenta",
|
"client_settings": "Postavke klijenta",
|
||||||
"example_upstream_reserved": "upstream <0>za određene domene</0>;",
|
"example_upstream_reserved": "upstream <0>za određene domene</0>;",
|
||||||
"example_multiple_upstreams_reserved": "nekoliko DNS servera <0>za određene domene</0>;",
|
|
||||||
"example_upstream_comment": "komentar.",
|
"example_upstream_comment": "komentar.",
|
||||||
"upstream_parallel": "Koristite paralelne upite da biste ubrzali rešavanje tako što ćete istovremeno ispitati sve uzvodne servere.",
|
"upstream_parallel": "Koristite paralelne upite da biste ubrzali rešavanje tako što ćete istovremeno ispitati sve uzvodne servere.",
|
||||||
"parallel_requests": "Paralelni zahtevi",
|
"parallel_requests": "Paralelni zahtevi",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Nametni sigurno pretraživanje",
|
"enforced_save_search": "Nametni sigurno pretraživanje",
|
||||||
"number_of_dns_query_to_safe_search": "Broj DNS zahteva ka pretraživačima za koje je nametnuto sigurno pretraživanje",
|
"number_of_dns_query_to_safe_search": "Broj DNS zahteva ka pretraživačima za koje je nametnuto sigurno pretraživanje",
|
||||||
"average_processing_time": "Prosečno vreme obrade",
|
"average_processing_time": "Prosečno vreme obrade",
|
||||||
"average_upstream_response_time": "Prosečno vreme odziva upstream-servera",
|
"processing_time": "Vreme obrade",
|
||||||
"response_time": "Vreme odziva",
|
|
||||||
"average_processing_time_hint": "Prosečno vreme u milisekundama za obradu DNS zahteva",
|
"average_processing_time_hint": "Prosečno vreme u milisekundama za obradu DNS zahteva",
|
||||||
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtere i hosts datoteke",
|
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtere i hosts datoteke",
|
||||||
"filters_block_toggle_hint": "Možete postaviti pravila blokiranja u <a>Filters</a> postavkama.",
|
"filters_block_toggle_hint": "Možete postaviti pravila blokiranja u <a>Filters</a> postavkama.",
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Klientinställningar",
|
"client_settings": "Klientinställningar",
|
||||||
"example_upstream_reserved": "uppström <0>för en specifik domän</0>;",
|
"example_upstream_reserved": "uppström <0>för en specifik domän</0>;",
|
||||||
"example_multiple_upstreams_reserved": "flera uppströmsservrar <0>för specifika domäner</0>;",
|
"example_upstream_comment": "du kan ange en kommentar.",
|
||||||
"example_upstream_comment": "en kommentar.",
|
|
||||||
"upstream_parallel": "Använd parallella förfrågningar för att snabba upp dessa genom att fråga alla uppströmsservrar samtidigt.",
|
"upstream_parallel": "Använd parallella förfrågningar för att snabba upp dessa genom att fråga alla uppströmsservrar samtidigt.",
|
||||||
"parallel_requests": "Parallella förfrågningar",
|
"parallel_requests": "Parallella förfrågningar",
|
||||||
"load_balancing": "Lastbalansering",
|
"load_balancing": "Lastbalansering",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Aktivering av Säker surf",
|
"enforced_save_search": "Aktivering av Säker surf",
|
||||||
"number_of_dns_query_to_safe_search": "Antalet DNS-förfrågningar mot sökmotorer där Säker surf tvingats",
|
"number_of_dns_query_to_safe_search": "Antalet DNS-förfrågningar mot sökmotorer där Säker surf tvingats",
|
||||||
"average_processing_time": "Genomsnittlig processtid",
|
"average_processing_time": "Genomsnittlig processtid",
|
||||||
"average_upstream_response_time": "Genomsnittlig svarstid uppströmsserver",
|
"processing_time": "Bearbetningstid",
|
||||||
"response_time": "Svarstid",
|
|
||||||
"average_processing_time_hint": "Genomsnittlig processtid i millisekunder för DNS-förfrågning",
|
"average_processing_time_hint": "Genomsnittlig processtid i millisekunder för DNS-förfrågning",
|
||||||
"block_domain_use_filters_and_hosts": "Blockera domäner med filter- och värdfiler",
|
"block_domain_use_filters_and_hosts": "Blockera domäner med filter- och värdfiler",
|
||||||
"filters_block_toggle_hint": "Du kan ställa in egna blockerings regler i <a>Filterinställningar</a>.",
|
"filters_block_toggle_hint": "Du kan ställa in egna blockerings regler i <a>Filterinställningar</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "İstemci ayarları",
|
"client_settings": "İstemci ayarları",
|
||||||
"example_upstream_reserved": "<0>belirli alan adları</0> için bir üst sunucusu;",
|
"example_upstream_reserved": "<0>belirli alan adları</0> için bir üst sunucusu;",
|
||||||
"example_multiple_upstreams_reserved": "<0>belirli alanlar için</0> birden fazla üst kaynaklar;",
|
|
||||||
"example_upstream_comment": "bir yorum.",
|
"example_upstream_comment": "bir yorum.",
|
||||||
"upstream_parallel": "Tüm üst sunucuları eş zamanlı sorgulayarak çözümlemeyi hızlandırmak için paralel sorgular kullanın.",
|
"upstream_parallel": "Tüm üst sunucuları eş zamanlı sorgulayarak çözümlemeyi hızlandırmak için paralel sorgular kullanın.",
|
||||||
"parallel_requests": "Paralel istekler",
|
"parallel_requests": "Paralel istekler",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Uygulanan güvenli arama",
|
"enforced_save_search": "Uygulanan güvenli arama",
|
||||||
"number_of_dns_query_to_safe_search": "Güvenli Aramanın uygulandığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
"number_of_dns_query_to_safe_search": "Güvenli Aramanın uygulandığı arama motorlarına gönderilen DNS isteklerinin sayısı",
|
||||||
"average_processing_time": "Ortalama işlem süresi",
|
"average_processing_time": "Ortalama işlem süresi",
|
||||||
"average_upstream_response_time": "Ortalama üst kaynak yanıt süresi",
|
"processing_time": "İşlem süresi",
|
||||||
"response_time": "Yanıt süresi",
|
|
||||||
"average_processing_time_hint": "Bir DNS isteğinin milisaniye cinsinden ortalama işlem süresi",
|
"average_processing_time_hint": "Bir DNS isteğinin milisaniye cinsinden ortalama işlem süresi",
|
||||||
"block_domain_use_filters_and_hosts": "Filtre ve hosts dosyalarını kullanarak alan adlarını engelle",
|
"block_domain_use_filters_and_hosts": "Filtre ve hosts dosyalarını kullanarak alan adlarını engelle",
|
||||||
"filters_block_toggle_hint": "<a>Filtreler</a> ayarlarında engelleme kuralları oluşturabilirsiniz.",
|
"filters_block_toggle_hint": "<a>Filtreler</a> ayarlarında engelleme kuralları oluşturabilirsiniz.",
|
||||||
@@ -182,7 +180,7 @@
|
|||||||
"enabled_save_search_toast": "Güvenli Arama etkinleştirildi",
|
"enabled_save_search_toast": "Güvenli Arama etkinleştirildi",
|
||||||
"updated_save_search_toast": "Güvenli Arama ayarları güncellendi",
|
"updated_save_search_toast": "Güvenli Arama ayarları güncellendi",
|
||||||
"enabled_table_header": "Etkin",
|
"enabled_table_header": "Etkin",
|
||||||
"name_table_header": "Adı",
|
"name_table_header": "Ad",
|
||||||
"list_url_table_header": "Liste URL'si",
|
"list_url_table_header": "Liste URL'si",
|
||||||
"rules_count_table_header": "Kural sayısı",
|
"rules_count_table_header": "Kural sayısı",
|
||||||
"last_time_updated_table_header": "Son güncelleme zamanı",
|
"last_time_updated_table_header": "Son güncelleme zamanı",
|
||||||
@@ -437,7 +435,7 @@
|
|||||||
"settings_global": "Genel",
|
"settings_global": "Genel",
|
||||||
"settings_custom": "Özel",
|
"settings_custom": "Özel",
|
||||||
"table_client": "İstemci",
|
"table_client": "İstemci",
|
||||||
"table_name": "AdAdı",
|
"table_name": "Ad",
|
||||||
"save_btn": "Kaydet",
|
"save_btn": "Kaydet",
|
||||||
"client_add": "İstemci Ekle",
|
"client_add": "İstemci Ekle",
|
||||||
"client_new": "Yeni İstemci",
|
"client_new": "Yeni İstemci",
|
||||||
@@ -451,7 +449,7 @@
|
|||||||
"form_enter_id": "Tanımlayıcı girin",
|
"form_enter_id": "Tanımlayıcı girin",
|
||||||
"form_add_id": "Tanımlayıcı ekle",
|
"form_add_id": "Tanımlayıcı ekle",
|
||||||
"form_client_name": "İstemci ismi girin",
|
"form_client_name": "İstemci ismi girin",
|
||||||
"name": "Adı",
|
"name": "Ad",
|
||||||
"client_global_settings": "Genel ayarları kullan",
|
"client_global_settings": "Genel ayarları kullan",
|
||||||
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
|
"client_deleted": "\"{{key}}\" istemcisi başarıyla silindi",
|
||||||
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi",
|
"client_added": "\"{{key}}\" istemcisi başarıyla eklendi",
|
||||||
|
|||||||
@@ -143,6 +143,7 @@
|
|||||||
"enforced_save_search": "Примусовий безпечний пошук",
|
"enforced_save_search": "Примусовий безпечний пошук",
|
||||||
"number_of_dns_query_to_safe_search": "Кількість DNS-запитів до пошукових систем, для яких примусово застосований безпечний пошук",
|
"number_of_dns_query_to_safe_search": "Кількість DNS-запитів до пошукових систем, для яких примусово застосований безпечний пошук",
|
||||||
"average_processing_time": "Середній час обробки",
|
"average_processing_time": "Середній час обробки",
|
||||||
|
"processing_time": "Час обробки",
|
||||||
"average_processing_time_hint": "Середній час обробки DNS запиту в мілісекундах",
|
"average_processing_time_hint": "Середній час обробки DNS запиту в мілісекундах",
|
||||||
"block_domain_use_filters_and_hosts": "Блокування доменів за допомогою фільтрів та hosts-файлів",
|
"block_domain_use_filters_and_hosts": "Блокування доменів за допомогою фільтрів та hosts-файлів",
|
||||||
"filters_block_toggle_hint": "Ви можете налаштувати правила блокування в розділі <a>Фільтри</a>.",
|
"filters_block_toggle_hint": "Ви можете налаштувати правила блокування в розділі <a>Фільтри</a>.",
|
||||||
@@ -682,7 +683,7 @@
|
|||||||
"disable_notify_for_minutes_plural": "Вимкнення захисту на {{count}} хвилин",
|
"disable_notify_for_minutes_plural": "Вимкнення захисту на {{count}} хвилин",
|
||||||
"disable_notify_for_hours": "Вимкнення захисту на {{count}} годину",
|
"disable_notify_for_hours": "Вимкнення захисту на {{count}} годину",
|
||||||
"disable_notify_for_hours_plural": "Вимкнення захисту на {{count}} годин",
|
"disable_notify_for_hours_plural": "Вимкнення захисту на {{count}} годин",
|
||||||
"disable_notify_until_tomorrow": "Вимкнути захист до завтра",
|
"disable_notify_until_tomorrow": "Відключення захисту до завтра",
|
||||||
"enable_protection_timer": "Захист буде ввімкнено о {{time}}",
|
"enable_protection_timer": "Захист буде ввімкнено о {{time}}",
|
||||||
"custom_retention_input": "Введіть час в годинах",
|
"custom_retention_input": "Введіть час в годинах",
|
||||||
"custom_rotation_input": "Введіть час в годинах",
|
"custom_rotation_input": "Введіть час в годинах",
|
||||||
@@ -700,7 +701,7 @@
|
|||||||
"schedule_current_timezone": "Поточний часовий пояс: {{value}}",
|
"schedule_current_timezone": "Поточний часовий пояс: {{value}}",
|
||||||
"schedule_time_all_day": "Увесь день",
|
"schedule_time_all_day": "Увесь день",
|
||||||
"schedule_modal_description": "Цей розклад замінить усі наявні розклади на той самий день тижня. Кожен день тижня може мати тільки один період бездіяльності.",
|
"schedule_modal_description": "Цей розклад замінить усі наявні розклади на той самий день тижня. Кожен день тижня може мати тільки один період бездіяльності.",
|
||||||
"schedule_modal_time_off": "Вимкнення блокування сервісів:",
|
"schedule_modal_time_off": "Блокування сервісів відключена:",
|
||||||
"schedule_new": "Новий розклад",
|
"schedule_new": "Новий розклад",
|
||||||
"schedule_edit": "Редагувати розклад",
|
"schedule_edit": "Редагувати розклад",
|
||||||
"schedule_save": "Зберегти розклад",
|
"schedule_save": "Зберегти розклад",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "Cài đặt thiết bị",
|
"client_settings": "Cài đặt thiết bị",
|
||||||
"example_upstream_reserved": "ngược dòng <0>cho các miền cụ thể</0>;",
|
"example_upstream_reserved": "ngược dòng <0>cho các miền cụ thể</0>;",
|
||||||
"example_multiple_upstreams_reserved": "nhiều máy chủ thượng nguồn <0>cho các miền cụ thể</0>;",
|
|
||||||
"example_upstream_comment": "một lời bình luận.",
|
"example_upstream_comment": "một lời bình luận.",
|
||||||
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
|
||||||
"parallel_requests": "Yêu cầu song song",
|
"parallel_requests": "Yêu cầu song song",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "Bắt buộc tìm kiếm an toàn",
|
"enforced_save_search": "Bắt buộc tìm kiếm an toàn",
|
||||||
"number_of_dns_query_to_safe_search": "Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn",
|
"number_of_dns_query_to_safe_search": "Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn",
|
||||||
"average_processing_time": "Thời gian xử lý trung bình",
|
"average_processing_time": "Thời gian xử lý trung bình",
|
||||||
"average_upstream_response_time": "Thời gian phản hồi trung bình từ máy chủ thượng nguồn",
|
"processing_time": "Thời gian xử lý",
|
||||||
"response_time": "Thời gian đáp ứng",
|
|
||||||
"average_processing_time_hint": "Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây",
|
"average_processing_time_hint": "Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây",
|
||||||
"block_domain_use_filters_and_hosts": "Chặn tên miền sử dụng các bộ lọc và file hosts",
|
"block_domain_use_filters_and_hosts": "Chặn tên miền sử dụng các bộ lọc và file hosts",
|
||||||
"filters_block_toggle_hint": "Bạn có thể thiết lập quy tắc chặn tại cài đặt <a>Bộ lọc</a>.",
|
"filters_block_toggle_hint": "Bạn có thể thiết lập quy tắc chặn tại cài đặt <a>Bộ lọc</a>.",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "客户端设置",
|
"client_settings": "客户端设置",
|
||||||
"example_upstream_reserved": "指定为<0>特定域名</0>的上游服务器;",
|
"example_upstream_reserved": "指定为<0>特定域名</0>的上游服务器;",
|
||||||
"example_multiple_upstreams_reserved": "<0>特定域名</0>的多个上游服务器;",
|
|
||||||
"example_upstream_comment": "注释。",
|
"example_upstream_comment": "注释。",
|
||||||
"upstream_parallel": "使用并行请求以同时查询所有上游服务器来加快解析速度。",
|
"upstream_parallel": "使用并行请求以同时查询所有上游服务器来加快解析速度。",
|
||||||
"parallel_requests": "并行请求",
|
"parallel_requests": "并行请求",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "强制安全搜索",
|
"enforced_save_search": "强制安全搜索",
|
||||||
"number_of_dns_query_to_safe_search": "启用强制安全搜索后对搜索引擎的 DNS 请求总数",
|
"number_of_dns_query_to_safe_search": "启用强制安全搜索后对搜索引擎的 DNS 请求总数",
|
||||||
"average_processing_time": "平均处理时间",
|
"average_processing_time": "平均处理时间",
|
||||||
"average_upstream_response_time": "上游服务器的平均响应时间",
|
"processing_time": "处理时间",
|
||||||
"response_time": "响应时间",
|
|
||||||
"average_processing_time_hint": "处理 DNS 请求的平均时间(毫秒)",
|
"average_processing_time_hint": "处理 DNS 请求的平均时间(毫秒)",
|
||||||
"block_domain_use_filters_and_hosts": "使用过滤器和 Hosts 文件以拦截指定域名",
|
"block_domain_use_filters_and_hosts": "使用过滤器和 Hosts 文件以拦截指定域名",
|
||||||
"filters_block_toggle_hint": "你可以在 <a>过滤器</a> 设置中添加过滤规则。",
|
"filters_block_toggle_hint": "你可以在 <a>过滤器</a> 设置中添加过滤规则。",
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"client_settings": "用戶端設定",
|
"client_settings": "用戶端設定",
|
||||||
"example_upstream_reserved": "<0>供特定的網域</0>之上游;",
|
"example_upstream_reserved": "<0>供特定的網域</0>之上游;",
|
||||||
"example_multiple_upstreams_reserved": "<0>特定網域</0>的多個上游伺服器;",
|
|
||||||
"example_upstream_comment": "註解。",
|
"example_upstream_comment": "註解。",
|
||||||
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析。",
|
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析。",
|
||||||
"parallel_requests": "並行的請求",
|
"parallel_requests": "並行的請求",
|
||||||
@@ -9,9 +8,9 @@
|
|||||||
"load_balancing_desc": "每次查詢一個上游伺服器。AdGuard Home 使用它的加權隨機的演算法來選擇伺服器,以便最快的伺服器被更常使用。",
|
"load_balancing_desc": "每次查詢一個上游伺服器。AdGuard Home 使用它的加權隨機的演算法來選擇伺服器,以便最快的伺服器被更常使用。",
|
||||||
"bootstrap_dns": "自我啟動(Bootstrap)DNS 伺服器",
|
"bootstrap_dns": "自我啟動(Bootstrap)DNS 伺服器",
|
||||||
"bootstrap_dns_desc": "DNS 伺服器的 IP 位址,用於解析您指定為上游伺服器的 DoH/DoT 解析器的 IP 位址。不允許註釋。",
|
"bootstrap_dns_desc": "DNS 伺服器的 IP 位址,用於解析您指定為上游伺服器的 DoH/DoT 解析器的 IP 位址。不允許註釋。",
|
||||||
"fallback_dns_title": "應變 DNS 伺服器",
|
"fallback_dns_title": "備援 DNS 伺服器",
|
||||||
"fallback_dns_desc": "當上游 DNS 伺服器未回覆時被使用的應變 DNS 伺服器之清單。此語法與在上面主要上游欄位中的相同。",
|
"fallback_dns_desc": "當上游 DNS 伺服器未回應時使用的備援 DNS 伺服器清單。語法與上面的主要上游欄位相同。",
|
||||||
"fallback_dns_placeholder": "每行輸入一個應變 DNS 伺服器",
|
"fallback_dns_placeholder": "每行輸入一個備援 DNS 伺服器",
|
||||||
"local_ptr_title": "私人反向的 DNS 伺服器",
|
"local_ptr_title": "私人反向的 DNS 伺服器",
|
||||||
"local_ptr_desc": "AdGuard Home 用於區域指標(PTR)查詢之 DNS 伺服器。這些伺服器被用於解析有關在私人 IP 範圍的位址之區域指標查詢,例如,\"192.168.12.34\",使用反向的 DNS。如果未被設定,AdGuard Home 使用您的作業系統之預設 DNS 解析器的位址。",
|
"local_ptr_desc": "AdGuard Home 用於區域指標(PTR)查詢之 DNS 伺服器。這些伺服器被用於解析有關在私人 IP 範圍的位址之區域指標查詢,例如,\"192.168.12.34\",使用反向的 DNS。如果未被設定,AdGuard Home 使用您的作業系統之預設 DNS 解析器的位址。",
|
||||||
"local_ptr_default_resolver": "預設下,AdGuard Home 使用以下反向的 DNS 解析器:{{ip}}。",
|
"local_ptr_default_resolver": "預設下,AdGuard Home 使用以下反向的 DNS 解析器:{{ip}}。",
|
||||||
@@ -132,7 +131,7 @@
|
|||||||
"top_clients": "熱門用戶端",
|
"top_clients": "熱門用戶端",
|
||||||
"no_clients_found": "無已發現之用戶端",
|
"no_clients_found": "無已發現之用戶端",
|
||||||
"general_statistics": "一般的統計資料",
|
"general_statistics": "一般的統計資料",
|
||||||
"top_upstreams": "熱門上游",
|
"top_upstreams": "經常請求的上游伺服器",
|
||||||
"no_upstreams_data_found": "找不到上游伺服器資料",
|
"no_upstreams_data_found": "找不到上游伺服器資料",
|
||||||
"number_of_dns_query_days": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
|
"number_of_dns_query_days": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
|
||||||
"number_of_dns_query_days_plural": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
|
"number_of_dns_query_days_plural": "在最近的 {{count}} 日內已處理的 DNS 查詢之數量",
|
||||||
@@ -144,8 +143,7 @@
|
|||||||
"enforced_save_search": "已強制執行的安全搜尋",
|
"enforced_save_search": "已強制執行的安全搜尋",
|
||||||
"number_of_dns_query_to_safe_search": "安全搜尋已被強制執行之屬於搜尋引擎的 DNS 請求之數量",
|
"number_of_dns_query_to_safe_search": "安全搜尋已被強制執行之屬於搜尋引擎的 DNS 請求之數量",
|
||||||
"average_processing_time": "平均的處理時間",
|
"average_processing_time": "平均的處理時間",
|
||||||
"average_upstream_response_time": "平均的上游回應時間",
|
"processing_time": "處理時間",
|
||||||
"response_time": "回應時間",
|
|
||||||
"average_processing_time_hint": "在處理一項 DNS 請求時以毫秒(ms)計的平均時間",
|
"average_processing_time_hint": "在處理一項 DNS 請求時以毫秒(ms)計的平均時間",
|
||||||
"block_domain_use_filters_and_hosts": "透過過濾器和主機檔案封鎖網域",
|
"block_domain_use_filters_and_hosts": "透過過濾器和主機檔案封鎖網域",
|
||||||
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設置封鎖規則。",
|
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設置封鎖規則。",
|
||||||
@@ -290,7 +288,7 @@
|
|||||||
"blocking_ipv4": "封鎖 IPv4",
|
"blocking_ipv4": "封鎖 IPv4",
|
||||||
"blocking_ipv6": "封鎖 IPv6",
|
"blocking_ipv6": "封鎖 IPv6",
|
||||||
"blocked_response_ttl": "已封鎖的回應之存活時間(TTL)",
|
"blocked_response_ttl": "已封鎖的回應之存活時間(TTL)",
|
||||||
"blocked_response_ttl_desc": "對用戶端應快取受過濾的回應,指定多少秒數",
|
"blocked_response_ttl_desc": "指定客戶端應將過濾後的回應存入快取的秒數",
|
||||||
"form_enter_blocked_response_ttl": "請輸入已封鎖回應的存活時間(秒)",
|
"form_enter_blocked_response_ttl": "請輸入已封鎖回應的存活時間(秒)",
|
||||||
"dnscrypt": "DNSCrypt",
|
"dnscrypt": "DNSCrypt",
|
||||||
"dns_over_https": "DNS-over-HTTPS",
|
"dns_over_https": "DNS-over-HTTPS",
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ const UpstreamAvgTime = ({
|
|||||||
subtitle,
|
subtitle,
|
||||||
}) => (
|
}) => (
|
||||||
<Card
|
<Card
|
||||||
title={t('average_upstream_response_time')}
|
title={t('average_processing_time')}
|
||||||
subtitle={subtitle}
|
subtitle={subtitle}
|
||||||
bodyType="card-table"
|
bodyType="card-table"
|
||||||
refresh={refreshButton}
|
refresh={refreshButton}
|
||||||
@@ -55,7 +55,7 @@ const UpstreamAvgTime = ({
|
|||||||
Cell: DomainCell,
|
Cell: DomainCell,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Header: <Trans>response_time</Trans>,
|
Header: <Trans>processing_time</Trans>,
|
||||||
accessor: 'count',
|
accessor: 'count',
|
||||||
maxWidth: 190,
|
maxWidth: 190,
|
||||||
Cell: TimeCell,
|
Cell: TimeCell,
|
||||||
|
|||||||
@@ -81,10 +81,6 @@ export const Modal = ({
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
if (timezone !== intialTimezone) {
|
|
||||||
newSchedule.time_zone = timezone;
|
|
||||||
}
|
|
||||||
|
|
||||||
onSubmit(newSchedule);
|
onSubmit(newSchedule);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -202,30 +202,12 @@ export default {
|
|||||||
"homepage": "https://github.com/hagezi/dns-blocklists",
|
"homepage": "https://github.com/hagezi/dns-blocklists",
|
||||||
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_34.txt"
|
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_34.txt"
|
||||||
},
|
},
|
||||||
"hagezi_pro": {
|
|
||||||
"name": "HaGeZi's Pro Blocklist",
|
|
||||||
"categoryId": "general",
|
|
||||||
"homepage": "https://github.com/hagezi/dns-blocklists",
|
|
||||||
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_48.txt"
|
|
||||||
},
|
|
||||||
"hagezi_pro++": {
|
|
||||||
"name": "HaGeZi's Pro++ Blocklist",
|
|
||||||
"categoryId": "general",
|
|
||||||
"homepage": "https://github.com/hagezi/dns-blocklists",
|
|
||||||
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_51.txt"
|
|
||||||
},
|
|
||||||
"hagezi_threat_intelligence_feeds": {
|
"hagezi_threat_intelligence_feeds": {
|
||||||
"name": "HaGeZi's Threat Intelligence Feeds",
|
"name": "HaGeZi's Threat Intelligence Feeds",
|
||||||
"categoryId": "security",
|
"categoryId": "security",
|
||||||
"homepage": "https://github.com/hagezi/dns-blocklists",
|
"homepage": "https://github.com/hagezi/dns-blocklists",
|
||||||
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_44.txt"
|
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_44.txt"
|
||||||
},
|
},
|
||||||
"hagezi_ultimate": {
|
|
||||||
"name": "HaGeZi's Ultimate Blocklist",
|
|
||||||
"categoryId": "general",
|
|
||||||
"homepage": "https://github.com/hagezi/dns-blocklists",
|
|
||||||
"source": "https://adguardteam.github.io/HostlistsRegistry/assets/filter_49.txt"
|
|
||||||
},
|
|
||||||
"no_google": {
|
"no_google": {
|
||||||
"name": "No Google",
|
"name": "No Google",
|
||||||
"categoryId": "other",
|
"categoryId": "other",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"timeUpdated": "2023-11-10T12:55:56.663Z",
|
"timeUpdated": "2023-10-15T12:13:01.838Z",
|
||||||
"categories": {
|
"categories": {
|
||||||
"0": "audio_video_player",
|
"0": "audio_video_player",
|
||||||
"1": "comments",
|
"1": "comments",
|
||||||
@@ -681,9 +681,8 @@
|
|||||||
"adcolony": {
|
"adcolony": {
|
||||||
"name": "AdColony",
|
"name": "AdColony",
|
||||||
"categoryId": 4,
|
"categoryId": 4,
|
||||||
"url": "https://www.adcolony.com/history-of-adcolony/",
|
"url": "thttp://www.admarvel.com/",
|
||||||
"companyId": "digital_turbine",
|
"companyId": "adcolony"
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
},
|
||||||
"adconion": {
|
"adconion": {
|
||||||
"name": "Adconion",
|
"name": "Adconion",
|
||||||
@@ -1295,13 +1294,6 @@
|
|||||||
"url": "http://www.demdex.com/",
|
"url": "http://www.demdex.com/",
|
||||||
"companyId": "adobe"
|
"companyId": "adobe"
|
||||||
},
|
},
|
||||||
"adobe_developer": {
|
|
||||||
"name": "Adobe Developer",
|
|
||||||
"categoryId": 8,
|
|
||||||
"url": "https://developer.adobe.com/",
|
|
||||||
"companyId": "adobe",
|
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
|
||||||
"adobe_dynamic_media": {
|
"adobe_dynamic_media": {
|
||||||
"name": "Adobe Dynamic Media",
|
"name": "Adobe Dynamic Media",
|
||||||
"categoryId": 4,
|
"categoryId": 4,
|
||||||
@@ -1317,9 +1309,8 @@
|
|||||||
"adobe_experience_cloud": {
|
"adobe_experience_cloud": {
|
||||||
"name": "Adobe Experience Cloud",
|
"name": "Adobe Experience Cloud",
|
||||||
"categoryId": 6,
|
"categoryId": 6,
|
||||||
"url": "https://business.adobe.com/",
|
"url": "https://www.adobe.com/experience-cloud.html",
|
||||||
"companyId": "adobe",
|
"companyId": "adobe"
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
},
|
||||||
"adobe_login": {
|
"adobe_login": {
|
||||||
"name": "Adobe Login",
|
"name": "Adobe Login",
|
||||||
@@ -4362,13 +4353,6 @@
|
|||||||
"url": "http://chartbeat.com/",
|
"url": "http://chartbeat.com/",
|
||||||
"companyId": "chartbeat"
|
"companyId": "chartbeat"
|
||||||
},
|
},
|
||||||
"chartboost": {
|
|
||||||
"name": "Chartboost",
|
|
||||||
"categoryId": 4,
|
|
||||||
"url": "http://chartboost.com/",
|
|
||||||
"companyId": "take-two",
|
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
|
||||||
"chaser": {
|
"chaser": {
|
||||||
"name": "Chaser",
|
"name": "Chaser",
|
||||||
"categoryId": 2,
|
"categoryId": 2,
|
||||||
@@ -7346,7 +7330,7 @@
|
|||||||
"name": "Flurry",
|
"name": "Flurry",
|
||||||
"categoryId": 101,
|
"categoryId": 101,
|
||||||
"url": "http://www.flurry.com/",
|
"url": "http://www.flurry.com/",
|
||||||
"companyId": "apollo_global_management",
|
"companyId": "verizon",
|
||||||
"source": "AdGuard"
|
"source": "AdGuard"
|
||||||
},
|
},
|
||||||
"flxone": {
|
"flxone": {
|
||||||
@@ -12402,13 +12386,6 @@
|
|||||||
"url": "http://www.nimblecommerce.com/",
|
"url": "http://www.nimblecommerce.com/",
|
||||||
"companyId": "nimblecommerce"
|
"companyId": "nimblecommerce"
|
||||||
},
|
},
|
||||||
"nine_direct_digital": {
|
|
||||||
"name": "Nine Digital Direct",
|
|
||||||
"categoryId": 4,
|
|
||||||
"url": "https://ninedigitaldirect.com.au/",
|
|
||||||
"companyId": "nine_entertainment",
|
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
|
||||||
"ninja_access_analysis": {
|
"ninja_access_analysis": {
|
||||||
"name": "Ninja Access Analysis",
|
"name": "Ninja Access Analysis",
|
||||||
"categoryId": 6,
|
"categoryId": 6,
|
||||||
@@ -19569,9 +19546,8 @@
|
|||||||
"yahoo": {
|
"yahoo": {
|
||||||
"name": "Yahoo!",
|
"name": "Yahoo!",
|
||||||
"categoryId": 6,
|
"categoryId": 6,
|
||||||
"url": "https://yahoo.com/",
|
"url": "https://yahoo.com",
|
||||||
"companyId": "apollo_global_management",
|
"companyId": "verizon"
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
},
|
||||||
"yahoo_ad_exchange": {
|
"yahoo_ad_exchange": {
|
||||||
"name": "Yahoo! Ad Exchange",
|
"name": "Yahoo! Ad Exchange",
|
||||||
@@ -19585,13 +19561,6 @@
|
|||||||
"url": "https://developer.yahoo.com/analytics/",
|
"url": "https://developer.yahoo.com/analytics/",
|
||||||
"companyId": "verizon"
|
"companyId": "verizon"
|
||||||
},
|
},
|
||||||
"yahoo_advertising": {
|
|
||||||
"name": "Yahoo! Advertising",
|
|
||||||
"categoryId": 4,
|
|
||||||
"url": "https://www.advertising.yahooinc.com/",
|
|
||||||
"companyId": "apollo_global_management",
|
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
|
||||||
"yahoo_analytics": {
|
"yahoo_analytics": {
|
||||||
"name": "Yahoo! Analytics",
|
"name": "Yahoo! Analytics",
|
||||||
"categoryId": 6,
|
"categoryId": 6,
|
||||||
@@ -19622,13 +19591,6 @@
|
|||||||
"url": "http://searchmarketing.yahoo.com",
|
"url": "http://searchmarketing.yahoo.com",
|
||||||
"companyId": "verizon"
|
"companyId": "verizon"
|
||||||
},
|
},
|
||||||
"yahoo_search": {
|
|
||||||
"name": "Yahoo! Search",
|
|
||||||
"categoryId": 4,
|
|
||||||
"url": "https://search.yahooinc.com/",
|
|
||||||
"companyId": "apollo_global_management",
|
|
||||||
"source": "AdGuard"
|
|
||||||
},
|
|
||||||
"yahoo_small_business": {
|
"yahoo_small_business": {
|
||||||
"name": "Yahoo! Small Business",
|
"name": "Yahoo! Small Business",
|
||||||
"categoryId": 4,
|
"categoryId": 4,
|
||||||
@@ -20266,7 +20228,6 @@
|
|||||||
"ad-cloud.jp": "adcloud",
|
"ad-cloud.jp": "adcloud",
|
||||||
"admarvel.s3.amazonaws.com": "adcolony",
|
"admarvel.s3.amazonaws.com": "adcolony",
|
||||||
"ads.admarvel.com": "adcolony",
|
"ads.admarvel.com": "adcolony",
|
||||||
"adcolony.com": "adcolony",
|
|
||||||
"adrdgt.com": "adconion",
|
"adrdgt.com": "adconion",
|
||||||
"amgdgt.com": "adconion",
|
"amgdgt.com": "adconion",
|
||||||
"adcrowd.com": "adcrowd",
|
"adcrowd.com": "adcrowd",
|
||||||
@@ -20421,7 +20382,6 @@
|
|||||||
"demdex.net": "adobe_audience_manager",
|
"demdex.net": "adobe_audience_manager",
|
||||||
"everestjs.net": "adobe_audience_manager",
|
"everestjs.net": "adobe_audience_manager",
|
||||||
"everesttech.net": "adobe_audience_manager",
|
"everesttech.net": "adobe_audience_manager",
|
||||||
"adobe.io": "adobe_developer",
|
|
||||||
"scene7.com": "adobe_dynamic_media",
|
"scene7.com": "adobe_dynamic_media",
|
||||||
"adobedtm.com": "adobe_dynamic_tag_management",
|
"adobedtm.com": "adobe_dynamic_tag_management",
|
||||||
"2o7.net": "adobe_experience_cloud",
|
"2o7.net": "adobe_experience_cloud",
|
||||||
@@ -20694,10 +20654,8 @@
|
|||||||
"a2z.com": "amazon",
|
"a2z.com": "amazon",
|
||||||
"aamazoncognito.com": "amazon",
|
"aamazoncognito.com": "amazon",
|
||||||
"amazon-corp.com": "amazon",
|
"amazon-corp.com": "amazon",
|
||||||
"amazon-dss.com": "amazon",
|
|
||||||
"amazon.com.au": "amazon",
|
"amazon.com.au": "amazon",
|
||||||
"amazon.com.mx": "amazon",
|
"amazon.com.mx": "amazon",
|
||||||
"amazon.dev": "amazon",
|
|
||||||
"amazon.in": "amazon",
|
"amazon.in": "amazon",
|
||||||
"amazon.nl": "amazon",
|
"amazon.nl": "amazon",
|
||||||
"amazon.sa": "amazon",
|
"amazon.sa": "amazon",
|
||||||
@@ -20705,7 +20663,6 @@
|
|||||||
"amazonbrowserapp.es": "amazon",
|
"amazonbrowserapp.es": "amazon",
|
||||||
"amazoncrl.com": "amazon",
|
"amazoncrl.com": "amazon",
|
||||||
"firetvcaptiveportal.com": "amazon",
|
"firetvcaptiveportal.com": "amazon",
|
||||||
"ntp-fireos.com": "amazon",
|
|
||||||
"amazon-adsystem.com": "amazon_adsystem",
|
"amazon-adsystem.com": "amazon_adsystem",
|
||||||
"serving-sys.com": "amazon_adsystem",
|
"serving-sys.com": "amazon_adsystem",
|
||||||
"sizmek.com": "amazon_adsystem",
|
"sizmek.com": "amazon_adsystem",
|
||||||
@@ -20721,16 +20678,12 @@
|
|||||||
"amazontrust.com": "amazon_cdn",
|
"amazontrust.com": "amazon_cdn",
|
||||||
"associates-amazon.com": "amazon_cdn",
|
"associates-amazon.com": "amazon_cdn",
|
||||||
"cloudfront.net": "amazon_cloudfront",
|
"cloudfront.net": "amazon_cloudfront",
|
||||||
"ota-cloudfront.net": "amazon_cloudfront",
|
|
||||||
"axx-eu.amazon-adsystem.com": "amazon_mobile_ads",
|
"axx-eu.amazon-adsystem.com": "amazon_mobile_ads",
|
||||||
"amazonpay.com": "amazon_payments",
|
"amazonpay.com": "amazon_payments",
|
||||||
"payments-amazon.com": "amazon_payments",
|
"payments-amazon.com": "amazon_payments",
|
||||||
"amazonpay.in": "amazon_payments",
|
"amazonpay.in": "amazon_payments",
|
||||||
"aiv-cdn.net": "amazon_video",
|
"aiv-cdn.net": "amazon_video",
|
||||||
"aiv-delivery.net": "amazon_video",
|
|
||||||
"amazonvideo.com": "amazon_video",
|
"amazonvideo.com": "amazon_video",
|
||||||
"pv-cdn.net": "amazon_video",
|
|
||||||
"primevideo.com": "amazon_video",
|
|
||||||
"amazonaws.com": "amazon_web_services",
|
"amazonaws.com": "amazon_web_services",
|
||||||
"amazonwebservices.com": "amazon_web_services",
|
"amazonwebservices.com": "amazon_web_services",
|
||||||
"awsstatic.com": "amazon_web_services",
|
"awsstatic.com": "amazon_web_services",
|
||||||
@@ -20877,8 +20830,6 @@
|
|||||||
"ad.globe7.com": "axill",
|
"ad.globe7.com": "axill",
|
||||||
"azadify.com": "azadify",
|
"azadify.com": "azadify",
|
||||||
"azure.com": "azure",
|
"azure.com": "azure",
|
||||||
"azure.net": "azure",
|
|
||||||
"azurefd.net": "azure",
|
|
||||||
"trafficmanager.net": "azure",
|
"trafficmanager.net": "azure",
|
||||||
"blob.core.windows.net": "azure_blob_storage",
|
"blob.core.windows.net": "azure_blob_storage",
|
||||||
"azureedge.net": "azureedge.net",
|
"azureedge.net": "azureedge.net",
|
||||||
@@ -21169,7 +21120,6 @@
|
|||||||
"chaordicsystems.com": "chaordic",
|
"chaordicsystems.com": "chaordic",
|
||||||
"chartbeat.com": "chartbeat",
|
"chartbeat.com": "chartbeat",
|
||||||
"chartbeat.net": "chartbeat",
|
"chartbeat.net": "chartbeat",
|
||||||
"chartboost.com": "chartboost",
|
|
||||||
"chaser.ru": "chaser",
|
"chaser.ru": "chaser",
|
||||||
"cloud.chatbeacon.io": "chat_beacon",
|
"cloud.chatbeacon.io": "chat_beacon",
|
||||||
"chatango.com": "chatango",
|
"chatango.com": "chatango",
|
||||||
@@ -21979,9 +21929,7 @@
|
|||||||
"githubassets.com": "github",
|
"githubassets.com": "github",
|
||||||
"githubusercontent.com": "github",
|
"githubusercontent.com": "github",
|
||||||
"ghcr.io": "github",
|
"ghcr.io": "github",
|
||||||
"github.blog": "github",
|
|
||||||
"github.dev": "github",
|
"github.dev": "github",
|
||||||
"octocaptcha.com": "github",
|
|
||||||
"githubapp.com": "github_apps",
|
"githubapp.com": "github_apps",
|
||||||
"github.io": "github_pages",
|
"github.io": "github_pages",
|
||||||
"aff3.gittigidiyor.com": "gittigidiyor_affiliate_program",
|
"aff3.gittigidiyor.com": "gittigidiyor_affiliate_program",
|
||||||
@@ -23140,13 +23088,7 @@
|
|||||||
"s-microsoft.com": "microsoft",
|
"s-microsoft.com": "microsoft",
|
||||||
"trouter.io": "microsoft",
|
"trouter.io": "microsoft",
|
||||||
"windows.net": "microsoft",
|
"windows.net": "microsoft",
|
||||||
"bingapis.com": "microsoft",
|
|
||||||
"msauth.net": "microsoft",
|
|
||||||
"msftauth.net": "microsoft",
|
|
||||||
"msftstatic.com": "microsoft",
|
|
||||||
"msidentity.com": "microsoft",
|
"msidentity.com": "microsoft",
|
||||||
"nelreports.net": "microsoft",
|
|
||||||
"windowscentral.com": "microsoft",
|
|
||||||
"analytics.live.com": "microsoft_analytics",
|
"analytics.live.com": "microsoft_analytics",
|
||||||
"a.clarity.ms": "microsoft_clarity",
|
"a.clarity.ms": "microsoft_clarity",
|
||||||
"b.clarity.ms": "microsoft_clarity",
|
"b.clarity.ms": "microsoft_clarity",
|
||||||
@@ -23231,7 +23173,6 @@
|
|||||||
"mrpdata.com": "mrpdata",
|
"mrpdata.com": "mrpdata",
|
||||||
"mrpdata.net": "mrpdata",
|
"mrpdata.net": "mrpdata",
|
||||||
"mrskincash.com": "mrskincash",
|
"mrskincash.com": "mrskincash",
|
||||||
"a-msedge.net": "msedge",
|
|
||||||
"e-msedge.net": "msedge",
|
"e-msedge.net": "msedge",
|
||||||
"l-msedge.net": "msedge",
|
"l-msedge.net": "msedge",
|
||||||
"s-msedge.net": "msedge",
|
"s-msedge.net": "msedge",
|
||||||
@@ -23353,7 +23294,6 @@
|
|||||||
"ads.ngageinc.com": "ngage_inc.",
|
"ads.ngageinc.com": "ngage_inc.",
|
||||||
"nice264.com": "nice264.com",
|
"nice264.com": "nice264.com",
|
||||||
"nimblecommerce.com": "nimblecommerce",
|
"nimblecommerce.com": "nimblecommerce",
|
||||||
"nineanalytics.io": "nine_direct_digital",
|
|
||||||
"cho-chin.com": "ninja_access_analysis",
|
"cho-chin.com": "ninja_access_analysis",
|
||||||
"donburako.com": "ninja_access_analysis",
|
"donburako.com": "ninja_access_analysis",
|
||||||
"hishaku.com": "ninja_access_analysis",
|
"hishaku.com": "ninja_access_analysis",
|
||||||
@@ -25007,15 +24947,10 @@
|
|||||||
"yahoo.com": "yahoo",
|
"yahoo.com": "yahoo",
|
||||||
"yahooapis.com": "yahoo",
|
"yahooapis.com": "yahoo",
|
||||||
"yimg.com": "yahoo",
|
"yimg.com": "yahoo",
|
||||||
"oath.cloud": "yahoo",
|
"ads.yahoo.com": "yahoo_ad_exchange",
|
||||||
"yahoo.net": "yahoo",
|
|
||||||
"yahooinc.com": "yahoo",
|
|
||||||
"yahoodns.net": "yahoo",
|
|
||||||
"yads.yahoo.com": "yahoo_ad_exchange",
|
"yads.yahoo.com": "yahoo_ad_exchange",
|
||||||
"yieldmanager.com": "yahoo_ad_exchange",
|
"yieldmanager.com": "yahoo_ad_exchange",
|
||||||
"pr-bh.ybp.yahoo.com": "yahoo_ad_manager",
|
"pr-bh.ybp.yahoo.com": "yahoo_ad_manager",
|
||||||
"ads.yahoo.com": "yahoo_advertising",
|
|
||||||
"adtech.yahooinc.com": "yahoo_advertising",
|
|
||||||
"analytics.yahoo.com": "yahoo_analytics",
|
"analytics.yahoo.com": "yahoo_analytics",
|
||||||
"np.lexity.com": "yahoo_commerce_central",
|
"np.lexity.com": "yahoo_commerce_central",
|
||||||
"storage-yahoo.jp": "yahoo_japan_retargeting",
|
"storage-yahoo.jp": "yahoo_japan_retargeting",
|
||||||
@@ -25025,7 +24960,6 @@
|
|||||||
"yjtag.jp": "yahoo_japan_retargeting",
|
"yjtag.jp": "yahoo_japan_retargeting",
|
||||||
"ov.yahoo.co.jp": "yahoo_overture",
|
"ov.yahoo.co.jp": "yahoo_overture",
|
||||||
"overture.com": "yahoo_overture",
|
"overture.com": "yahoo_overture",
|
||||||
"search.yahooinc.com": "yahoo_search",
|
|
||||||
"luminate.com": "yahoo_small_business",
|
"luminate.com": "yahoo_small_business",
|
||||||
"pixazza.com": "yahoo_small_business",
|
"pixazza.com": "yahoo_small_business",
|
||||||
"awaps.yandex.ru": "yandex",
|
"awaps.yandex.ru": "yandex",
|
||||||
|
|||||||
32
go.mod
32
go.mod
@@ -3,7 +3,7 @@ module github.com/AdguardTeam/AdGuardHome
|
|||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/AdguardTeam/dnsproxy v0.57.3
|
github.com/AdguardTeam/dnsproxy v0.56.3
|
||||||
github.com/AdguardTeam/golibs v0.17.2
|
github.com/AdguardTeam/golibs v0.17.2
|
||||||
github.com/AdguardTeam/urlfilter v0.17.3
|
github.com/AdguardTeam/urlfilter v0.17.3
|
||||||
github.com/NYTimes/gziphandler v1.1.1
|
github.com/NYTimes/gziphandler v1.1.1
|
||||||
@@ -11,12 +11,12 @@ require (
|
|||||||
github.com/bluele/gcache v0.0.2
|
github.com/bluele/gcache v0.0.2
|
||||||
github.com/digineo/go-ipset/v2 v2.2.1
|
github.com/digineo/go-ipset/v2 v2.2.1
|
||||||
github.com/dimfeld/httptreemux/v5 v5.5.0
|
github.com/dimfeld/httptreemux/v5 v5.5.0
|
||||||
github.com/fsnotify/fsnotify v1.7.0
|
github.com/fsnotify/fsnotify v1.6.0
|
||||||
github.com/go-ping/ping v1.1.0
|
github.com/go-ping/ping v1.1.0
|
||||||
github.com/google/go-cmp v0.6.0
|
github.com/google/go-cmp v0.6.0
|
||||||
github.com/google/gopacket v1.1.19
|
github.com/google/gopacket v1.1.19
|
||||||
github.com/google/renameio/v2 v2.0.0
|
github.com/google/renameio/v2 v2.0.0
|
||||||
github.com/google/uuid v1.4.0
|
github.com/google/uuid v1.3.1
|
||||||
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c
|
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c
|
||||||
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86
|
github.com/josharian/native v1.1.1-0.20230202152459-5c7d0dd6ab86
|
||||||
github.com/kardianos/service v1.2.2
|
github.com/kardianos/service v1.2.2
|
||||||
@@ -27,14 +27,14 @@ require (
|
|||||||
// own code for that. Perhaps, use gopacket.
|
// own code for that. Perhaps, use gopacket.
|
||||||
github.com/mdlayher/raw v0.1.0
|
github.com/mdlayher/raw v0.1.0
|
||||||
github.com/miekg/dns v1.1.56
|
github.com/miekg/dns v1.1.56
|
||||||
github.com/quic-go/quic-go v0.40.0
|
github.com/quic-go/quic-go v0.39.2
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
github.com/ti-mo/netfilter v0.5.1
|
github.com/ti-mo/netfilter v0.5.1
|
||||||
go.etcd.io/bbolt v1.3.8
|
go.etcd.io/bbolt v1.3.7
|
||||||
golang.org/x/crypto v0.15.0
|
golang.org/x/crypto v0.14.0
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
|
||||||
golang.org/x/net v0.18.0
|
golang.org/x/net v0.17.0
|
||||||
golang.org/x/sys v0.14.0
|
golang.org/x/sys v0.13.0
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
howett.net/plist v1.0.0
|
howett.net/plist v1.0.0
|
||||||
@@ -47,19 +47,19 @@ require (
|
|||||||
github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 // indirect
|
github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
||||||
github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a // indirect
|
github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 // indirect
|
||||||
github.com/mdlayher/socket v0.5.0 // indirect
|
github.com/mdlayher/socket v0.5.0 // indirect
|
||||||
github.com/onsi/ginkgo/v2 v2.13.1 // indirect
|
github.com/onsi/ginkgo/v2 v2.13.0 // indirect
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
|
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
|
||||||
github.com/pierrec/lz4/v4 v4.1.18 // indirect
|
github.com/pierrec/lz4/v4 v4.1.18 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/quic-go/qpack v0.4.0 // indirect
|
github.com/quic-go/qpack v0.4.0 // indirect
|
||||||
github.com/quic-go/qtls-go1-20 v0.4.1 // indirect
|
github.com/quic-go/qtls-go1-20 v0.3.4 // indirect
|
||||||
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 // indirect
|
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 // indirect
|
||||||
go.uber.org/mock v0.3.0 // indirect
|
go.uber.org/mock v0.3.0 // indirect
|
||||||
golang.org/x/mod v0.14.0 // indirect
|
golang.org/x/mod v0.13.0 // indirect
|
||||||
golang.org/x/sync v0.5.0 // indirect
|
golang.org/x/sync v0.4.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.13.0 // indirect
|
||||||
golang.org/x/tools v0.15.0 // indirect
|
golang.org/x/tools v0.14.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
69
go.sum
69
go.sum
@@ -1,5 +1,5 @@
|
|||||||
github.com/AdguardTeam/dnsproxy v0.57.3 h1:0v7D+LQrOL2k2fvkG3Ft3Cn3ayUsvAdlOlJR+gLxSGA=
|
github.com/AdguardTeam/dnsproxy v0.56.3 h1:WP1FooLfZQPHEH2SuwMtJsOurDt32rubGx0OddcsKT0=
|
||||||
github.com/AdguardTeam/dnsproxy v0.57.3/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM=
|
github.com/AdguardTeam/dnsproxy v0.56.3/go.mod h1:ZvkbM71HwpilgkCnTubDiR4Ba6x5Qvnhy2iasMWaTDM=
|
||||||
github.com/AdguardTeam/golibs v0.17.2 h1:vg6wHMjUKscnyPGRvxS5kAt7Uw4YxcJiITZliZ476W8=
|
github.com/AdguardTeam/golibs v0.17.2 h1:vg6wHMjUKscnyPGRvxS5kAt7Uw4YxcJiITZliZ476W8=
|
||||||
github.com/AdguardTeam/golibs v0.17.2/go.mod h1:DKhCIXHcUYtBhU8ibTLKh1paUL96n5zhQBlx763sj+U=
|
github.com/AdguardTeam/golibs v0.17.2/go.mod h1:DKhCIXHcUYtBhU8ibTLKh1paUL96n5zhQBlx763sj+U=
|
||||||
github.com/AdguardTeam/urlfilter v0.17.3 h1:fg/ObbnO0Cv6aw0tW6N/ETDMhhNvmcUUOZ7HlmKC3rw=
|
github.com/AdguardTeam/urlfilter v0.17.3 h1:fg/ObbnO0Cv6aw0tW6N/ETDMhhNvmcUUOZ7HlmKC3rw=
|
||||||
@@ -25,9 +25,9 @@ github.com/digineo/go-ipset/v2 v2.2.1 h1:k6skY+0fMqeUjjeWO/m5OuWPSZUAn7AucHMnQ1M
|
|||||||
github.com/digineo/go-ipset/v2 v2.2.1/go.mod h1:wBsNzJlZlABHUITkesrggFnZQtgW5wkqw1uo8Qxe0VU=
|
github.com/digineo/go-ipset/v2 v2.2.1/go.mod h1:wBsNzJlZlABHUITkesrggFnZQtgW5wkqw1uo8Qxe0VU=
|
||||||
github.com/dimfeld/httptreemux/v5 v5.5.0 h1:p8jkiMrCuZ0CmhwYLcbNbl7DDo21fozhKHQ2PccwOFQ=
|
github.com/dimfeld/httptreemux/v5 v5.5.0 h1:p8jkiMrCuZ0CmhwYLcbNbl7DDo21fozhKHQ2PccwOFQ=
|
||||||
github.com/dimfeld/httptreemux/v5 v5.5.0/go.mod h1:QeEylH57C0v3VO0tkKraVz9oD3Uu93CKPnTLbsidvSw=
|
github.com/dimfeld/httptreemux/v5 v5.5.0/go.mod h1:QeEylH57C0v3VO0tkKraVz9oD3Uu93CKPnTLbsidvSw=
|
||||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
||||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||||
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
|
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
|
||||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||||
github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
|
github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw=
|
||||||
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
|
github.com/go-ping/ping v1.1.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk=
|
||||||
@@ -41,13 +41,13 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
|
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
|
||||||
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
|
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
|
||||||
github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk=
|
github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ=
|
||||||
github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
|
github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
|
||||||
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
|
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
|
||||||
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
|
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
|
||||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
|
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||||
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8=
|
github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8=
|
||||||
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c h1:PgxFEySCI41sH0mB7/2XswdXbUykQsRUGod8Rn+NubM=
|
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c h1:PgxFEySCI41sH0mB7/2XswdXbUykQsRUGod8Rn+NubM=
|
||||||
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c/go.mod h1:3A9PQ1cunSDF/1rbTq99Ts4pVnycWg+vlPkfeD2NLFI=
|
github.com/insomniacslk/dhcp v0.0.0-20231016090811-6a2c8fbdcc1c/go.mod h1:3A9PQ1cunSDF/1rbTq99Ts4pVnycWg+vlPkfeD2NLFI=
|
||||||
@@ -76,9 +76,9 @@ github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrG
|
|||||||
github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
|
github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
|
||||||
github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
|
github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||||
github.com/onsi/ginkgo/v2 v2.13.1 h1:LNGfMbR2OVGBfXjvRZIZ2YCTQdGKtPLvuI1rMCCj3OU=
|
github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
|
||||||
github.com/onsi/ginkgo/v2 v2.13.1/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM=
|
github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
|
||||||
github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
|
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
||||||
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
@@ -92,10 +92,10 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
|
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
|
||||||
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
||||||
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
||||||
github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs=
|
github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg=
|
||||||
github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
|
github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k=
|
||||||
github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw=
|
github.com/quic-go/quic-go v0.39.2 h1:hmwAf8zAHlvan0Y5PXxeeBFZEW17IW99sXLry8I2kjk=
|
||||||
github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c=
|
github.com/quic-go/quic-go v0.39.2/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q=
|
||||||
github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4=
|
github.com/shirou/gopsutil/v3 v3.23.7 h1:C+fHO8hfIppoJ1WdsVm1RoI0RwXoNdfTK7yWXV0wVj4=
|
||||||
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
@@ -112,32 +112,32 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm
|
|||||||
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 h1:YcojQL98T/OO+rybuzn2+5KrD5dBwXIvYBvQ2cD3Avg=
|
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 h1:YcojQL98T/OO+rybuzn2+5KrD5dBwXIvYBvQ2cD3Avg=
|
||||||
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264=
|
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63/go.mod h1:eLL9Nub3yfAho7qB0MzZizFhTU2QkLeoVsWdHtDW264=
|
||||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||||
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
|
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
|
||||||
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
|
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
|
||||||
go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
|
go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
|
||||||
go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
|
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
||||||
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
|
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
|
||||||
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
|
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
|
||||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
|
||||||
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||||
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||||
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
|
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
|
||||||
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -148,18 +148,19 @@ golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.4.1-0.20230131160137-e7d7f63158de/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
|
golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
|
||||||
golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
|
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||||
|
|||||||
@@ -7,16 +7,11 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/AdguardTeam/AdGuardHome/internal/confmigrate"
|
"github.com/AdguardTeam/AdGuardHome/internal/confmigrate"
|
||||||
"github.com/AdguardTeam/golibs/testutil"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
yaml "gopkg.in/yaml.v3"
|
yaml "gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
|
||||||
testutil.DiscardLogOutput(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
// testdata is a virtual filesystem containing test data.
|
// testdata is a virtual filesystem containing test data.
|
||||||
var testdata = os.DirFS("testdata")
|
var testdata = os.DirFS("testdata")
|
||||||
|
|
||||||
|
|||||||
@@ -46,14 +46,6 @@ type Config struct {
|
|||||||
// (0 to disable).
|
// (0 to disable).
|
||||||
Ratelimit uint32 `yaml:"ratelimit"`
|
Ratelimit uint32 `yaml:"ratelimit"`
|
||||||
|
|
||||||
// RatelimitSubnetLenIPv4 is a subnet length for IPv4 addresses used for
|
|
||||||
// rate limiting requests.
|
|
||||||
RatelimitSubnetLenIPv4 int `yaml:"ratelimit_subnet_len_ipv4"`
|
|
||||||
|
|
||||||
// RatelimitSubnetLenIPv6 is a subnet length for IPv6 addresses used for
|
|
||||||
// rate limiting requests.
|
|
||||||
RatelimitSubnetLenIPv6 int `yaml:"ratelimit_subnet_len_ipv6"`
|
|
||||||
|
|
||||||
// RatelimitWhitelist is the list of whitelisted client IP addresses.
|
// RatelimitWhitelist is the list of whitelisted client IP addresses.
|
||||||
RatelimitWhitelist []string `yaml:"ratelimit_whitelist"`
|
RatelimitWhitelist []string `yaml:"ratelimit_whitelist"`
|
||||||
|
|
||||||
@@ -283,26 +275,24 @@ type ServerConfig struct {
|
|||||||
func (s *Server) createProxyConfig() (conf proxy.Config, err error) {
|
func (s *Server) createProxyConfig() (conf proxy.Config, err error) {
|
||||||
srvConf := s.conf
|
srvConf := s.conf
|
||||||
conf = proxy.Config{
|
conf = proxy.Config{
|
||||||
UDPListenAddr: srvConf.UDPListenAddrs,
|
UDPListenAddr: srvConf.UDPListenAddrs,
|
||||||
TCPListenAddr: srvConf.TCPListenAddrs,
|
TCPListenAddr: srvConf.TCPListenAddrs,
|
||||||
HTTP3: srvConf.ServeHTTP3,
|
HTTP3: srvConf.ServeHTTP3,
|
||||||
Ratelimit: int(srvConf.Ratelimit),
|
Ratelimit: int(srvConf.Ratelimit),
|
||||||
RatelimitSubnetMaskIPv4: net.CIDRMask(srvConf.RatelimitSubnetLenIPv4, netutil.IPv4BitLen),
|
RatelimitWhitelist: srvConf.RatelimitWhitelist,
|
||||||
RatelimitSubnetMaskIPv6: net.CIDRMask(srvConf.RatelimitSubnetLenIPv6, netutil.IPv6BitLen),
|
RefuseAny: srvConf.RefuseAny,
|
||||||
RatelimitWhitelist: srvConf.RatelimitWhitelist,
|
TrustedProxies: srvConf.TrustedProxies,
|
||||||
RefuseAny: srvConf.RefuseAny,
|
CacheMinTTL: srvConf.CacheMinTTL,
|
||||||
TrustedProxies: srvConf.TrustedProxies,
|
CacheMaxTTL: srvConf.CacheMaxTTL,
|
||||||
CacheMinTTL: srvConf.CacheMinTTL,
|
CacheOptimistic: srvConf.CacheOptimistic,
|
||||||
CacheMaxTTL: srvConf.CacheMaxTTL,
|
UpstreamConfig: srvConf.UpstreamConfig,
|
||||||
CacheOptimistic: srvConf.CacheOptimistic,
|
BeforeRequestHandler: s.beforeRequestHandler,
|
||||||
UpstreamConfig: srvConf.UpstreamConfig,
|
RequestHandler: s.handleDNSRequest,
|
||||||
BeforeRequestHandler: s.beforeRequestHandler,
|
HTTPSServerName: aghhttp.UserAgent(),
|
||||||
RequestHandler: s.handleDNSRequest,
|
EnableEDNSClientSubnet: srvConf.EDNSClientSubnet.Enabled,
|
||||||
HTTPSServerName: aghhttp.UserAgent(),
|
MaxGoroutines: int(srvConf.MaxGoroutines),
|
||||||
EnableEDNSClientSubnet: srvConf.EDNSClientSubnet.Enabled,
|
UseDNS64: srvConf.UseDNS64,
|
||||||
MaxGoroutines: int(srvConf.MaxGoroutines),
|
DNS64Prefs: srvConf.DNS64Prefixes,
|
||||||
UseDNS64: srvConf.UseDNS64,
|
|
||||||
DNS64Prefs: srvConf.DNS64Prefixes,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if srvConf.EDNSClientSubnet.UseCustom {
|
if srvConf.EDNSClientSubnet.UseCustom {
|
||||||
|
|||||||
@@ -354,8 +354,9 @@ func (s *Server) Exchange(ip netip.Addr) (host string, ttl time.Duration, err er
|
|||||||
}
|
}
|
||||||
|
|
||||||
dctx := &proxy.DNSContext{
|
dctx := &proxy.DNSContext{
|
||||||
Proto: "udp",
|
Proto: "udp",
|
||||||
Req: req,
|
Req: req,
|
||||||
|
StartTime: time.Now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
var resolver *proxy.Proxy
|
var resolver *proxy.Proxy
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"net/netip"
|
"net/netip"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/AdguardTeam/AdGuardHome/internal/aghhttp"
|
"github.com/AdguardTeam/AdGuardHome/internal/aghhttp"
|
||||||
@@ -483,7 +484,7 @@ func validateUpstreamConfig(conf []string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, addr := range ups {
|
for _, addr := range ups {
|
||||||
_, err = validateUpstream(addr, domains)
|
_, err = validateUpstream(addr, len(domains) > 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("validating upstream %q: %w", addr, err)
|
return fmt.Errorf("validating upstream %q: %w", addr, err)
|
||||||
}
|
}
|
||||||
@@ -552,14 +553,14 @@ var protocols = []string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// validateUpstream returns an error if u alongside with domains is not a valid
|
// validateUpstream returns an error if u alongside with domains is not a valid
|
||||||
// upstream configuration. useDefault is true if the upstream is
|
// upstream configuration. usesDefault is true if the upstream is
|
||||||
// domain-specific and is configured to point at the default upstream server
|
// domain-specific and is configured to point at the default upstream server
|
||||||
// which is validated separately. The upstream is considered domain-specific
|
// which is validated separately. specific reflects if the upstream is
|
||||||
// only if domains is at least not nil.
|
// domain-specific.
|
||||||
func validateUpstream(u string, domains []string) (useDefault bool, err error) {
|
func validateUpstream(u string, specific bool) (usesDefault bool, err error) {
|
||||||
// The special server address '#' means that default server must be used.
|
// The special server address '#' means that default server must be used.
|
||||||
if useDefault = u == "#" && domains != nil; useDefault {
|
if u == "#" && specific {
|
||||||
return useDefault, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the upstream has a valid protocol prefix.
|
// Check if the upstream has a valid protocol prefix.
|
||||||
@@ -625,8 +626,9 @@ func separateUpstream(upstreamStr string) (upstreams, domains []string, err erro
|
|||||||
// properly.
|
// properly.
|
||||||
type healthCheckFunc func(u upstream.Upstream) (err error)
|
type healthCheckFunc func(u upstream.Upstream) (err error)
|
||||||
|
|
||||||
// checkDNSUpstreamExc checks if the DNS upstream exchanges correctly.
|
// checkExchange is a [healthCheckFunc] that checks if the DNS upstream
|
||||||
func checkDNSUpstreamExc(u upstream.Upstream) (err error) {
|
// exchanges correctly.
|
||||||
|
func checkExchange(u upstream.Upstream) (err error) {
|
||||||
// testTLD is the special-use fully-qualified domain name for testing the
|
// testTLD is the special-use fully-qualified domain name for testing the
|
||||||
// DNS server reachability.
|
// DNS server reachability.
|
||||||
//
|
//
|
||||||
@@ -656,11 +658,11 @@ func checkDNSUpstreamExc(u upstream.Upstream) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkPrivateUpstreamExc checks if the upstream for resolving private
|
// checkPrivateExchange is a [healthCheckFunc] that checks if the upstream for
|
||||||
// addresses exchanges correctly.
|
// resolving private addresses exchanges correctly.
|
||||||
//
|
//
|
||||||
// TODO(e.burkov): Think about testing the ip6.arpa. as well.
|
// TODO(e.burkov): Think about testing the ip6.arpa. as well.
|
||||||
func checkPrivateUpstreamExc(u upstream.Upstream) (err error) {
|
func checkPrivateExchange(u upstream.Upstream) (err error) {
|
||||||
// inAddrArpaTLD is the special-use fully-qualified domain name for PTR IP
|
// inAddrArpaTLD is the special-use fully-qualified domain name for PTR IP
|
||||||
// address resolution.
|
// address resolution.
|
||||||
//
|
//
|
||||||
@@ -701,81 +703,42 @@ func (err domainSpecificTestError) Error() (msg string) {
|
|||||||
return fmt.Sprintf("WARNING: %s", err.error)
|
return fmt.Sprintf("WARNING: %s", err.error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkDNS parses line, creates DNS upstreams using opts, and checks if the
|
// checkUpstreamAddr creates the upstream using opts and, possibly, information
|
||||||
// upstreams are exchanging correctly. It saves the result into a sync.Map
|
// from system hosts files, then checks if the DNS upstream exchanges correctly.
|
||||||
// where key is an upstream address and value is "OK", if the upstream
|
// It returns an error if addr is not valid DNS upstream address or the upstream
|
||||||
// exchanges correctly, or text of the error. It is intended to be used as a
|
|
||||||
// goroutine.
|
|
||||||
//
|
|
||||||
// TODO(s.chzhen): Separate to a different structure/file.
|
|
||||||
func (s *Server) checkDNS(
|
|
||||||
line string,
|
|
||||||
opts *upstream.Options,
|
|
||||||
check healthCheckFunc,
|
|
||||||
wg *sync.WaitGroup,
|
|
||||||
m *sync.Map,
|
|
||||||
) {
|
|
||||||
defer wg.Done()
|
|
||||||
defer log.OnPanic("dnsforward: checking upstreams")
|
|
||||||
|
|
||||||
upstreams, domains, err := separateUpstream(line)
|
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("wrong upstream format: %w", err)
|
|
||||||
m.Store(line, err.Error())
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
specific := len(domains) > 0
|
|
||||||
|
|
||||||
for _, upstreamAddr := range upstreams {
|
|
||||||
var useDefault bool
|
|
||||||
useDefault, err = validateUpstream(upstreamAddr, domains)
|
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("wrong upstream format: %w", err)
|
|
||||||
m.Store(upstreamAddr, err.Error())
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if useDefault {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug("dnsforward: checking if upstream %q works", upstreamAddr)
|
|
||||||
|
|
||||||
err = s.checkUpstreamAddr(upstreamAddr, specific, opts, check)
|
|
||||||
if err != nil {
|
|
||||||
m.Store(upstreamAddr, err.Error())
|
|
||||||
} else {
|
|
||||||
m.Store(upstreamAddr, "OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// checkUpstreamAddr creates the DNS upstream using opts and information from
|
|
||||||
// [s.dnsFilter.EtcHosts]. Checks if the DNS upstream exchanges correctly. It
|
|
||||||
// returns an error if addr is not valid DNS upstream address or the upstream
|
|
||||||
// is not exchanging correctly.
|
// is not exchanging correctly.
|
||||||
|
//
|
||||||
|
// TODO(e.burkov): Remove the receiver.
|
||||||
func (s *Server) checkUpstreamAddr(
|
func (s *Server) checkUpstreamAddr(
|
||||||
addr string,
|
addr string,
|
||||||
specific bool,
|
specific bool,
|
||||||
opts *upstream.Options,
|
basicOpts *upstream.Options,
|
||||||
check healthCheckFunc,
|
check healthCheckFunc,
|
||||||
) (err error) {
|
) (err error) {
|
||||||
|
usesDefault, err := validateUpstream(addr, specific)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("wrong upstream format: %w", err)
|
||||||
|
} else if usesDefault {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug("dnsforward: checking if upstream %q works", addr)
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil && specific {
|
if err != nil && specific {
|
||||||
err = domainSpecificTestError{error: err}
|
err = domainSpecificTestError{error: err}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
opts = &upstream.Options{
|
opts := &upstream.Options{
|
||||||
Bootstrap: opts.Bootstrap,
|
Bootstrap: basicOpts.Bootstrap,
|
||||||
Timeout: opts.Timeout,
|
Timeout: basicOpts.Timeout,
|
||||||
PreferIPv6: opts.PreferIPv6,
|
PreferIPv6: basicOpts.PreferIPv6,
|
||||||
}
|
}
|
||||||
|
|
||||||
// dnsFilter can be nil during application update.
|
// dnsFilter can be nil during application update.
|
||||||
|
//
|
||||||
|
// TODO(e.burkov): Remove when update dnsproxy.
|
||||||
if s.dnsFilter != nil {
|
if s.dnsFilter != nil {
|
||||||
recs := s.dnsFilter.EtcHostsRecords(extractUpstreamHost(addr))
|
recs := s.dnsFilter.EtcHostsRecords(extractUpstreamHost(addr))
|
||||||
for _, rec := range recs {
|
for _, rec := range recs {
|
||||||
@@ -788,12 +751,103 @@ func (s *Server) checkUpstreamAddr(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("creating upstream for %q: %w", addr, err)
|
return fmt.Errorf("creating upstream for %q: %w", addr, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() { err = errors.WithDeferred(err, u.Close()) }()
|
defer func() { err = errors.WithDeferred(err, u.Close()) }()
|
||||||
|
|
||||||
return check(u)
|
return check(u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// checkResult is a result of checking an upstream server.
|
||||||
|
type checkResult = struct {
|
||||||
|
// status is an error message if the upstream server is not working. It's
|
||||||
|
// nil for working upstreams.
|
||||||
|
status error
|
||||||
|
|
||||||
|
// address is the upstream server address as given in the request. It may
|
||||||
|
// appear to be a whole line if it's incorrect itself.
|
||||||
|
address string
|
||||||
|
}
|
||||||
|
|
||||||
|
// checkDNS parses an upstream configuration line using opts and checks if the
|
||||||
|
// specified upstreams are working using check. countWG is decremented when the
|
||||||
|
// expected number of results added to resNum, then results are sent to resCh.
|
||||||
|
//
|
||||||
|
// TODO(e.burkov): Remove the receiver.
|
||||||
|
func (s *Server) checkDNS(
|
||||||
|
line string,
|
||||||
|
opts *upstream.Options,
|
||||||
|
check healthCheckFunc,
|
||||||
|
countWG *sync.WaitGroup,
|
||||||
|
resNum *atomic.Int32,
|
||||||
|
resCh chan<- checkResult,
|
||||||
|
) {
|
||||||
|
defer log.OnPanic("dnsforward: checking upstreams")
|
||||||
|
|
||||||
|
addrs, domains, err := separateUpstream(line)
|
||||||
|
if err != nil {
|
||||||
|
resNum.Add(1)
|
||||||
|
countWG.Done()
|
||||||
|
|
||||||
|
resCh <- checkResult{
|
||||||
|
address: line,
|
||||||
|
status: fmt.Errorf("wrong upstream format: %w", err),
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resNum.Add(int32(len(addrs)))
|
||||||
|
countWG.Done()
|
||||||
|
|
||||||
|
specific := len(domains) > 0
|
||||||
|
for _, addr := range addrs {
|
||||||
|
resCh <- checkResult{
|
||||||
|
address: addr,
|
||||||
|
status: s.checkUpstreamAddr(addr, specific, opts, check),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check returns the mapping of upstream addresses to their check results.
|
||||||
|
func (s *Server) check(req *upstreamJSON, opts *upstream.Options) (result map[string]string) {
|
||||||
|
req.Upstreams = stringutil.FilterOut(req.Upstreams, IsCommentOrEmpty)
|
||||||
|
req.FallbackDNS = stringutil.FilterOut(req.FallbackDNS, IsCommentOrEmpty)
|
||||||
|
req.PrivateUpstreams = stringutil.FilterOut(req.PrivateUpstreams, IsCommentOrEmpty)
|
||||||
|
|
||||||
|
countWG := &sync.WaitGroup{}
|
||||||
|
countWG.Add(len(req.Upstreams) + len(req.FallbackDNS) + len(req.PrivateUpstreams))
|
||||||
|
|
||||||
|
resNum := &atomic.Int32{}
|
||||||
|
resCh := make(chan checkResult)
|
||||||
|
|
||||||
|
for _, addr := range req.Upstreams {
|
||||||
|
go s.checkDNS(addr, opts, checkExchange, countWG, resNum, resCh)
|
||||||
|
}
|
||||||
|
for _, addr := range req.FallbackDNS {
|
||||||
|
go s.checkDNS(addr, opts, checkExchange, countWG, resNum, resCh)
|
||||||
|
}
|
||||||
|
for _, addr := range req.PrivateUpstreams {
|
||||||
|
go s.checkDNS(addr, opts, checkPrivateExchange, countWG, resNum, resCh)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait until all the servers are counted and enqueued.
|
||||||
|
countWG.Wait()
|
||||||
|
n := resNum.Load()
|
||||||
|
|
||||||
|
result = make(map[string]string, n)
|
||||||
|
for i := int32(0); i < n; i++ {
|
||||||
|
// TODO(e.burkov): Upstreams intended for different purposes should
|
||||||
|
// be distinguished in the result, even if specified equally.
|
||||||
|
res := <-resCh
|
||||||
|
if res.status != nil {
|
||||||
|
result[res.address] = res.status.Error()
|
||||||
|
} else {
|
||||||
|
result[res.address] = "OK"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// handleTestUpstreamDNS handles requests to the POST /control/test_upstream_dns
|
// handleTestUpstreamDNS handles requests to the POST /control/test_upstream_dns
|
||||||
// endpoint.
|
// endpoint.
|
||||||
func (s *Server) handleTestUpstreamDNS(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) handleTestUpstreamDNS(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -805,49 +859,18 @@ func (s *Server) handleTestUpstreamDNS(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Upstreams = stringutil.FilterOut(req.Upstreams, IsCommentOrEmpty)
|
bootstrapAddrs := stringutil.FilterOut(req.BootstrapDNS, IsCommentOrEmpty)
|
||||||
req.FallbackDNS = stringutil.FilterOut(req.FallbackDNS, IsCommentOrEmpty)
|
if len(bootstrapAddrs) == 0 {
|
||||||
req.PrivateUpstreams = stringutil.FilterOut(req.PrivateUpstreams, IsCommentOrEmpty)
|
bootstrapAddrs = defaultBootstrap
|
||||||
|
}
|
||||||
|
|
||||||
opts := &upstream.Options{
|
opts := &upstream.Options{
|
||||||
Bootstrap: req.BootstrapDNS,
|
Bootstrap: bootstrapAddrs,
|
||||||
Timeout: s.conf.UpstreamTimeout,
|
Timeout: s.conf.UpstreamTimeout,
|
||||||
PreferIPv6: s.conf.BootstrapPreferIPv6,
|
PreferIPv6: s.conf.BootstrapPreferIPv6,
|
||||||
}
|
}
|
||||||
if len(opts.Bootstrap) == 0 {
|
|
||||||
opts.Bootstrap = defaultBootstrap
|
|
||||||
}
|
|
||||||
|
|
||||||
wg := &sync.WaitGroup{}
|
aghhttp.WriteJSONResponseOK(w, r, s.check(req, opts))
|
||||||
m := &sync.Map{}
|
|
||||||
|
|
||||||
wg.Add(len(req.Upstreams) + len(req.FallbackDNS) + len(req.PrivateUpstreams))
|
|
||||||
|
|
||||||
for _, ups := range req.Upstreams {
|
|
||||||
go s.checkDNS(ups, opts, checkDNSUpstreamExc, wg, m)
|
|
||||||
}
|
|
||||||
for _, ups := range req.FallbackDNS {
|
|
||||||
go s.checkDNS(ups, opts, checkDNSUpstreamExc, wg, m)
|
|
||||||
}
|
|
||||||
for _, ups := range req.PrivateUpstreams {
|
|
||||||
go s.checkDNS(ups, opts, checkPrivateUpstreamExc, wg, m)
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
|
|
||||||
result := map[string]string{}
|
|
||||||
m.Range(func(k, v any) bool {
|
|
||||||
// TODO(e.burkov): The upstreams used for both common and private
|
|
||||||
// resolving should be reported separately.
|
|
||||||
ups := k.(string)
|
|
||||||
status := v.(string)
|
|
||||||
|
|
||||||
result[ups] = status
|
|
||||||
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
|
|
||||||
aghhttp.WriteJSONResponseOK(w, r, result)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// handleCacheClear is the handler for the POST /control/cache_clear HTTP API.
|
// handleCacheClear is the handler for the POST /control/cache_clear HTTP API.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package dnsforward
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/netip"
|
"net/netip"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
||||||
"github.com/AdguardTeam/dnsproxy/proxy"
|
"github.com/AdguardTeam/dnsproxy/proxy"
|
||||||
@@ -269,9 +270,10 @@ func (s *Server) genBlockedHost(request *dns.Msg, newAddr string, d *proxy.DNSCo
|
|||||||
replReq.RecursionDesired = true
|
replReq.RecursionDesired = true
|
||||||
|
|
||||||
newContext := &proxy.DNSContext{
|
newContext := &proxy.DNSContext{
|
||||||
Proto: d.Proto,
|
Proto: d.Proto,
|
||||||
Addr: d.Addr,
|
Addr: d.Addr,
|
||||||
Req: &replReq,
|
StartTime: time.Now(),
|
||||||
|
Req: &replReq,
|
||||||
}
|
}
|
||||||
|
|
||||||
prx := s.proxy()
|
prx := s.proxy()
|
||||||
|
|||||||
@@ -20,10 +20,11 @@ func (s *Server) processQueryLogsAndStats(dctx *dnsContext) (rc resultCode) {
|
|||||||
log.Debug("dnsforward: started processing querylog and stats")
|
log.Debug("dnsforward: started processing querylog and stats")
|
||||||
defer log.Debug("dnsforward: finished processing querylog and stats")
|
defer log.Debug("dnsforward: finished processing querylog and stats")
|
||||||
|
|
||||||
|
elapsed := time.Since(dctx.startTime)
|
||||||
pctx := dctx.proxyCtx
|
pctx := dctx.proxyCtx
|
||||||
|
|
||||||
q := pctx.Req.Question[0]
|
q := pctx.Req.Question[0]
|
||||||
host := aghnet.NormalizeDomain(q.Name)
|
host := aghnet.NormalizeDomain(q.Name)
|
||||||
processingTime := time.Since(dctx.startTime)
|
|
||||||
|
|
||||||
ip, _ := netutil.IPAndPortFromAddr(pctx.Addr)
|
ip, _ := netutil.IPAndPortFromAddr(pctx.Addr)
|
||||||
ip = slices.Clone(ip)
|
ip = slices.Clone(ip)
|
||||||
@@ -42,7 +43,7 @@ func (s *Server) processQueryLogsAndStats(dctx *dnsContext) (rc resultCode) {
|
|||||||
defer s.serverLock.RUnlock()
|
defer s.serverLock.RUnlock()
|
||||||
|
|
||||||
if s.shouldLog(host, qt, cl, ids) {
|
if s.shouldLog(host, qt, cl, ids) {
|
||||||
s.logQuery(dctx, ip, processingTime)
|
s.logQuery(dctx, pctx, elapsed, ip)
|
||||||
} else {
|
} else {
|
||||||
log.Debug(
|
log.Debug(
|
||||||
"dnsforward: request %s %s %q from %s ignored; not adding to querylog",
|
"dnsforward: request %s %s %q from %s ignored; not adding to querylog",
|
||||||
@@ -54,7 +55,7 @@ func (s *Server) processQueryLogsAndStats(dctx *dnsContext) (rc resultCode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if s.shouldCountStat(host, qt, cl, ids) {
|
if s.shouldCountStat(host, qt, cl, ids) {
|
||||||
s.updateStats(dctx, ipStr, processingTime)
|
s.updateStats(dctx, elapsed, *dctx.result, ipStr)
|
||||||
} else {
|
} else {
|
||||||
log.Debug(
|
log.Debug(
|
||||||
"dnsforward: request %s %s %q from %s ignored; not counting in stats",
|
"dnsforward: request %s %s %q from %s ignored; not counting in stats",
|
||||||
@@ -89,9 +90,12 @@ func (s *Server) shouldCountStat(host string, qt, cl uint16, ids []string) (ok b
|
|||||||
}
|
}
|
||||||
|
|
||||||
// logQuery pushes the request details into the query log.
|
// logQuery pushes the request details into the query log.
|
||||||
func (s *Server) logQuery(dctx *dnsContext, ip net.IP, processingTime time.Duration) {
|
func (s *Server) logQuery(
|
||||||
pctx := dctx.proxyCtx
|
dctx *dnsContext,
|
||||||
|
pctx *proxy.DNSContext,
|
||||||
|
elapsed time.Duration,
|
||||||
|
ip net.IP,
|
||||||
|
) {
|
||||||
p := &querylog.AddParams{
|
p := &querylog.AddParams{
|
||||||
Question: pctx.Req,
|
Question: pctx.Req,
|
||||||
ReqECS: pctx.ReqECS,
|
ReqECS: pctx.ReqECS,
|
||||||
@@ -100,7 +104,7 @@ func (s *Server) logQuery(dctx *dnsContext, ip net.IP, processingTime time.Durat
|
|||||||
Result: dctx.result,
|
Result: dctx.result,
|
||||||
ClientID: dctx.clientID,
|
ClientID: dctx.clientID,
|
||||||
ClientIP: ip,
|
ClientIP: ip,
|
||||||
Elapsed: processingTime,
|
Elapsed: elapsed,
|
||||||
AuthenticatedData: dctx.responseAD,
|
AuthenticatedData: dctx.responseAD,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,27 +132,30 @@ func (s *Server) logQuery(dctx *dnsContext, ip net.IP, processingTime time.Durat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// updatesStats writes the request into statistics.
|
// updatesStats writes the request into statistics.
|
||||||
func (s *Server) updateStats(dctx *dnsContext, clientIP string, processingTime time.Duration) {
|
func (s *Server) updateStats(
|
||||||
pctx := dctx.proxyCtx
|
ctx *dnsContext,
|
||||||
|
elapsed time.Duration,
|
||||||
|
res filtering.Result,
|
||||||
|
clientIP string,
|
||||||
|
) {
|
||||||
|
pctx := ctx.proxyCtx
|
||||||
e := &stats.Entry{
|
e := &stats.Entry{
|
||||||
Domain: aghnet.NormalizeDomain(pctx.Req.Question[0].Name),
|
Domain: aghnet.NormalizeDomain(pctx.Req.Question[0].Name),
|
||||||
Result: stats.RNotFiltered,
|
Result: stats.RNotFiltered,
|
||||||
ProcessingTime: processingTime,
|
Time: elapsed,
|
||||||
UpstreamTime: pctx.QueryDuration,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if pctx.Upstream != nil {
|
if pctx.Upstream != nil {
|
||||||
e.Upstream = pctx.Upstream.Address()
|
e.Upstream = pctx.Upstream.Address()
|
||||||
}
|
}
|
||||||
|
|
||||||
if clientID := dctx.clientID; clientID != "" {
|
if clientID := ctx.clientID; clientID != "" {
|
||||||
e.Client = clientID
|
e.Client = clientID
|
||||||
} else {
|
} else {
|
||||||
e.Client = clientIP
|
e.Client = clientIP
|
||||||
}
|
}
|
||||||
|
|
||||||
switch dctx.result.Reason {
|
switch res.Reason {
|
||||||
case filtering.FilteredSafeBrowsing:
|
case filtering.FilteredSafeBrowsing:
|
||||||
e.Result = stats.RSafeBrowsing
|
e.Result = stats.RSafeBrowsing
|
||||||
case filtering.FilteredParental:
|
case filtering.FilteredParental:
|
||||||
|
|||||||
@@ -428,15 +428,6 @@ var blockedServices = []blockedService{{
|
|||||||
"||bnet.163.com^",
|
"||bnet.163.com^",
|
||||||
"||bnet.cn^",
|
"||bnet.cn^",
|
||||||
},
|
},
|
||||||
}, {
|
|
||||||
ID: "canais_globo",
|
|
||||||
Name: "Canais Globo",
|
|
||||||
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 980 980\"><path d=\"M455.5 1.1a484.3 484.3 0 0 0-258 95.4 501.4 501.4 0 0 0-101.1 101A483.8 483.8 0 0 0 4 426.5 491.7 491.7 0 0 0 54.7 716a481.2 481.2 0 0 0 89.7 121.5C252.7 945.3 400 995.1 554 975.9c92.4-11.4 178-49.3 253.5-112 15-12.4 47.5-45.5 60.6-61.7A483.7 483.7 0 0 0 976 553.5a488.4 488.4 0 0 0-135.7-406.6A494.8 494.8 0 0 0 640.8 23.2 506.9 506.9 0 0 0 455.5 1.1zm-76.4 245.4c6.4 2.3 359.1 210.1 364.3 214.7 2.8 2.4 5.8 6.5 7.8 10.6 3.2 6.4 3.3 7.2 3.3 18.2s-.1 11.8-3.3 18.2c-2 4.1-5 8.2-7.8 10.6-6.7 5.9-358.7 212.7-365.3 214.6a42 42 0 0 1-29.1-2.6 46 46 0 0 1-18.6-19l-2.9-6.3v-431l2.9-6.2c2.7-6 9.5-13.6 15.7-17.6a44.3 44.3 0 0 1 33-4.2z\"/></svg>"),
|
|
||||||
Rules: []string{
|
|
||||||
"||canaisglobo.globo.com^",
|
|
||||||
"||globosat.globo.com^",
|
|
||||||
"||gsatmulti.globo.com^",
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
ID: "claro",
|
ID: "claro",
|
||||||
Name: "Claro",
|
Name: "Claro",
|
||||||
@@ -1681,22 +1672,6 @@ var blockedServices = []blockedService{{
|
|||||||
"||linkedin.qtlcdn.com^",
|
"||linkedin.qtlcdn.com^",
|
||||||
"||lnkd.in^",
|
"||lnkd.in^",
|
||||||
},
|
},
|
||||||
}, {
|
|
||||||
ID: "lionsgateplus",
|
|
||||||
Name: "Lionsgate+",
|
|
||||||
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"-21 2 120 120\"><path d=\"M35 3.7v84.8h43.9v31.8H0V3.7Z\"/></svg>"),
|
|
||||||
Rules: []string{
|
|
||||||
"||lionsgateplus.com^",
|
|
||||||
"||starz.com^",
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
ID: "looke",
|
|
||||||
Name: "Looke",
|
|
||||||
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 -28 100 100\"><path d=\"m16.1.1-2-.1C7 0 0 5.2 0 11.2 0 15.4 2.4 17 6.2 17 5 16 4 14.8 4 11.4 4 7 6.7 4 11 2.8v33.5h1c6.1 0 10.5 7.5 15.5 7.5 3.3 0 5.3-2.3 5.3-5 0-.4 0-.8-.2-1.2a9 9 0 0 1-3.6 1c-5.4 0-8.8-3.4-12.9-4.3V.3z\"/><path d=\"M31.6 11.2c-7.1 0-9.3 7.7-9.3 13.2 0 8.2 4.7 11.1 9 11.1 5 0 8-4.7 8-12.5v-2c3-.4 6-1.8 7.3-3.9L46 16a9.2 9.2 0 0 1-6.5 2.8H39c-.6-4.2-2.5-7.5-7.5-7.5zm.5 20.7c-2.1 0-4.6-1.5-4.6-7.7 0-4.6 1.4-10.4 5.4-10.4 1.4 0 2.6.8 3.4 3-1.2 0-2 .5-2 2 0 1.6.9 2.3 2.7 2.4v1.1c0 6-1.6 9.6-4.9 9.6z\"/><path d=\"M51.6 11.2c-7.1 0-9.3 7.7-9.3 13.2 0 8.2 4.7 11.1 9 11.1 5 0 8-4.7 8-12.5v-2c3-.4 6-1.8 7.3-3.9L66 16a9.2 9.2 0 0 1-6.5 2.8H59c-.6-4.2-2.5-7.5-7.5-7.5zm.5 20.7c-2.1 0-4.6-1.5-4.6-7.7 0-4.6 1.4-10.4 5.4-10.4 1.4 0 2.6.8 3.4 3-1.2 0-2 .5-2 2 0 1.6.9 2.3 2.7 2.4v1.1c0 6-1.6 9.6-4.9 9.6z\"/><path d=\"M63 2.6v32.6h4.7v-10c1-2.8 2.2-3.7 3.9-3.7 1.6 0 3 .8 3 4.2V30c0 3 1.5 5.4 5.3 5.4 2 0 5.2-.6 6.6-8.8h-1.7c-.8 3.6-2 5.2-3.6 5.2-1.7 0-1.9-1.6-1.9-2.5l.2-4.1c0-3.1-.8-7.4-6.5-7.4h-.5l8-6.5h-4.6l-8.2 7.8V1.9Z\"/><path d=\"M99.6 17.4c0-5-3.2-6.2-6.4-6.2-6.8 0-9 8-9 13.3 0 8 4.8 11 9 11 3.6 0 6.8-1.9 6.8-4.7l-.1-1.2c-1.2 1.7-3.1 2.3-5.2 2.3-2.7 0-5-1.1-5.5-6.2 6.5-.7 10.4-3.9 10.4-8.3zm-10.4 6.5c0-4.7 1.6-10.4 5-10.4 1.5 0 2.3 1 2.3 3.4 0 3.6-2.8 6.2-7.3 7z\"/></svg>"),
|
|
||||||
Rules: []string{
|
|
||||||
"||looke.com.br^",
|
|
||||||
"||ottvs.com.br^",
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
ID: "mail_ru",
|
ID: "mail_ru",
|
||||||
Name: "Mail.ru",
|
Name: "Mail.ru",
|
||||||
@@ -2048,13 +2023,6 @@ var blockedServices = []blockedService{{
|
|||||||
Rules: []string{
|
Rules: []string{
|
||||||
"||pluto.tv^",
|
"||pluto.tv^",
|
||||||
},
|
},
|
||||||
}, {
|
|
||||||
ID: "privacy",
|
|
||||||
Name: "Privacy",
|
|
||||||
IconSVG: []byte("<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"-2 0 42 42\"><path fill-rule=\"evenodd\" d=\"m28.516 30.648-.857-1.386-1.935-3.136a9.853 9.853 0 0 0 2.523-3.66 9.76 9.76 0 0 0 .31-6.26 9.853 9.853 0 0 0-3.562-5.185 9.955 9.955 0 0 0-5.985-2 9.94 9.94 0 0 0-5.986 2 9.848 9.848 0 0 0-3.564 5.185 9.76 9.76 0 0 0 .31 6.26 9.853 9.853 0 0 0 2.523 3.66L5.031 37.892a.654.654 0 0 1-.312.267.665.665 0 0 1-.42.013.65.65 0 0 1-.343-.225.65.65 0 0 1-.123-.397V18.875h-.007c0-3.331 1.107-6.468 3.022-9.016a15.152 15.152 0 0 1 7.842-5.436 15.292 15.292 0 0 1 9.572.306c3 1.096 5.65 3.126 7.481 5.92a14.998 14.998 0 0 1 2.427 9.197 15.002 15.002 0 0 1-3.587 8.808 15.267 15.267 0 0 1-2.065 1.992m-9.505 3.26c1.129 0 2.284-.079 3.388-.328.979-.222 1.936-.54 2.856-.951l-.854-1.383-2.838-4.6a1.888 1.888 0 0 1 .636-2.608 6.058 6.058 0 0 0 2.487-2.953 6.02 6.02 0 0 0-1.995-7.03 6.115 6.115 0 0 0-3.68-1.225 6.12 6.12 0 0 0-3.682 1.225 6.03 6.03 0 0 0-2.185 3.178 6.008 6.008 0 0 0 .19 3.852 6.056 6.056 0 0 0 2.487 2.953 1.889 1.889 0 0 1 .637 2.607l-1.845 2.99-1.562 2.532-.278.45a14.152 14.152 0 0 0 6.24 1.292h-.002ZM8.772 39.098l-.476.772a4.468 4.468 0 0 1-2.184 1.829 4.48 4.48 0 0 1-2.846.13 4.468 4.468 0 0 1-2.364-1.592A4.404 4.404 0 0 1 0 37.552V18.875h.007c0-4.183 1.382-8.113 3.771-11.29A18.992 18.992 0 0 1 13.611.78a19.102 19.102 0 0 1 11.967.38 18.97 18.97 0 0 1 9.368 7.422 18.758 18.758 0 0 1 3.04 11.501 18.767 18.767 0 0 1-4.5 11.024 19.006 19.006 0 0 1-10.247 6.17 19.07 19.07 0 0 1-3.613.463c-.089-.003-.534.007-.613.007a19.111 19.111 0 0 1-8.257-1.867l-1.984 3.215v.001Z\" clip-rule=\"evenodd\"/></svg>"),
|
|
||||||
Rules: []string{
|
|
||||||
"||privacy.com.br^",
|
|
||||||
},
|
|
||||||
}, {
|
}, {
|
||||||
ID: "qq",
|
ID: "qq",
|
||||||
Name: "QQ",
|
Name: "QQ",
|
||||||
@@ -2330,15 +2298,11 @@ var blockedServices = []blockedService{{
|
|||||||
"||huoshanzhibo.com^",
|
"||huoshanzhibo.com^",
|
||||||
"||muscdn.com^",
|
"||muscdn.com^",
|
||||||
"||musical.ly^",
|
"||musical.ly^",
|
||||||
"||p16-tiktok-*.ibyteimg.com^",
|
|
||||||
"||pstatp.com^",
|
"||pstatp.com^",
|
||||||
"||snssdk.com^",
|
"||snssdk.com^",
|
||||||
"||tiktok.com^",
|
"||tiktok.com^",
|
||||||
"||tiktokcdn-us.com^",
|
|
||||||
"||tiktokcdn.com^",
|
"||tiktokcdn.com^",
|
||||||
"||tiktokv.com^",
|
"||tiktokv.com^",
|
||||||
"||ttlivecdn.com.c.bytefcdn-oversea.com^",
|
|
||||||
"||ttlivecdn.com^",
|
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
ID: "tinder",
|
ID: "tinder",
|
||||||
|
|||||||
@@ -306,12 +306,10 @@ var config = &configuration{
|
|||||||
BindHosts: []netip.Addr{netip.IPv4Unspecified()},
|
BindHosts: []netip.Addr{netip.IPv4Unspecified()},
|
||||||
Port: defaultPortDNS,
|
Port: defaultPortDNS,
|
||||||
Config: dnsforward.Config{
|
Config: dnsforward.Config{
|
||||||
Ratelimit: 20,
|
Ratelimit: 20,
|
||||||
RatelimitSubnetLenIPv4: 24,
|
RefuseAny: true,
|
||||||
RatelimitSubnetLenIPv6: 56,
|
AllServers: false,
|
||||||
RefuseAny: true,
|
HandleDDR: true,
|
||||||
AllServers: false,
|
|
||||||
HandleDDR: true,
|
|
||||||
FastestTimeout: timeutil.Duration{
|
FastestTimeout: timeutil.Duration{
|
||||||
Duration: fastip.DefaultPingWaitTimeout,
|
Duration: fastip.DefaultPingWaitTimeout,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ func TestStats_races(t *testing.T) {
|
|||||||
|
|
||||||
writeFunc := func(start, fin *sync.WaitGroup, waitCh <-chan unit, i int) {
|
writeFunc := func(start, fin *sync.WaitGroup, waitCh <-chan unit, i int) {
|
||||||
e := &Entry{
|
e := &Entry{
|
||||||
Domain: fmt.Sprintf("example-%d.org", i),
|
Domain: fmt.Sprintf("example-%d.org", i),
|
||||||
Client: fmt.Sprintf("client_%d", i),
|
Client: fmt.Sprintf("client_%d", i),
|
||||||
Result: Result(i)%(resultLast-1) + 1,
|
Result: Result(i)%(resultLast-1) + 1,
|
||||||
ProcessingTime: time.Since(startTime),
|
Time: time.Since(startTime),
|
||||||
}
|
}
|
||||||
|
|
||||||
start.Done()
|
start.Done()
|
||||||
|
|||||||
@@ -76,19 +76,17 @@ func TestStats(t *testing.T) {
|
|||||||
const respUpstream = "upstream"
|
const respUpstream = "upstream"
|
||||||
|
|
||||||
entries := []*stats.Entry{{
|
entries := []*stats.Entry{{
|
||||||
Domain: reqDomain,
|
Domain: reqDomain,
|
||||||
Client: cliIPStr,
|
Client: cliIPStr,
|
||||||
Result: stats.RFiltered,
|
Result: stats.RFiltered,
|
||||||
ProcessingTime: time.Microsecond * 123456,
|
Time: time.Microsecond * 123456,
|
||||||
Upstream: respUpstream,
|
Upstream: respUpstream,
|
||||||
UpstreamTime: time.Microsecond * 222222,
|
|
||||||
}, {
|
}, {
|
||||||
Domain: reqDomain,
|
Domain: reqDomain,
|
||||||
Client: cliIPStr,
|
Client: cliIPStr,
|
||||||
Result: stats.RNotFiltered,
|
Result: stats.RNotFiltered,
|
||||||
ProcessingTime: time.Microsecond * 123456,
|
Time: time.Microsecond * 123456,
|
||||||
Upstream: respUpstream,
|
Upstream: respUpstream,
|
||||||
UpstreamTime: time.Microsecond * 222222,
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
wantData := &stats.StatsResp{
|
wantData := &stats.StatsResp{
|
||||||
@@ -97,7 +95,7 @@ func TestStats(t *testing.T) {
|
|||||||
TopClients: []map[string]uint64{0: {cliIPStr: 2}},
|
TopClients: []map[string]uint64{0: {cliIPStr: 2}},
|
||||||
TopBlocked: []map[string]uint64{0: {reqDomain: 1}},
|
TopBlocked: []map[string]uint64{0: {reqDomain: 1}},
|
||||||
TopUpstreamsResponses: []map[string]uint64{0: {respUpstream: 2}},
|
TopUpstreamsResponses: []map[string]uint64{0: {respUpstream: 2}},
|
||||||
TopUpstreamsAvgTime: []map[string]float64{0: {respUpstream: 0.222222}},
|
TopUpstreamsAvgTime: []map[string]float64{0: {respUpstream: 0.123456}},
|
||||||
DNSQueries: []uint64{
|
DNSQueries: []uint64{
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
|
||||||
@@ -198,10 +196,10 @@ func TestLargeNumbers(t *testing.T) {
|
|||||||
for i := 0; i < cliNumPerHour; i++ {
|
for i := 0; i < cliNumPerHour; i++ {
|
||||||
ip := net.IP{127, 0, byte((i & 0xff00) >> 8), byte(i & 0xff)}
|
ip := net.IP{127, 0, byte((i & 0xff00) >> 8), byte(i & 0xff)}
|
||||||
e := &stats.Entry{
|
e := &stats.Entry{
|
||||||
Domain: fmt.Sprintf("domain%d.hour%d", i, h),
|
Domain: fmt.Sprintf("domain%d.hour%d", i, h),
|
||||||
Client: ip.String(),
|
Client: ip.String(),
|
||||||
Result: stats.RNotFiltered,
|
Result: stats.RNotFiltered,
|
||||||
ProcessingTime: 123456,
|
Time: 123456,
|
||||||
}
|
}
|
||||||
s.Update(e)
|
s.Update(e)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,12 +68,8 @@ type Entry struct {
|
|||||||
// Result is the result of processing the request.
|
// Result is the result of processing the request.
|
||||||
Result Result
|
Result Result
|
||||||
|
|
||||||
// ProcessingTime is the duration of the request processing from the start
|
// Time is the duration of the request processing.
|
||||||
// of the request including timeouts.
|
Time time.Duration
|
||||||
ProcessingTime time.Duration
|
|
||||||
|
|
||||||
// UpstreamTime is the duration of the successful request to the upstream.
|
|
||||||
UpstreamTime time.Duration
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate returns an error if entry is not valid.
|
// validate returns an error if entry is not valid.
|
||||||
@@ -107,8 +103,8 @@ type unit struct {
|
|||||||
// upstreamsResponses stores the number of responses from each upstream.
|
// upstreamsResponses stores the number of responses from each upstream.
|
||||||
upstreamsResponses map[string]uint64
|
upstreamsResponses map[string]uint64
|
||||||
|
|
||||||
// upstreamsTimeSum stores the sum of durations of successful queries in
|
// upstreamsTimeSum stores the sum of processing time in microseconds of
|
||||||
// microseconds to each upstream.
|
// responses from each upstream.
|
||||||
upstreamsTimeSum map[string]uint64
|
upstreamsTimeSum map[string]uint64
|
||||||
|
|
||||||
// nResult stores the number of requests grouped by it's result.
|
// nResult stores the number of requests grouped by it's result.
|
||||||
@@ -327,14 +323,13 @@ func (u *unit) add(e *Entry) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
u.clients[e.Client]++
|
u.clients[e.Client]++
|
||||||
pt := uint64(e.ProcessingTime.Microseconds())
|
t := uint64(e.Time.Microseconds())
|
||||||
u.timeSum += pt
|
u.timeSum += t
|
||||||
u.nTotal++
|
u.nTotal++
|
||||||
|
|
||||||
if e.Upstream != "" {
|
if e.Upstream != "" {
|
||||||
u.upstreamsResponses[e.Upstream]++
|
u.upstreamsResponses[e.Upstream]++
|
||||||
ut := uint64(e.UpstreamTime.Microseconds())
|
u.upstreamsTimeSum[e.Upstream] += t
|
||||||
u.upstreamsTimeSum[e.Upstream] += ut
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ go 1.20
|
|||||||
require (
|
require (
|
||||||
github.com/fzipp/gocyclo v0.6.0
|
github.com/fzipp/gocyclo v0.6.0
|
||||||
github.com/golangci/misspell v0.4.1
|
github.com/golangci/misspell v0.4.1
|
||||||
github.com/gordonklaus/ineffassign v0.1.0
|
github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601
|
||||||
github.com/kisielk/errcheck v1.6.3
|
github.com/kisielk/errcheck v1.6.3
|
||||||
github.com/kyoh86/looppointer v0.2.1
|
github.com/kyoh86/looppointer v0.2.1
|
||||||
github.com/securego/gosec/v2 v2.18.2
|
github.com/securego/gosec/v2 v2.18.1
|
||||||
github.com/uudashr/gocognit v1.1.2
|
github.com/uudashr/gocognit v1.1.1
|
||||||
golang.org/x/tools v0.15.0
|
golang.org/x/tools v0.14.0
|
||||||
golang.org/x/vuln v1.0.1
|
golang.org/x/vuln v1.0.1
|
||||||
honnef.co/go/tools v0.4.6
|
honnef.co/go/tools v0.4.6
|
||||||
mvdan.cc/gofumpt v0.5.0
|
mvdan.cc/gofumpt v0.5.0
|
||||||
@@ -21,14 +21,14 @@ require (
|
|||||||
github.com/BurntSushi/toml v1.3.2 // indirect
|
github.com/BurntSushi/toml v1.3.2 // indirect
|
||||||
github.com/ccojocar/zxcvbn-go v1.0.1 // indirect
|
github.com/ccojocar/zxcvbn-go v1.0.1 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.6.0 // indirect
|
||||||
github.com/google/uuid v1.4.0 // indirect
|
github.com/google/uuid v1.3.1 // indirect
|
||||||
github.com/gookit/color v1.5.4 // indirect
|
github.com/gookit/color v1.5.4 // indirect
|
||||||
github.com/kyoh86/nolint v0.0.1 // indirect
|
github.com/kyoh86/nolint v0.0.1 // indirect
|
||||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
|
||||||
golang.org/x/exp/typeparams v0.0.0-20231110203233-9a3e6036ecaa // indirect
|
golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d // indirect
|
||||||
golang.org/x/mod v0.14.0 // indirect
|
golang.org/x/mod v0.13.0 // indirect
|
||||||
golang.org/x/sync v0.5.0 // indirect
|
golang.org/x/sync v0.4.0 // indirect
|
||||||
golang.org/x/sys v0.14.0 // indirect
|
golang.org/x/sys v0.13.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
|
||||||
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
|
github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA=
|
||||||
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
|
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||||
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
||||||
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
||||||
github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s=
|
github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601 h1:mrEEilTAUmaAORhssPPkxj84TsHrPMLBGW2Z4SoTxm8=
|
||||||
github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
|
github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0=
|
||||||
github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8=
|
github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8=
|
||||||
github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw=
|
github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
@@ -29,15 +29,15 @@ github.com/kyoh86/looppointer v0.2.1 h1:Jx9fnkBj/JrIryBLMTYNTj9rvc2SrPS98Dg0w7fx
|
|||||||
github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw=
|
github.com/kyoh86/looppointer v0.2.1/go.mod h1:q358WcM8cMWU+5vzqukvaZtnJi1kw/MpRHQm3xvTrjw=
|
||||||
github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU=
|
github.com/kyoh86/nolint v0.0.1 h1:GjNxDEkVn2wAxKHtP7iNTrRxytRZ1wXxLV5j4XzGfRU=
|
||||||
github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI=
|
github.com/kyoh86/nolint v0.0.1/go.mod h1:1ZiZZ7qqrZ9dZegU96phwVcdQOMKIqRzFJL3ewq9gtI=
|
||||||
github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
|
github.com/onsi/ginkgo/v2 v2.12.1 h1:uHNEO1RP2SpuZApSkel9nEh1/Mu+hmQe7Q+Pepg5OYA=
|
||||||
github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA=
|
github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||||
github.com/securego/gosec/v2 v2.18.2 h1:DkDt3wCiOtAHf1XkiXZBhQ6m6mK/b9T/wD257R3/c+I=
|
github.com/securego/gosec/v2 v2.18.1 h1:xnnehWg7dIW8qrRPGm8ykY21zp2MueKyC99Vlcuj96I=
|
||||||
github.com/securego/gosec/v2 v2.18.2/go.mod h1:xUuqSF6i0So56Y2wwohWAmB07EdBkUN6crbLlHwbyJs=
|
github.com/securego/gosec/v2 v2.18.1/go.mod h1:ZUTcKD9gAFip1lLGHWCjkoBQJyaEzePTNzjwlL2HHoE=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI=
|
github.com/uudashr/gocognit v1.1.1 h1:qIj6KhmcGQGBiWtaKH6ZlIyDGa6br2febZNZ6MDzqMw=
|
||||||
github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k=
|
github.com/uudashr/gocognit v1.1.1/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY=
|
||||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
||||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
@@ -49,26 +49,26 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||||
golang.org/x/exp/typeparams v0.0.0-20231110203233-9a3e6036ecaa h1:wJBD77KpXKOckDJT0rqU5EwZDmxcmTh6aXVpU6s6GBg=
|
golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d h1:NRn/Afz91uVUyEsxMp4lGGxpr5y1qz+Iko60dbkfvLQ=
|
||||||
golang.org/x/exp/typeparams v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
|
golang.org/x/exp/typeparams v0.0.0-20231006140011-7918f672742d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
|
||||||
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
|
||||||
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -79,8 +79,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
@@ -93,8 +93,8 @@ golang.org/x/tools v0.0.0-20201007032633-0806396f153e/go.mod h1:z6u4i615ZeAfBE4X
|
|||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||||
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
|
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
|
||||||
golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
|
golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
|
||||||
golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
|
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
|
||||||
golang.org/x/vuln v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=
|
golang.org/x/vuln v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU=
|
||||||
golang.org/x/vuln v1.0.1/go.mod h1:bb2hMwln/tqxg32BNY4CcxHWtHXuYa3SbIBmtsyjxtM=
|
golang.org/x/vuln v1.0.1/go.mod h1:bb2hMwln/tqxg32BNY4CcxHWtHXuYa3SbIBmtsyjxtM=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|||||||
Reference in New Issue
Block a user