X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftypes.c;h=17cb910eae5901dc54d69d02022c2870621b5b23;hb=b0e8338ab13a968e398e8db4e81d5022af2059a2;hp=e0ff9e29e2110dedff965acd85023d887f100cc5;hpb=c3a165f5e0c576df7bfa0febcdac973ecd23dea7;p=adns.git diff --git a/src/types.c b/src/types.c index e0ff9e2..17cb910 100644 --- a/src/types.c +++ b/src/types.c @@ -47,7 +47,8 @@ * _intstr (mf,csp,cs) * _manyistr (mf,cs) * _txt (pa) - * _inaddr (pa,di,cs +search_sortlist, dip_genaddr) + * _inaddr (pa,di,cs + * +search_sortlist, dip_genaddr, csp_genaddr) * _addr (pa,di,div,csp,cs,gsz * +search_sortlist_sa, dip_sockaddr) * _domain (pap,csp,cs) @@ -244,7 +245,7 @@ static adns_status cs_hinfo(vbuf *vb, const void *datap) { } /* - * _inaddr (pa,di,cs +search_sortlist, dip_genaddr) + * _inaddr (pa,di,cs +search_sortlist, dip_genaddr, csp_genaddr) */ static adns_status pa_inaddr(const parseinfo *pai, int cbyte, @@ -282,15 +283,24 @@ static int di_inaddr(adns_state ads, return dip_genaddr(ads,AF_INET,datap_a,datap_b); } -static adns_status cs_inaddr(vbuf *vb, const void *datap) { - const struct in_addr *rrp= datap, rr= *rrp; - const char *ia; +static adns_status csp_genaddr(vbuf *vb, int af, const void *p) { + char buf[ADNS_ADDR2TEXT_BUFLEN]; + int len= sizeof(buf); + adns_rr_addr a; + int err; - ia= inet_ntoa(rr); assert(ia); - CSP_ADDSTR(ia); + memset(&a, 0, sizeof(a)); + a.addr.sa.sa_family= af; + adns__sockaddr_inject(p, 0, &a.addr.sa); + err= adns_addr2text(&a.addr.sa,0, buf,&len, 0); assert(!err); + CSP_ADDSTR(buf); return adns_s_ok; } +static adns_status cs_inaddr(vbuf *vb, const void *datap) { + return csp_genaddr(vb, AF_INET,datap); +} + /* * _addr (pa,di,div,csp,cs,gsz +search_sortlist_sa, dip_sockaddr) */ @@ -333,14 +343,20 @@ static int div_addr(void *context, const void *datap_a, const void *datap_b) { } static adns_status csp_addr(vbuf *vb, const adns_rr_addr *rrp) { - const char *ia; - char buf[30]; + char buf[ADNS_ADDR2TEXT_BUFLEN]; + int len= sizeof(buf); + int err; switch (rrp->addr.inet.sin_family) { case AF_INET: CSP_ADDSTR("INET "); - ia= inet_ntoa(rrp->addr.inet.sin_addr); assert(ia); - CSP_ADDSTR(ia); + goto a2t; + case AF_INET6: + CSP_ADDSTR("INET6 "); + goto a2t; + a2t: + err= adns_addr2text(&rrp->addr.sa,0, buf,&len, 0); assert(!err); + CSP_ADDSTR(buf); break; default: sprintf(buf,"AF=%u",rrp->addr.sa.sa_family);