From 59f4caf4efcbd76478cdd2a1d800c0978144c5ba Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 19 Jul 2018 22:13:19 +0200 Subject: add osmo_sockaddr_to_str_and_uint() This came from osmo-bsc refactoring patch I82e3f918295daa83274a4cf803f046979f284366 https://gerrit.osmocom.org/#/c/osmo-bsc/+/9671/6/src/osmo-bsc/gsm_data.c@1708 Add regression test in utils_test.c. Change-Id: I1f2918418c38918c5ac70acaa51a47adfca12b5e --- src/socket.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/socket.c') diff --git a/src/socket.c b/src/socket.c index cd73f17c..04058474 100644 --- a/src/socket.c +++ b/src/socket.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -553,6 +554,25 @@ int osmo_sockaddr_is_local(struct sockaddr *addr, unsigned int addrlen) return 0; } +/*! Convert sockaddr to IP address as char string and port as uint16_t. + * \param[out] addr String buffer to write IP address to, or NULL. + * \param[out] addr_len Size of \a addr. + * \param[out] port Pointer to uint16_t to write the port number to, or NULL. + * \param[in] sa Sockaddr to convert. + * \returns the required string buffer size, like osmo_strlcpy(), or 0 if \a addr is NULL. + */ +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; + + if (port) + *port = ntohs(sin->sin_port); + if (addr) + return osmo_strlcpy(addr, inet_ntoa(sin->sin_addr), addr_len); + return 0; +} + /*! Initialize a unix domain socket (including bind/connect) * \param[in] type Socket type like SOCK_DGRAM, SOCK_STREAM * \param[in] proto Protocol like IPPROTO_TCP, IPPROTO_UDP -- cgit v1.2.3