10 #include "printpacket.h"
11 #include "parsetype.h"
14 #define FATAL "dnsq: fatal: "
18 strerr_die1x(100,"dnsq: usage: dnsq type name server");
22 strerr_die2sys(111,FATAL
,"unable to parse: ");
25 static struct dns_transmit tx
;
27 int resolve(char *q
,char qtype
[2],char servers
[64])
34 if (dns_transmit_start(&tx
,servers
,0,q
,qtype
,"\0\0\0\0") == -1) return -1;
38 taia_uint(&deadline
,120);
39 taia_add(&deadline
,&deadline
,&stamp
);
40 dns_transmit_io(&tx
,x
,&deadline
);
41 iopause(x
,1,&deadline
,&stamp
);
42 r
= dns_transmit_get(&tx
,x
,&stamp
);
43 if (r
== -1) return -1;
59 static char seed
[128];
61 int main(int argc
,char **argv
)
65 dns_random_init(seed
);
68 if (!*++argv
) usage();
69 if (!parsetype(*argv
,type
)) usage();
71 if (!*++argv
) usage();
72 if (!dns_domain_fromdot(&q
,*argv
,str_len(*argv
))) oops();
74 if (!*++argv
) usage();
75 if (!stralloc_copys(&out
,*argv
)) oops();
76 if (dns_ip4_qualify(&ip
,&fqdn
,&out
) == -1) oops();
77 if (ip
.len
>= 64) ip
.len
= 64;
78 byte_zero(servers
,64);
79 byte_copy(servers
,ip
.len
,ip
.s
);
81 if (!stralloc_copys(&out
,"")) oops();
82 uint16_unpack_big(type
,&u16
);
83 if (!stralloc_catulong0(&out
,u16
,0)) oops();
84 if (!stralloc_cats(&out
," ")) oops();
85 if (!dns_domain_todot_cat(&out
,q
)) oops();
86 if (!stralloc_cats(&out
,":\n")) oops();
88 if (resolve(q
,type
,servers
) == -1) {
89 if (!stralloc_cats(&out
,error_str(errno
))) oops();
90 if (!stralloc_cats(&out
,"\n")) oops();
93 if (!printpacket_cat(&out
,tx
.packet
,tx
.packetlen
)) oops();
96 buffer_putflush(buffer_1
,out
.s
,out
.len
);