Add osmo_sockaddr_str_from_sockaddr2()

Contrary to its name, osmo_sockaddr_str_from_sockaddr() acts on 'struct sockaddr_storage' instead of 'struct sockaddr'.
Let's remediate this by adding new function.

Related: OS#5581
Change-Id: I36f20701663c3c7eae7fedc6551da44800b325bf
This commit is contained in:
Max 2022-08-09 00:17:01 +07:00
parent 4a51c06962
commit e5642131c7
2 changed files with 26 additions and 0 deletions

View File

@ -86,6 +86,7 @@ int osmo_sockaddr_str_from_32h(struct osmo_sockaddr_str *sockaddr_str, uint32_t
int osmo_sockaddr_str_from_sockaddr_in(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_in *src);
int osmo_sockaddr_str_from_sockaddr_in6(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_in6 *src);
int osmo_sockaddr_str_from_sockaddr(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr_storage *src);
int osmo_sockaddr_str_from_sockaddr2(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr *src);
int osmo_sockaddr_str_to_in_addr(const struct osmo_sockaddr_str *sockaddr_str, struct in_addr *dst);
int osmo_sockaddr_str_to_in6_addr(const struct osmo_sockaddr_str *sockaddr_str, struct in6_addr *dst);

View File

@ -370,6 +370,31 @@ int osmo_sockaddr_str_from_sockaddr_in6(struct osmo_sockaddr_str *sockaddr_str,
return osmo_sockaddr_str_from_in6_addr(sockaddr_str, &src->sin6_addr, osmo_ntohs(src->sin6_port));
}
/*! Convert IPv4 or IPv6 address and port to osmo_sockaddr_str.
* \param[out] sockaddr_str The instance to copy to.
* \param[in] src IPv4 or IPv6 address and port data.
* \return 0 on success, negative if src does not indicate AF_INET nor AF_INET6 (or if the conversion fails, which
* should not be possible in practice).
*/
int osmo_sockaddr_str_from_sockaddr2(struct osmo_sockaddr_str *sockaddr_str, const struct sockaddr *src)
{
unsigned guess = (src->sa_family == AF_UNSPEC) ? osmo_sockaddr_guess_unspec(src) : src->sa_family;
if (!sockaddr_str)
return -ENOSPC;
if (!src)
return -EINVAL;
if (guess == AF_INET)
return osmo_sockaddr_str_from_sockaddr_in(sockaddr_str, (const struct sockaddr_in *)src);
if (guess == AF_INET6)
return osmo_sockaddr_str_from_sockaddr_in6(sockaddr_str, (const struct sockaddr_in6 *)src);
return -ENOTSOCK;
}
/*! Convert IPv4 or IPv6 address and port to osmo_sockaddr_str.
* \param[out] sockaddr_str The instance to copy to.
* \param[in] src IPv4 or IPv6 address and port data.