diff options
| author | Garrett D'Amore <garrett@damore.org> | 2025-10-19 10:40:26 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2025-10-19 19:16:30 -0700 |
| commit | 611c4acdddab9d702d235c2bcfe3b69002e93569 (patch) | |
| tree | 6a1065c07db8eb01cd4be0a436e9375ad3979b90 /src/core/sockaddr.c | |
| parent | 29769c0c3623a023eb12edb378b19116f64ee5b7 (diff) | |
| download | nng-611c4acdddab9d702d235c2bcfe3b69002e93569.tar.gz nng-611c4acdddab9d702d235c2bcfe3b69002e93569.tar.bz2 nng-611c4acdddab9d702d235c2bcfe3b69002e93569.zip | |
Add support for OpenSSL v3.5 and newer.
We are *only* supporting 3.5 (or newer 3.x releases) as its the newest LTS version of OpenSSL.
This supports the full set of TLS features with NNG, including DTLS, PSK, TLS 1.3, etc.
Future work will explore making using of the QUIC support in OpenSSL.
Note that this OpenSSL work sits on top of NNG's TCP streams, so it cannot benefit from
Linux in-kernel TLS or other features such as TCP fast open at this time.
Diffstat (limited to 'src/core/sockaddr.c')
| -rw-r--r-- | src/core/sockaddr.c | 25 |
1 files changed, 18 insertions, 7 deletions
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); |
