Fix Compress UDP DNS response instead of truncate

This commit is contained in:
yvvw 2024-02-05 03:47:46 +08:00
parent b27bc45cf2
commit 5b43f3a47d
No known key found for this signature in database
GPG Key ID: F1D64A255F293310

View File

@ -241,9 +241,11 @@ func (d *DNS) newPacketConnection(ctx context.Context, conn N.PacketConn, readWa
return err return err
} }
timeout.Update() timeout.Update()
response = truncateDNSMessage(response, 512) // TODO: add an option to custom UDP buffer size
responseBuffer := buf.NewSize(dns.FixedPacketSize) responseBuffer := buf.NewSize(dns.FixedPacketSize)
responseBuffer.Resize(1024, 0) responseBuffer.Resize(1024, 0)
if response.Len() > 512 {
response.Compress = true // TODO: add an option to compress UDP
}
n, err := response.PackBuffer(responseBuffer.FreeBytes()) n, err := response.PackBuffer(responseBuffer.FreeBytes())
if err != nil { if err != nil {
cancel(err) cancel(err)
@ -264,21 +266,3 @@ func (d *DNS) newPacketConnection(ctx context.Context, conn N.PacketConn, readWa
}) })
return group.Run(fastClose) return group.Run(fastClose)
} }
func truncateDNSMessage(response *mDNS.Msg, maxLen int) *mDNS.Msg {
responseLen := response.Len()
if responseLen <= maxLen {
return response
}
response = response.Copy()
for len(response.Answer) > 0 && responseLen > maxLen {
response.Answer = response.Answer[:len(response.Answer)-1]
response.Truncated = true
responseLen = response.Len()
}
if responseLen > maxLen {
response.Ns = nil
response.Extra = nil
}
return response
}