implement isc_sockaddr_totext() in terms of isc_netaddr_totext()

This commit is contained in:
Andreas Gustafsson
2000-05-26 00:41:57 +00:00
parent 8eaa51a699
commit bb25076ffc

View File

@@ -110,43 +110,39 @@ isc_sockaddr_eqaddrprefix(const isc_sockaddr_t *a, const isc_sockaddr_t *b,
isc_result_t isc_result_t
isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target) { isc_sockaddr_totext(const isc_sockaddr_t *sockaddr, isc_buffer_t *target) {
char abuf[sizeof "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255"]; isc_result_t result;
unsigned int alen; isc_netaddr_t netaddr;
char pbuf[sizeof "65000"]; char pbuf[sizeof "65000"];
unsigned int plen; unsigned int plen;
isc_region_t avail; isc_region_t avail;
const struct sockaddr *sa;
const struct sockaddr_in *sin;
const struct sockaddr_in6 *sin6;
REQUIRE(sockaddr != NULL); REQUIRE(sockaddr != NULL);
sa = &sockaddr->type.sa; isc_netaddr_fromsockaddr(&netaddr, sockaddr);
switch (sa->sa_family) { result = isc_netaddr_totext(&netaddr, target);
if (result != ISC_R_SUCCESS)
return (result);
switch (sockaddr->type.sa.sa_family) {
case AF_INET: case AF_INET:
sin = &sockaddr->type.sin; sprintf(pbuf, "%u", ntohs(sockaddr->type.sin.sin_port));
inet_ntop(sa->sa_family, &sin->sin_addr, abuf, sizeof abuf);
sprintf(pbuf, "%u", ntohs(sin->sin_port));
break; break;
case AF_INET6: case AF_INET6:
sin6 = &sockaddr->type.sin6; sprintf(pbuf, "%u", ntohs(sockaddr->type.sin6.sin6_port));
inet_ntop(sa->sa_family, &sin6->sin6_addr, abuf, sizeof abuf);
sprintf(pbuf, "%u", ntohs(sin6->sin6_port));
break; break;
default: default:
return (ISC_R_NOTIMPLEMENTED); INSIST(0);
break;
} }
alen = strlen(abuf);
plen = strlen(pbuf); plen = strlen(pbuf);
INSIST(plen < sizeof(pbuf));
isc_buffer_availableregion(target, &avail);
if (alen + 1 + plen + 1 > avail.length) if (1 + plen + 1 > isc_buffer_availablelength(target))
return (ISC_R_NOSPACE); return (ISC_R_NOSPACE);
isc_buffer_putmem(target, (unsigned char *) abuf, alen);
isc_buffer_putmem(target, (unsigned char *)"#", 1); isc_buffer_putmem(target, (unsigned char *)"#", 1);
isc_buffer_putmem(target, (unsigned char *) pbuf, plen); isc_buffer_putmem(target, (unsigned char *)pbuf, plen);
/* Null terminate after used region. */ /* Null terminate after used region. */
isc_buffer_availableregion(target, &avail); isc_buffer_availableregion(target, &avail);