diff options
| author | Shulhan <ms@kilabit.info> | 2024-04-12 17:12:13 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2024-04-12 17:12:13 +0700 |
| commit | 8e0c347f8a2fcf7e0f754b84fcaa3a7049e20af5 (patch) | |
| tree | d5f6680bcb5a8aefe67a6ded2ad9f3e11b971baa | |
| parent | 6361b4a088ee67e34887430b4a57f330c08d15b3 (diff) | |
| download | pakakeh.go-8e0c347f8a2fcf7e0f754b84fcaa3a7049e20af5.tar.xz | |
lib/dns: return errInvalidMessage when received message cannot be parsed
By returning error errInvalidMessage, the caller can check whether the
issue is in connection or in the message itself.
If the issue is not in the message, the caller needs to re-create the
connection.
| -rw-r--r-- | lib/dns/error.go | 4 | ||||
| -rw-r--r-- | lib/dns/message.go | 8 | ||||
| -rw-r--r-- | lib/dns/server.go | 11 |
3 files changed, 11 insertions, 12 deletions
diff --git a/lib/dns/error.go b/lib/dns/error.go index 15748c1d..4f70f4a7 100644 --- a/lib/dns/error.go +++ b/lib/dns/error.go @@ -6,5 +6,5 @@ package dns import "errors" -// errUnpack define an error if packet failed to be parsed. -var errUnpack = errors.New(`unpack: invalid message`) +// errInvalidMessage define an error when raw DNS message cannot be parsed. +var errInvalidMessage = errors.New(`invalid message`) diff --git a/lib/dns/message.go b/lib/dns/message.go index a35473b0..02a237c0 100644 --- a/lib/dns/message.go +++ b/lib/dns/message.go @@ -183,7 +183,7 @@ func UnpackMessage(packet []byte) (msg *Message, err error) { err = msg.UnpackHeaderQuestion() if err != nil { - return nil, fmt.Errorf(`%s: %w`, logp, err) + return nil, fmt.Errorf(`%s: %w: %w`, logp, errInvalidMessage, err) } var ( @@ -197,7 +197,7 @@ func UnpackMessage(packet []byte) (msg *Message, err error) { startIdx, err = rr.unpack(msg.packet, startIdx) if err != nil { - return nil, fmt.Errorf(`%s: %w`, logp, err) + return nil, fmt.Errorf(`%s: %w: %w`, logp, errInvalidMessage, err) } msg.Answer = append(msg.Answer, rr) @@ -208,7 +208,7 @@ func UnpackMessage(packet []byte) (msg *Message, err error) { startIdx, err = rr.unpack(msg.packet, startIdx) if err != nil { - return nil, fmt.Errorf(`%s: %w`, logp, err) + return nil, fmt.Errorf(`%s: %w: %w`, logp, errInvalidMessage, err) } msg.Authority = append(msg.Authority, rr) } @@ -218,7 +218,7 @@ func UnpackMessage(packet []byte) (msg *Message, err error) { startIdx, err = rr.unpack(msg.packet, startIdx) if err != nil { - return nil, fmt.Errorf(`%s: %w`, logp, err) + return nil, fmt.Errorf(`%s: %w: %w`, logp, errInvalidMessage, err) } msg.Additional = append(msg.Additional, rr) diff --git a/lib/dns/server.go b/lib/dns/server.go index 43795c2e..ec5835f4 100644 --- a/lib/dns/server.go +++ b/lib/dns/server.go @@ -810,9 +810,9 @@ func (srv *Server) dohForwarder(tag, nameserver string) { res, err = forwarder.Query(req.message) if err != nil { - log.Printf(`%s %s: forward failed for %q: %s`, + log.Printf(`%s %s: forward failed for %s: %s`, logp, tag, req.message.Question.Name, err) - if !errors.Is(err, errUnpack) { + if !errors.Is(err, errInvalidMessage) { isRunning = false } continue @@ -891,7 +891,7 @@ func (srv *Server) tlsForwarder(tag, nameserver string) { if err != nil { log.Printf(`%s %s: forward failed for %s: %s`, logp, tag, req.message.Question.Name, err) - if !errors.Is(err, errUnpack) { + if !errors.Is(err, errInvalidMessage) { isRunning = false } continue @@ -1040,9 +1040,8 @@ func (srv *Server) udpForwarder(tag, nameserver string) { res, err = forwarder.Query(req.message) if err != nil { log.Printf(`%s %s: forward failed for %s: %s`, - logp, tag, - req.message.Question.Name, err) - if !errors.Is(err, errUnpack) { + logp, tag, req.message.Question.Name, err) + if !errors.Is(err, errInvalidMessage) { isRunning = false } continue |
