#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <netdb.h>
#include "internal.h"
/* Core diagnostic functions */
+const char *adns__sockaddr_ntoa(struct sockaddr *sa, size_t n, char *buf)
+{
+ int err;
+
+ err = getnameinfo(sa, n, buf, MAX_ADDRSTRLEN, 0, 0, NI_NUMERICHOST);
+ assert(!err);
+ return buf;
+}
+
void adns__vlprintf(adns_state ads, const char *fmt, va_list al) {
ads->logfn(ads,ads->logfndata,fmt,al);
}
void adns__vdiag(adns_state ads, const char *pfx, adns_initflags prevent,
int serv, adns_query qu, const char *fmt, va_list al) {
+ char buf[MAX_ADDRSTRLEN];
const char *bef, *aft;
vbuf vb;
}
if (serv>=0) {
- adns__lprintf(ads,"%sNS=%s",bef,inet_ntoa(ads->servers[serv].addr));
+ adns__lprintf(ads,"%sNS=%s",bef,
+ adns__sockaddr_ntoa(&ads->servers[serv].addr.sa,
+ ads->servers[serv].len, buf));
bef=", "; aft=")\n";
}
if (rrtname_r) *rrtname_r= typei->rrtname;
if (fmtname_r) *fmtname_r= typei->fmtname;
- if (len_r) *len_r= typei->rrsz;
+ if (len_r) *len_r= typei->getrrsz ? typei->getrrsz(type) : typei->rrsz;
if (!datap) return adns_s_ok;