36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
#ifndef INCLUDED_C_SOCKADDRUTIL_H
|
|
#define INCLUDED_C_SOCKADDRUTIL_H
|
|
|
|
#ifndef INCLUDED_C_SOCKADDR_H
|
|
#include <c_SockAddr.h>
|
|
#endif /*INCLUDED_C_SOCKADDR_H*/
|
|
|
|
|
|
#ifndef INCLUDED_C_ADDRINFO_H
|
|
#include <c_AddrInfo.h>
|
|
#endif /*INCLUDED_C_ADDRINFO_H*/
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------------------------ */
|
|
/* */
|
|
|
|
|
|
/**
|
|
* @brief Extends extraction mapping from a resolved c_AddrInfo_t instance.
|
|
*/
|
|
C_STATIC_FORCE_INLINE c_err_t c_SockAddrUtil_FromAddrInfo(c_SockAddr_t* sock_addr, const c_AddrInfo_t* addr) {
|
|
if (!sock_addr || !addr || !addr->addrinfo_p) return C_ERR_PARAM;
|
|
|
|
size_t len = addr->addrinfo_p->ai_addrlen;
|
|
if (addr->addrinfo_p->ai_family == AF_INET && len <= sizeof(struct sockaddr_in)) {
|
|
memcpy(&sock_addr->ipv4, addr->addrinfo_p->ai_addr, len);
|
|
return C_ERR_OK;
|
|
} else if (addr->addrinfo_p->ai_family == AF_INET6 && len <= sizeof(struct sockaddr_in6)) {
|
|
memcpy(&sock_addr->ipv6, addr->addrinfo_p->ai_addr, len);
|
|
return C_ERR_OK;
|
|
}
|
|
return C_ERR_FAIL;
|
|
}
|
|
|
|
#endif /*INCLUDED_C_SOCKADDRUTIL_H*/
|