Last few fixes and remove debugging prints
This commit is contained in:
parent
cedf11f27b
commit
28f5e6c1ed
|
@ -38,7 +38,7 @@ func main() {
|
||||||
}
|
}
|
||||||
println(r.String())
|
println(r.String())
|
||||||
buf, _ := r.Pack()
|
buf, _ := r.Pack()
|
||||||
dns.Compress(buf)
|
buf = dns.Compress(buf)
|
||||||
r1 := new(dns.Msg)
|
r1 := new(dns.Msg)
|
||||||
ok := r1.Unpack(buf)
|
ok := r1.Unpack(buf)
|
||||||
if ok {
|
if ok {
|
||||||
|
|
40
rawmsg.go
40
rawmsg.go
|
@ -4,10 +4,6 @@
|
||||||
|
|
||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
const maxPointer = 2 << 13 // We have 14 bits for the offset
|
const maxPointer = 2 << 13 // We have 14 bits for the offset
|
||||||
|
|
||||||
// Function defined in this subpackage work on []byte and but still
|
// Function defined in this subpackage work on []byte and but still
|
||||||
|
@ -31,8 +27,8 @@ type rawmove struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compress performs name comression in the dns message contained in buf.
|
// Compress performs name comression in the dns message contained in buf.
|
||||||
// It returns the number of bytes saved.
|
// It returns the shortened buffer.
|
||||||
func Compress(msg []byte) int {
|
func Compress(msg []byte) []byte {
|
||||||
|
|
||||||
// First we create a table of domain names to which we
|
// First we create a table of domain names to which we
|
||||||
// can link. This is stored in 'table'
|
// can link. This is stored in 'table'
|
||||||
|
@ -42,7 +38,7 @@ func Compress(msg []byte) int {
|
||||||
// traversed the entire message, we perform all the
|
// traversed the entire message, we perform all the
|
||||||
// moves.
|
// moves.
|
||||||
// TODO: Maybe it should be optimized.
|
// TODO: Maybe it should be optimized.
|
||||||
// TODO: put this in the packRR function
|
// TODO: put this in the packRR function
|
||||||
|
|
||||||
// Map the labels to the offset in the message
|
// Map the labels to the offset in the message
|
||||||
table := make(map[string]int)
|
table := make(map[string]int)
|
||||||
|
@ -78,14 +74,14 @@ Loop:
|
||||||
//println("met lengte", len(name)+1)
|
//println("met lengte", len(name)+1)
|
||||||
// the +1 for the name is for the null byte at the end
|
// the +1 for the name is for the null byte at the end
|
||||||
|
|
||||||
// Discount for previous moves, decrease the poffset counter
|
// Discount for previous moves, decrease the poffset counter
|
||||||
// with moves that occur before it
|
// with moves that occur before it
|
||||||
for i := len(moves)-1; i >= 0; i-- {
|
for i := len(moves) - 1; i >= 0; i-- {
|
||||||
if poffset > moves[i].from {
|
if poffset > moves[i].from {
|
||||||
poffset -= (moves[i].length - 2)
|
poffset -= (moves[i].length - 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Only need to shorten the RR when I'm shortening the rdata
|
// Only need to shorten the RR when I'm shortening the rdata
|
||||||
moves = append(moves, rawmove{offset: poffset, from: moffset, length: len(name) + 1})
|
moves = append(moves, rawmove{offset: poffset, from: moffset, length: len(name) + 1})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +96,7 @@ Loop:
|
||||||
// In the "body" of the msg
|
// In the "body" of the msg
|
||||||
off += 2 + 2 + 4 + 1 // type, class, ttl + 1
|
off += 2 + 2 + 4 + 1 // type, class, ttl + 1
|
||||||
// we are at the rdlength
|
// we are at the rdlength
|
||||||
rdlength, _ := unpackUint16(msg, off)
|
rdlength, _ := unpackUint16(msg, off)
|
||||||
off += int(rdlength) + 1 // Skip the rdata
|
off += int(rdlength) + 1 // Skip the rdata
|
||||||
}
|
}
|
||||||
off++
|
off++
|
||||||
|
@ -132,14 +128,14 @@ Loop:
|
||||||
saved := 0
|
saved := 0
|
||||||
// Start at the back, easier to move
|
// Start at the back, easier to move
|
||||||
for i := len(moves) - 1; i >= 0; i-- {
|
for i := len(moves) - 1; i >= 0; i-- {
|
||||||
fmt.Printf("%v\n", moves[i])
|
// fmt.Printf("%v\n", moves[i])
|
||||||
// move the bytes
|
// move the bytes
|
||||||
copy(msg[moves[i].from+1:], msg[moves[i].from+moves[i].length-1:])
|
copy(msg[moves[i].from+1:], msg[moves[i].from+moves[i].length-1:])
|
||||||
// Now set the pointer at moves[i].from and moves[i].from+1
|
// Now set the pointer at moves[i].from and moves[i].from+1
|
||||||
fmt.Printf("bits %b\n", moves[i].offset^0xC000)
|
// fmt.Printf("bits %b\n", moves[i].offset^0xC000)
|
||||||
msg[moves[i].from], msg[moves[i].from+1] = packUint16(uint16(moves[i].offset ^ 0xC000))
|
msg[moves[i].from], msg[moves[i].from+1] = packUint16(uint16(moves[i].offset ^ 0xC000))
|
||||||
saved += moves[i].length // minus something
|
saved += (moves[i].length - 2) // minus something
|
||||||
}
|
}
|
||||||
msg = msg[:len(msg) - saved]
|
msg = msg[:len(msg)-saved]
|
||||||
return saved
|
return msg
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue