diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-08-28 18:31:32 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2020-08-31 08:50:42 +0000 |
commit | 1a3d24e8a583e0fac171e026bee32fa3ef403a2e (patch) | |
tree | f44d96791ade41675b88b57bd73d443af75233ad /src/socket.c | |
parent | 4f463c5ccce7527c6a3fd98c7f4a32c68638888a (diff) |
socket: Add support for AF_INET6 in osmo_sockaddr_to_str_and_uint()
Related: SYS#4915
Change-Id: I439c7fa52a3a30eebc3d35e78be7f1724fb69294
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/socket.c b/src/socket.c index a5bbddf5..e88af16e 100644 --- a/src/socket.c +++ b/src/socket.c @@ -983,9 +983,22 @@ size_t osmo_sockaddr_in_to_str_and_uint(char *addr, unsigned int addr_len, uint1 unsigned int osmo_sockaddr_to_str_and_uint(char *addr, unsigned int addr_len, uint16_t *port, const struct sockaddr *sa) { - const struct sockaddr_in *sin = (const struct sockaddr_in *)sa; - return osmo_sockaddr_in_to_str_and_uint(addr, addr_len, port, sin); + const struct sockaddr_in6 *sin6; + + switch (sa->sa_family) { + case AF_INET: + return osmo_sockaddr_in_to_str_and_uint(addr, addr_len, port, + (const struct sockaddr_in *)sa); + case AF_INET6: + sin6 = (const struct sockaddr_in6 *)sa; + if (port) + *port = ntohs(sin6->sin6_port); + if (addr && inet_ntop(sa->sa_family, &sin6->sin6_addr, addr, addr_len)) + return strlen(addr); + break; + } + return 0; } /*! Initialize a unix domain socket (including bind/connect) |