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
3660static 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