20
20
#include < stdlib.h>
21
21
22
22
23
+ // DNS options
23
24
#define DNS_BUFFER_SIZE 256
24
25
#define DNS_TIMEOUT 5000
26
+ #define DNS_SERVERS_SIZE 5
25
27
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] = {
28
29
{NSAPI_IPv4, {8 , 8 , 8 , 8 }},
29
30
{NSAPI_IPv4, {209 , 244 , 0 , 3 }},
30
31
{NSAPI_IPv4, {84 , 200 , 69 , 80 }},
@@ -33,6 +34,29 @@ const nsapi_addr_t DNS_SERVERS[] = {
33
34
};
34
35
35
36
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
36
60
static void dns_append_byte (uint8_t **p, uint8_t byte)
37
61
{
38
62
*(*p)++ = byte;
@@ -204,12 +228,12 @@ static int nsapi_dns_query_multiple(NetworkStack *stack,
204
228
int result = NSAPI_ERROR_DNS_FAILURE;
205
229
206
230
// 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++) {
208
232
// send the question
209
233
uint8_t *p = packet;
210
234
dns_append_question (&p, host, version);
211
235
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);
213
237
if (err == NSAPI_ERROR_WOULD_BLOCK) {
214
238
continue ;
215
239
} else if (err < 0 ) {
0 commit comments