mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2024-11-22 13:05:36 +03:00
2a0d062947
Merge in DNS/adguard-home from AG-21072-querylog-conf-race to master Squashed commit of the following: commit fcb14353ee63f582986e18affebf5ed965c3bfc7 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Mon Apr 3 15:04:03 2023 +0300 querylog: imp code, docs commit 9070bc1d4eee5efc5795466b2c2a40c6ab495e68 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Mon Apr 3 13:58:56 2023 +0300 querylog: fix races
70 lines
1.5 KiB
Go
70 lines
1.5 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.Answer, err = resp.Pack()
|
|
err = errors.Annotate(err, "packing answer: %w")
|
|
} else {
|
|
e.OrigAnswer, err = resp.Pack()
|
|
err = errors.Annotate(err, "packing orig answer: %w")
|
|
}
|
|
if err != nil {
|
|
log.Error("querylog: %s", err)
|
|
}
|
|
}
|