aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/defs.h7
-rw-r--r--src/core/sockaddr.c25
2 files changed, 25 insertions, 7 deletions
diff --git a/src/core/defs.h b/src/core/defs.h
index c94d9bd3..0ca885b3 100644
--- a/src/core/defs.h
+++ b/src/core/defs.h
@@ -261,4 +261,11 @@ extern void *nni_zalloc(size_t);
// Most implementations can just call free() here.
extern void nni_free(void *, size_t);
+// nni_inet_ntop is like inet_ntop, but for NNG_AF_INET and NNG_AF_INET6. The
+// output buffer must be able to contain at least 46 bytes. Note that
+// NNG_AF_UNSPEC is explicitly unsupported, as we do not pass the address
+// length.
+extern char *nni_inet_ntop(
+ enum nng_sockaddr_family af, const uint8_t *addr, char *buf);
+
#endif // CORE_DEFS_H
diff --git a/src/core/sockaddr.c b/src/core/sockaddr.c
index 9dcfa3bc..39e527da 100644
--- a/src/core/sockaddr.c
+++ b/src/core/sockaddr.c
@@ -24,17 +24,27 @@ str_sa_inet(const nng_sockaddr_in *sa, char *buf, size_t bufsz)
{
uint8_t *a_bytes = (uint8_t *) &sa->sa_addr;
uint8_t *p_bytes = (uint8_t *) &sa->sa_port;
+ char ipbuf[46];
- snprintf(buf, bufsz, "%u.%u.%u.%u:%u", a_bytes[0], a_bytes[1],
- a_bytes[2], a_bytes[3],
+ snprintf(buf, bufsz, "%s:%u",
+ nni_inet_ntop(NNG_AF_INET, a_bytes, ipbuf),
(((uint16_t) p_bytes[0]) << 8) + p_bytes[1]);
return (buf);
}
-// emit an IPv6 address in "short form"
-static char *
-nni_inet_ntop(const uint8_t addr[16], char buf[46])
+// emit an IP address, only NNG_AF_INET and NNG_AF_INET6 explicitly are
+// supported. (NO support for NNG_AF_UNSPEC.)
+char *
+nni_inet_ntop(enum nng_sockaddr_family af, const uint8_t *addr, char *buf)
{
+ if (af == NNG_AF_INET) {
+ snprintf(buf, 46, "%u.%u.%u.%u", addr[0], addr[1], addr[2],
+ addr[3]);
+ return (buf);
+ }
+ if (af != NNG_AF_INET6) {
+ return (NULL);
+ }
const uint8_t v4map[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff };
@@ -106,11 +116,12 @@ str_sa_inet6(const nng_sockaddr_in6 *sa, char *buf, size_t bufsz)
if (sa->sa_scope) {
snprintf(buf, bufsz, "[%s%%%u]:%u",
- nni_inet_ntop(sa->sa_addr, istr), sa->sa_scope,
+ nni_inet_ntop(NNG_AF_INET6, sa->sa_addr, istr),
+ sa->sa_scope,
(((uint16_t) (p_bytes[0])) << 8) + p_bytes[1]);
} else {
snprintf(buf, bufsz, "[%s]:%u",
- nni_inet_ntop(sa->sa_addr, istr),
+ nni_inet_ntop(NNG_AF_INET6, sa->sa_addr, istr),
(((uint16_t) (p_bytes[0])) << 8) + p_bytes[1]);
}
return (buf);