diff --git a/dnstt-server/main.go b/dnstt-server/main.go index 979bbb8..7ee24c0 100644 --- a/dnstt-server/main.go +++ b/dnstt-server/main.go @@ -111,7 +111,16 @@ func acceptSessions(ln *kcp.Listener, upstream *net.TCPAddr) error { 1, // nc=1 => congestion window off ) // Set the maximum transmission unit. - mtu := dnsMessageCapacity() + longName, err := dns.NewName([][]byte{ + bytes.Repeat([]byte{'a'}, 63), + bytes.Repeat([]byte{'b'}, 63), + bytes.Repeat([]byte{'c'}, 63), + bytes.Repeat([]byte{'d'}, 61), + }) + if err != nil { + panic(err) + } + mtu := dnsMessageCapacity(longName) if mtu < 80 { // This value doesn't depend on any configuration values, so it // should never be too small. @@ -128,22 +137,13 @@ func acceptSessions(ln *kcp.Listener, upstream *net.TCPAddr) error { } } -func dnsMessageCapacity() int { - longName, err := dns.NewName([][]byte{ - bytes.Repeat([]byte{'a'}, 63), - bytes.Repeat([]byte{'b'}, 63), - bytes.Repeat([]byte{'c'}, 63), - bytes.Repeat([]byte{'d'}, 61), - }) - if err != nil { - panic(err) - } +func dnsMessageCapacity(name dns.Name) int { message := dns.Message{ Question: []dns.Question{ - dns.Question{Name: longName}, + dns.Question{Name: name}, }, Answer: []dns.RR{ - dns.RR{Name: longName}, + dns.RR{Name: name}, }, } builder, err := message.WireFormat() @@ -328,7 +328,7 @@ func sendLoop(dnsConn net.PacketConn, ttConn *turbotunnel.QueuePacketConn, ch <- // section with downstream packets. var payload bytes.Buffer - limit := 4096 + limit := dnsMessageCapacity(rec.Resp.Question[0].Name) if len(nextP) > 0 { // No length check on any packet left over from // the previous bundle -- if it's too large, we