Add RawSetRdlength back in
This commit is contained in:
parent
2143ce0031
commit
76efc275a3
38
rawmsg.go
38
rawmsg.go
|
@ -12,3 +12,41 @@ func RawSetId(msg []byte, off int, id uint16) bool {
|
|||
msg[off], msg[off+1] = packUint16(id)
|
||||
return true
|
||||
}
|
||||
|
||||
// RawSetRdLength set the rdlength
|
||||
func RawSetRdLength(msg []byte, off, end int) bool {
|
||||
// We are at the start of the header, walk the
|
||||
// domainname (might be compressed), and set the
|
||||
// length
|
||||
Loop:
|
||||
for {
|
||||
if off > len(msg) {
|
||||
return false
|
||||
}
|
||||
c := int(msg[off])
|
||||
off++
|
||||
switch c & 0xC00 {
|
||||
case 0x00:
|
||||
if c == 0x00 {
|
||||
// End of the domainname
|
||||
break Loop
|
||||
}
|
||||
|
||||
case 0xC0:
|
||||
// pointer, next byte included, ends domainnames
|
||||
off++
|
||||
break Loop
|
||||
}
|
||||
}
|
||||
// The domainname has been seen, we at the start
|
||||
// of the fixed part in the header
|
||||
// type is 2 bytes, class is 2 bytes, ttl 4 and then 2 bytes for the length
|
||||
off += 2 + 2 + 4
|
||||
if off+1 > len(msg) {
|
||||
return false
|
||||
}
|
||||
//off+1 is the end of the header, 'end' is the end of the rr
|
||||
//so 'end' - 'off+2' is the lenght of the rdata
|
||||
msg[off], msg[off+1] = packUint16(uint16(end - (off+2)))
|
||||
return true
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue