diff options
Diffstat (limited to 'src/dns.h')
-rw-r--r-- | src/dns.h | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -2,6 +2,69 @@ #include <stdint.h> +//TODO remove +#include <stdio.h> + +struct dns_header; + +struct dns_question; + +struct dns_answer; + +/** + * DNS Message struct + * */ +struct dns_message; + +struct dns_header { + uint16_t id; + + uint8_t QR; //Query:0 Reply:1 + uint8_t OPCODE; //Query:0 Iquery:1 Status:2 + uint8_t AA; //Authorative answer + uint8_t TC; //Truncation + uint8_t RD; //Recursion Desired + uint8_t RA; //Recursion Available + uint8_t Z; //Unused + uint8_t RCODE; //Response Code + + uint16_t question_count; + uint16_t answer_count; + uint16_t authorative_count; + uint16_t additional_count; +}; + +struct dns_question { + char* qname; + uint16_t qtype; + uint16_t qclass; +}; + +struct dns_answer { + char* name; //in qname format + uint16_t type; + uint16_t class; + uint32_t ttl; + uint16_t rdlength; + char* rdata; +}; + +struct dns_message { + struct dns_header header; + + int qcount; + struct dns_question* question; + + int acount; + struct dns_answer* answer; +}; + +/** + * Parse the packet in _buffer and populate the dns_message struct + * returns: 0 on success, !=0 on failure + * */ +int dns_parse_packet ( char* _buffer, int _bufflen, struct dns_message* _msg ); + /** * Convert a null terminated string containing a * fqdn (eg server.example.com) to the binary format used by DNS records |