Add RawSetRdlength back in

This commit is contained in:
Miek Gieben 2012-01-11 16:02:05 +01:00
parent 2143ce0031
commit 76efc275a3
1 changed files with 38 additions and 0 deletions

View File

@ -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
}