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