mirror of https://gerrit.osmocom.org/libosmocore
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:
parent
4a51c06962
commit
e5642131c7
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue