mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-06-13 21:54:13 +08:00
Improve DNS truncate behavior
This commit is contained in:
parent
557ecf8150
commit
e70b37865f
@ -241,8 +241,9 @@ 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
|
var responseLen int
|
||||||
responseBuffer := buf.NewSize(dns.FixedPacketSize)
|
response, responseLen = dns.TruncateDNSMessage(&message, response)
|
||||||
|
responseBuffer := buf.NewSize(1024 + responseLen)
|
||||||
responseBuffer.Resize(1024, 0)
|
responseBuffer.Resize(1024, 0)
|
||||||
n, err := response.PackBuffer(responseBuffer.FreeBytes())
|
n, err := response.PackBuffer(responseBuffer.FreeBytes())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -264,22 +265,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
|
|
||||||
}
|
|
||||||
newResponse := *response
|
|
||||||
response = &newResponse
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user