Skip to content

Commit 6c2a82b

Browse files
geky0xc0170
authored andcommitted
Add support for implementation-provided DNS servers
Support intended for DNS servers provided by DHCP requests.
1 parent 2f279dc commit 6c2a82b

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

features/net/network-socket/nsapi_dns.cpp

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
#include <stdlib.h>
2121

2222

23+
// DNS options
2324
#define DNS_BUFFER_SIZE 256
2425
#define DNS_TIMEOUT 5000
26+
#define DNS_SERVERS_SIZE 5
2527

26-
#define DNS_SERVERS_LENGTH (sizeof DNS_SERVERS / sizeof DNS_SERVERS[0])
27-
const nsapi_addr_t DNS_SERVERS[] = {
28+
nsapi_addr_t dns_servers[DNS_SERVERS_SIZE] = {
2829
{NSAPI_IPv4, {8, 8, 8, 8}},
2930
{NSAPI_IPv4, {209, 244, 0, 3}},
3031
{NSAPI_IPv4, {84, 200, 69, 80}},
@@ -33,6 +34,29 @@ const nsapi_addr_t DNS_SERVERS[] = {
3334
};
3435

3536

37+
// DNS server configuration
38+
NSAPI_C_LINKAGE
39+
int nsapi_dns_add_server(nsapi_addr_t addr)
40+
{
41+
memmove(&dns_servers[1], &dns_servers[0],
42+
(DNS_SERVERS_SIZE-1)*sizeof(nsapi_addr_t));
43+
44+
dns_servers[0] = addr;
45+
return 0;
46+
}
47+
48+
int nsapi_dns_add_server(const SocketAddress &address)
49+
{
50+
return nsapi_dns_add_server(address.get_addr());
51+
}
52+
53+
int nsapi_dns_add_server(const char *address)
54+
{
55+
return nsapi_dns_add_server(SocketAddress(address));
56+
}
57+
58+
59+
// DNS packet parsing
3660
static void dns_append_byte(uint8_t **p, uint8_t byte)
3761
{
3862
*(*p)++ = byte;
@@ -204,12 +228,12 @@ static int nsapi_dns_query_multiple(NetworkStack *stack,
204228
int result = NSAPI_ERROR_DNS_FAILURE;
205229

206230
// check against each dns server
207-
for (unsigned i = 0; i < DNS_SERVERS_LENGTH; i++) {
231+
for (unsigned i = 0; i < DNS_SERVERS_SIZE; i++) {
208232
// send the question
209233
uint8_t *p = packet;
210234
dns_append_question(&p, host, version);
211235

212-
err = socket.sendto(SocketAddress(DNS_SERVERS[i], 53), packet, DNS_BUFFER_SIZE);
236+
err = socket.sendto(SocketAddress(dns_servers[i], 53), packet, DNS_BUFFER_SIZE);
213237
if (err == NSAPI_ERROR_WOULD_BLOCK) {
214238
continue;
215239
} else if (err < 0) {

0 commit comments

Comments
 (0)