djbdnscurve6  38
djbdnscurve6
dns_resolve.c
Go to the documentation of this file.
1 #include "iopause.h"
2 #include "taia.h"
3 #include "byte.h"
4 #include "ip.h"
5 #include "dns.h"
6 
7 struct dns_transmit dns_resolve_tx = {0};
8 
9 int dns_resolve(const char *q,const char qtype[2])
10 {
11  struct taia stamp;
12  struct taia deadline;
13  char servers[QUERY_MAXIPLEN];
14  uint32 scopes[QUERY_MAXNS];
15  iopause_fd x[1];
16  int r;
17 
18  if (dns_resolvconfip(servers,scopes) < 0) return DNS_INT;
19 
20  if (dns_transmit_start6(&dns_resolve_tx,servers,1,q,qtype,(const char *)V6localnet,scopes) < 0) return DNS_COM;
21 
22  for (;;) {
23  taia_now(&stamp);
24  taia_uint(&deadline,120);
25  taia_add(&deadline,&deadline,&stamp);
26  dns_transmit_io(&dns_resolve_tx,x,&deadline);
27  r = iopause(x,1,&deadline,&stamp);
28  r = dns_transmit_get(&dns_resolve_tx,x,&stamp);
29  if (r < 0) return DNS_COM;
30  if (r == 1) return 0;
31  }
32 }
void dns_transmit_io(struct dns_transmit *, iopause_fd *, struct taia *)
Definition: dns_transmit.c:284
int dns_resolvconfip(char *, uint32 *)
#define QUERY_MAXIPLEN
Definition: dns.h:30
#define DNS_INT
Definition: dns.h:24
#define QUERY_MAXNS
Definition: dns.h:29
int dns_transmit_start6(struct dns_transmit *, const char *, int, const char *, const char *, const char *, const uint32 *)
#define DNS_COM
Definition: dns.h:23
int dns_transmit_get(struct dns_transmit *, const iopause_fd *, const struct taia *)
Definition: dns_transmit.c:301
int dns_resolve(const char *q, const char qtype[2])
Definition: dns_resolve.c:9
struct dns_transmit dns_resolve_tx
Definition: dns_resolve.c:7
char servers[QUERY_MAXIPLEN]
Definition: dnsfilter.c:48
struct line * x
uint32 scopes[QUERY_MAXNS]
Definition: dnsfilter.c:49
char qtype[2]
Definition: dns.h:93