mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-28 18:08:51 +03:00
cbc7985e75
Merge in DNS/adguard-home from querylog-imp-code to master Squashed commit of the following: commit a58ad36508a2355b686d314dec51ac0b5e357281 Merge: df5494f2c941eb1dd7
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 15:26:55 2023 +0300 Merge remote-tracking branch 'origin/master' into querylog-imp-code commit df5494f2c337736690a3c2a547c2d71858d0378f Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 15:24:43 2023 +0300 querylog: imp code commit 8c3c2b76dd5858e7b107f222c112e9cde2477fb3 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 12:14:15 2023 +0300 all: lint script commit be04a4decfaf20a1649d32ecaab3c1c6bb205ffd Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 12:03:12 2023 +0300 querylog: imp code commit fe7beacff3a5cfcf2332c4998b9c65820284eaf7 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 11:57:33 2023 +0300 querylog: imp docs commit 2ae239c57d12524fbc092f582842af2ad726c1d0 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 11:46:54 2023 +0300 querylog: imp code commit 417216cefbf154fa870f8f43468f35e0e345971f Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 11:25:44 2023 +0300 querylog: imp code commit 514b6ee99113844a4e0dad30dc53703e3220c289 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Wed May 24 11:14:13 2023 +0300 querylog: imp docs commit 321351a3abb524208daacd5a3a7fbf5f07ab259d Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 16:38:31 2023 +0300 querylog: imp code commit ee91de5c43210b5bc213f933d411adb894d2e586 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 16:01:32 2023 +0300 querylog: imp code commit 862ff12177fb769d5cb2ec250eaee538dc91d70a Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 15:07:24 2023 +0300 querylog: imp code commit cc62c1c4ae8b813d03ccf51b596ba1ebf44d9a1f Merge: 37ace34e924b41100c
Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 13:09:10 2023 +0300 Merge remote-tracking branch 'origin/master' into querylog-imp-code commit 37ace34e91e5189bef6e774db960f40cdaa18270 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 11:23:08 2023 +0300 querylog: imp code commit 8417815a6349f10b5dbad410ce28aab98bc479fa Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Mon May 22 11:08:29 2023 +0300 querylog: imp docs commit 4e5cde74d25713f78675aa3e18083b4fb5e619f3 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 16:41:34 2023 +0300 querylog: imp code commit 3494eab7006240f652a0217d305ac916bd6c3c83 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 16:13:08 2023 +0300 all: lint script commit 704534ce6278e7d9b1bef30a3acc4e59f25693bc Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 16:12:04 2023 +0300 querylog: imp code commit 48510102a2fa5187f78067d2b9157dac62f8bb56 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 15:52:57 2023 +0300 querylog: imp code commit 89c273aea0e6758eb749a2d3bbaf1bc385a57797 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 15:40:50 2023 +0300 querylog: imp code commit 0057fe64553ad38de0fda10efb9d3512c9a00e45 Author: Dimitry Kolyshev <dkolyshev@adguard.com> Date: Fri May 19 13:54:46 2023 +0300 querylog: imp code ... and 1 more commit
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package querylog
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/AdguardTeam/AdGuardHome/internal/filtering"
|
|
"github.com/AdguardTeam/golibs/errors"
|
|
"github.com/AdguardTeam/golibs/log"
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
// logEntry represents a single entry in the file.
|
|
type logEntry struct {
|
|
// client is the found client information, if any.
|
|
client *Client
|
|
|
|
Time time.Time `json:"T"`
|
|
|
|
QHost string `json:"QH"`
|
|
QType string `json:"QT"`
|
|
QClass string `json:"QC"`
|
|
|
|
ReqECS string `json:"ECS,omitempty"`
|
|
|
|
ClientID string `json:"CID,omitempty"`
|
|
ClientProto ClientProto `json:"CP"`
|
|
|
|
Upstream string `json:",omitempty"`
|
|
|
|
Answer []byte `json:",omitempty"`
|
|
OrigAnswer []byte `json:",omitempty"`
|
|
|
|
IP net.IP `json:"IP"`
|
|
|
|
Result filtering.Result
|
|
|
|
Elapsed time.Duration
|
|
|
|
Cached bool `json:",omitempty"`
|
|
AuthenticatedData bool `json:"AD,omitempty"`
|
|
}
|
|
|
|
// shallowClone returns a shallow clone of e.
|
|
func (e *logEntry) shallowClone() (clone *logEntry) {
|
|
cloneVal := *e
|
|
|
|
return &cloneVal
|
|
}
|
|
|
|
// addResponse adds data from resp to e.Answer if resp is not nil. If isOrig is
|
|
// true, addResponse sets the e.OrigAnswer field instead of e.Answer. Any
|
|
// errors are logged.
|
|
func (e *logEntry) addResponse(resp *dns.Msg, isOrig bool) {
|
|
if resp == nil {
|
|
return
|
|
}
|
|
|
|
var err error
|
|
if isOrig {
|
|
e.OrigAnswer, err = resp.Pack()
|
|
err = errors.Annotate(err, "packing orig answer: %w")
|
|
} else {
|
|
e.Answer, err = resp.Pack()
|
|
err = errors.Annotate(err, "packing answer: %w")
|
|
}
|
|
if err != nil {
|
|
log.Error("querylog: %s", err)
|
|
}
|
|
}
|
|
|
|
// parseDNSRewriteResultIPs fills logEntry's DNSRewriteResult response records
|
|
// with the IP addresses parsed from the raw strings.
|
|
func (e *logEntry) parseDNSRewriteResultIPs() {
|
|
for rrType, rrValues := range e.Result.DNSRewriteResult.Response {
|
|
switch rrType {
|
|
case dns.TypeA, dns.TypeAAAA:
|
|
for i, v := range rrValues {
|
|
s, _ := v.(string)
|
|
rrValues[i] = net.ParseIP(s)
|
|
}
|
|
default:
|
|
// Go on.
|
|
}
|
|
}
|
|
}
|