Skip to content

Commit e10a3b3

Browse files
author
Cruz Monrreal
authored
Merge pull request #7120 from mikaleppanen/dns_fail_corr
Fixed DNS resolution in case all sendto operations fail
2 parents a25b9f3 + 9ec1ec9 commit e10a3b3

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

features/netsocket/nsapi_dns.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,15 @@ struct DNS_QUERY {
8080
uint8_t dns_server;
8181
uint8_t retries;
8282
uint8_t total_attempts;
83+
uint8_t send_success;
8384
uint8_t count;
8485
dns_state state;
8586
};
8687

8788
static void nsapi_dns_cache_add(const char *host, nsapi_addr_t *address, uint32_t ttl);
8889
static nsapi_size_or_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t version, nsapi_addr_t *address);
8990

90-
static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, SocketAddress *dns_addr);
91+
static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, uint8_t *send_success, SocketAddress *dns_addr);
9192

9293
static void nsapi_dns_query_async_create(void *ptr);
9394
static nsapi_error_t nsapi_dns_query_async_delete(int unique_id);
@@ -384,7 +385,7 @@ static nsapi_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t vers
384385
return ret_val;
385386
}
386387

387-
static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, SocketAddress *dns_addr)
388+
static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, uint8_t *send_success, SocketAddress *dns_addr)
388389
{
389390
bool dns_addr_set = false;
390391

@@ -393,8 +394,10 @@ static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *ind
393394
}
394395

395396
if (*index >= DNS_SERVERS_SIZE + DNS_STACK_SERVERS_NUM) {
396-
if (*total_attempts) {
397+
// If there are total attempts left and send to has been successful at least once on this round
398+
if (*total_attempts && *send_success) {
397399
*index = 0;
400+
*send_success = 0;
398401
} else {
399402
return NSAPI_ERROR_NO_ADDRESS;
400403
}
@@ -453,11 +456,12 @@ static nsapi_size_or_error_t nsapi_dns_query_multiple(NetworkStack *stack, const
453456
uint8_t retries = MBED_CONF_NSAPI_DNS_RETRIES;
454457
uint8_t index = 0;
455458
uint8_t total_attempts = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS;
459+
uint8_t send_success = 0;
456460

457461
// check against each dns server
458462
while (true) {
459463
SocketAddress dns_addr;
460-
err = nsapi_dns_get_server_addr(stack, &index, &total_attempts, &dns_addr);
464+
err = nsapi_dns_get_server_addr(stack, &index, &total_attempts, &send_success, &dns_addr);
461465
if (err != NSAPI_ERROR_OK) {
462466
break;
463467
}
@@ -474,6 +478,8 @@ static nsapi_size_or_error_t nsapi_dns_query_multiple(NetworkStack *stack, const
474478
continue;
475479
}
476480

481+
send_success++;
482+
477483
if (total_attempts) {
478484
total_attempts--;
479485
}
@@ -650,6 +656,7 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
650656
query->dns_server = 0;
651657
query->retries = MBED_CONF_NSAPI_DNS_RETRIES + 1;
652658
query->total_attempts = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS;
659+
query->send_success = 0;
653660
query->dns_message_id = 0;
654661
query->socket_timeout = 0;
655662
query->total_timeout = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS * MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME + 500;
@@ -971,7 +978,7 @@ static void nsapi_dns_query_async_send(void *ptr)
971978

972979
while (true) {
973980
SocketAddress dns_addr;
974-
nsapi_size_or_error_t err = nsapi_dns_get_server_addr(query->stack, &(query->dns_server), &(query->total_attempts), &dns_addr);
981+
nsapi_size_or_error_t err = nsapi_dns_get_server_addr(query->stack, &(query->dns_server), &(query->total_attempts), &(query->send_success), &dns_addr);
975982
if (err != NSAPI_ERROR_OK) {
976983
nsapi_dns_query_async_resp(query, NSAPI_ERROR_TIMEOUT, NULL);
977984
free(packet);
@@ -987,6 +994,8 @@ static void nsapi_dns_query_async_send(void *ptr)
987994
}
988995
}
989996

997+
query->send_success++;
998+
990999
if (query->total_attempts) {
9911000
query->total_attempts--;
9921001
}

0 commit comments

Comments
 (0)