mirror of
https://github.com/miekg/dns.git
synced 2025-09-26 10:31:00 +02:00
Remove the use of reflection when packing and unpacking, instead generate all the pack and unpack functions using msg_generate. This will generate zmsg.go which in turn calls the helper functions from msg_helper.go. This increases the speed by about ~30% while cutting back on memory usage. Not all RRs are using it, but that will be rectified in upcoming PR. Most of the speed increase is in the header/question section parsing. These functions *are* not generated, but straight forward enough. The implementation can be found in msg.go. The new code has been fuzzed by go-fuzz, which turned up some issues. All files that started with 'z', and not autogenerated were renamed, i.e. zscan.go is now scan.go. Reflection is still used, in subsequent PRs it will be removed entirely.
39 lines
852 B
Go
39 lines
852 B
Go
package dns
|
|
|
|
// StringToType is the reverse of TypeToString, needed for string parsing.
|
|
var StringToType = reverseInt16(TypeToString)
|
|
|
|
// StringToClass is the reverse of ClassToString, needed for string parsing.
|
|
var StringToClass = reverseInt16(ClassToString)
|
|
|
|
// Map of opcodes strings.
|
|
var StringToOpcode = reverseInt(OpcodeToString)
|
|
|
|
// Map of rcodes strings.
|
|
var StringToRcode = reverseInt(RcodeToString)
|
|
|
|
// Reverse a map
|
|
func reverseInt8(m map[uint8]string) map[string]uint8 {
|
|
n := make(map[string]uint8, len(m))
|
|
for u, s := range m {
|
|
n[s] = u
|
|
}
|
|
return n
|
|
}
|
|
|
|
func reverseInt16(m map[uint16]string) map[string]uint16 {
|
|
n := make(map[string]uint16, len(m))
|
|
for u, s := range m {
|
|
n[s] = u
|
|
}
|
|
return n
|
|
}
|
|
|
|
func reverseInt(m map[int]string) map[string]int {
|
|
n := make(map[string]int, len(m))
|
|
for u, s := range m {
|
|
n[s] = u
|
|
}
|
|
return n
|
|
}
|