@@ -13,6 +13,7 @@ bool DNSServer::start(const uint16_t &port, const String &domainName,
13
13
const IPAddress &resolvedIP)
14
14
{
15
15
_port = port;
16
+ _buffer = NULL ;
16
17
_domainName = domainName;
17
18
_resolvedIP[0 ] = resolvedIP[0 ];
18
19
_resolvedIP[1 ] = resolvedIP[1 ];
@@ -35,6 +36,8 @@ void DNSServer::setTTL(const uint32_t &ttl)
35
36
void DNSServer::stop ()
36
37
{
37
38
_udp.stop ();
39
+ free (_buffer);
40
+ _buffer = NULL ;
38
41
}
39
42
40
43
void DNSServer::downcaseAndRemoveWwwPrefix (String &domainName)
@@ -48,7 +51,9 @@ void DNSServer::processNextRequest()
48
51
_currentPacketSize = _udp.parsePacket ();
49
52
if (_currentPacketSize)
50
53
{
54
+ if (_buffer != NULL ) free (_buffer);
51
55
_buffer = (unsigned char *)malloc (_currentPacketSize * sizeof (char ));
56
+ if (_buffer == NULL ) return ;
52
57
_udp.read (_buffer, _currentPacketSize);
53
58
_dnsHeader = (DNSHeader*) _buffer;
54
59
@@ -66,6 +71,7 @@ void DNSServer::processNextRequest()
66
71
}
67
72
68
73
free (_buffer);
74
+ _buffer = NULL ;
69
75
}
70
76
}
71
77
@@ -80,6 +86,7 @@ bool DNSServer::requestIncludesOnlyOneQuestion()
80
86
String DNSServer::getDomainNameWithoutWwwPrefix ()
81
87
{
82
88
String parsedDomainName = " " ;
89
+ if (_buffer == NULL ) return parsedDomainName;
83
90
unsigned char *start = _buffer + 12 ;
84
91
if (*start == 0 )
85
92
{
@@ -109,6 +116,7 @@ String DNSServer::getDomainNameWithoutWwwPrefix()
109
116
110
117
void DNSServer::replyWithIP ()
111
118
{
119
+ if (_buffer == NULL ) return ;
112
120
_dnsHeader->QR = DNS_QR_RESPONSE;
113
121
_dnsHeader->ANCount = _dnsHeader->QDCount ;
114
122
_dnsHeader->QDCount = _dnsHeader->QDCount ;
@@ -152,11 +160,12 @@ void DNSServer::replyWithIP()
152
160
153
161
void DNSServer::replyWithCustomCode ()
154
162
{
163
+ if (_buffer == NULL ) return ;
155
164
_dnsHeader->QR = DNS_QR_RESPONSE;
156
165
_dnsHeader->RCode = (unsigned char )_errorReplyCode;
157
166
_dnsHeader->QDCount = 0 ;
158
167
159
168
_udp.beginPacket (_udp.remoteIP (), _udp.remotePort ());
160
169
_udp.write (_buffer, sizeof (DNSHeader));
161
170
_udp.endPacket ();
162
- }
171
+ }
0 commit comments