762 |
|
static void |
763 |
|
res_readreply(fde_t *fd, void *data) |
764 |
|
{ |
765 |
< |
char buf[sizeof(HEADER) + MAXPACKET]; |
765 |
> |
char buf[sizeof(HEADER) + MAXPACKET] |
766 |
> |
/* Sparc and alpha need 16bit-alignment for accessing header->id |
767 |
> |
* (which is uint16_t). Because of the header = (HEADER*) buf; |
768 |
> |
* lateron, this is neeeded. --FaUl |
769 |
> |
*/ |
770 |
> |
#if defined(__sparc__) || defined(__alpha__) |
771 |
> |
__attribute__((aligned (16))) |
772 |
> |
#endif |
773 |
> |
; |
774 |
|
HEADER *header; |
775 |
|
struct reslist *request = NULL; |
776 |
|
struct DNSReply *reply = NULL; |
813 |
|
|
814 |
|
if ((header->rcode != NO_ERRORS) || (header->ancount == 0)) |
815 |
|
{ |
816 |
< |
if (SERVFAIL == header->rcode) |
809 |
< |
{ |
810 |
< |
/* |
811 |
< |
* If a bad error was returned, we stop here and dont send |
812 |
< |
* send any more (no retries granted). |
813 |
< |
*/ |
814 |
< |
(*request->query->callback)(request->query->ptr, NULL); |
815 |
< |
rem_request(request); |
816 |
< |
} |
817 |
< |
else |
816 |
> |
if (NXDOMAIN == header->rcode) |
817 |
|
{ |
818 |
|
/* |
819 |
|
* If we havent already tried this, and we're looking up AAAA, try A |
820 |
|
* now |
821 |
|
*/ |
823 |
– |
|
822 |
|
#ifdef IPV6 |
823 |
|
if (request->state == REQ_AAAA && request->type == T_AAAA) |
824 |
|
{ |
830 |
|
{ |
831 |
|
request->state = REQ_INT; |
832 |
|
request->timeout += 4; |
833 |
< |
request->retries--; |
833 |
> |
request->retries--; |
834 |
|
resend_query(request); |
835 |
|
} |
836 |
+ |
else |
837 |
|
#endif |
838 |
+ |
{ |
839 |
+ |
/* |
840 |
+ |
* If a bad error was returned, stop here and don't |
841 |
+ |
* send any more (no retries granted). |
842 |
+ |
*/ |
843 |
+ |
(*request->query->callback)(request->query->ptr, NULL); |
844 |
+ |
rem_request(request); |
845 |
+ |
} |
846 |
+ |
return; |
847 |
|
} |
840 |
– |
|
841 |
– |
return; |
848 |
|
} |
849 |
|
/* |
850 |
|
* If this fails there was an error decoding the received packet, |