aboutsummaryrefslogtreecommitdiff
path: root/app/message.go
diff options
context:
space:
mode:
authorjet2tlf <jet2tlf@gmail.com>2024-06-03 05:43:21 +0000
committerjet2tlf <jet2tlf@gmail.com>2024-06-03 05:43:21 +0000
commitddaa6d76691453203459038a35aae5aa086dfad4 (patch)
tree54a651954fa57bd9cdf190ffc9aab4e71fc0e425 /app/message.go
parent57e0aa0ac0c6efd1dd50b354826cc21b6a5ffdc1 (diff)
downloaddns-server-go-ddaa6d76691453203459038a35aae5aa086dfad4.tar.gz
dns-server-go-ddaa6d76691453203459038a35aae5aa086dfad4.zip
codecrafters submit [skip ci]
Diffstat (limited to 'app/message.go')
-rw-r--r--app/message.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/app/message.go b/app/message.go
index 0604d0e..931a6f0 100644
--- a/app/message.go
+++ b/app/message.go
@@ -89,3 +89,21 @@ func (m *DNSMessage) AddAnswer(a DNSAnswer) {
func MakeAnswer(name []byte, rdata []byte) DNSAnswer {
return DNSAnswer{Name: name, Type: 1, Class: 1, TTL: 60, RDLength: uint16(len(rdata)), RData: rdata}
}
+
+func ParseHeader(buf []byte) DNSHeader {
+ return DNSHeader{
+ ID: binary.BigEndian.Uint16(buf[0:2]),
+ QR: uint8(buf[2] >> 7),
+ OPCODE: uint8(buf[2] >> 3 & 0x0f),
+ AA: uint8(buf[2] >> 2 & 0x01),
+ TC: uint8(buf[2] >> 1 & 0x01),
+ RD: uint8(buf[2] & 0x01),
+ RA: uint8(buf[3] >> 7),
+ Z: uint8(buf[3] >> 4 & 0x07),
+ RCODE: uint8(buf[3] & 0x0f),
+ QDCOUNT: binary.BigEndian.Uint16(buf[4:6]),
+ ANCOUNT: binary.BigEndian.Uint16(buf[6:8]),
+ NSCOUNT: binary.BigEndian.Uint16(buf[8:10]),
+ ARCOUNT: binary.BigEndian.Uint16(buf[10:12]),
+ }
+}