123456789101112131415161718192021222324252627282930 |
- package dns
- import (
- "github.com/sagernet/sing/common/buf"
- "github.com/miekg/dns"
- )
- func TruncateDNSMessage(request *dns.Msg, response *dns.Msg, headroom int) (*buf.Buffer, error) {
- maxLen := 512
- if edns0Option := request.IsEdns0(); edns0Option != nil {
- if udpSize := int(edns0Option.UDPSize()); udpSize > 512 {
- maxLen = udpSize
- }
- }
- responseLen := response.Len()
- if responseLen > maxLen {
- response = response.Copy()
- response.Truncate(maxLen)
- }
- buffer := buf.NewSize(headroom*2 + 1 + responseLen)
- buffer.Resize(headroom, 0)
- rawMessage, err := response.PackBuffer(buffer.FreeBytes())
- if err != nil {
- buffer.Release()
- return nil, err
- }
- buffer.Truncate(len(rawMessage))
- return buffer, nil
- }
|