mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-07-13 10:46:31 +02:00
DNS Server : bug fix and prettifying (#1011)
* Retrieve some code from what has been done on the ESP8266. Clarify a bit the signification of several bytes in the response. * Add the type and class as members of the DNS class for an eventual future use. * Clarify the sense of a magic number present in DNS server. * A bit of aesthetics for the DNS server. * Add a structure for the DNS question, use it DNS server to store the question data and to create the DNS answer from scratch.
This commit is contained in:
@ -5,20 +5,43 @@
|
||||
#define DNS_QR_QUERY 0
|
||||
#define DNS_QR_RESPONSE 1
|
||||
#define DNS_OPCODE_QUERY 0
|
||||
#define DNS_DEFAULT_TTL 60 // Default Time To Live : time interval in seconds that the resource record should be cached before being discarded
|
||||
#define DNS_OFFSET_DOMAIN_NAME 12 // Offset in bytes to reach the domain name in the DNS message
|
||||
#define DNS_HEADER_SIZE 12
|
||||
|
||||
enum class DNSReplyCode
|
||||
{
|
||||
NoError = 0,
|
||||
NoError = 0,
|
||||
FormError = 1,
|
||||
ServerFailure = 2,
|
||||
ServerFailure = 2,
|
||||
NonExistentDomain = 3,
|
||||
NotImplemented = 4,
|
||||
Refused = 5,
|
||||
YXDomain = 6,
|
||||
YXRRSet = 7,
|
||||
NXRRSet = 8
|
||||
NotImplemented = 4,
|
||||
Refused = 5,
|
||||
YXDomain = 6,
|
||||
YXRRSet = 7,
|
||||
NXRRSet = 8
|
||||
};
|
||||
|
||||
enum DNSType
|
||||
{
|
||||
DNS_TYPE_A = 1, // Host Address
|
||||
DNS_TYPE_AAAA = 28, // IPv6 Address
|
||||
DNS_TYPE_SOA = 6, // Start Of a zone of Authority
|
||||
DNS_TYPE_PTR = 12, // Domain name PoinTeR
|
||||
DNS_TYPE_DNAME = 39 // Delegation Name
|
||||
} ;
|
||||
|
||||
enum DNSClass
|
||||
{
|
||||
DNS_CLASS_IN = 1, // INternet
|
||||
DNS_CLASS_CH = 3 // CHaos
|
||||
} ;
|
||||
|
||||
enum DNSRDLength
|
||||
{
|
||||
DNS_RDLENGTH_IPV4 = 4 // 4 bytes for an IPv4 address
|
||||
} ;
|
||||
|
||||
struct DNSHeader
|
||||
{
|
||||
uint16_t ID; // identification number
|
||||
@ -41,6 +64,14 @@ struct DNSHeader
|
||||
uint16_t ARCount; // number of resource entries
|
||||
};
|
||||
|
||||
struct DNSQuestion
|
||||
{
|
||||
uint8_t QName[255] ;
|
||||
int8_t QNameLength ;
|
||||
uint16_t QType ;
|
||||
uint16_t QClass ;
|
||||
} ;
|
||||
|
||||
class DNSServer
|
||||
{
|
||||
public:
|
||||
@ -66,6 +97,8 @@ class DNSServer
|
||||
DNSHeader* _dnsHeader;
|
||||
uint32_t _ttl;
|
||||
DNSReplyCode _errorReplyCode;
|
||||
DNSQuestion* _dnsQuestion ;
|
||||
|
||||
|
||||
void downcaseAndRemoveWwwPrefix(String &domainName);
|
||||
String getDomainNameWithoutWwwPrefix();
|
||||
|
Reference in New Issue
Block a user