forked from acouzens/open5gs
remove type
This commit is contained in:
parent
5cebb48bc6
commit
d874ec5b48
|
@ -88,14 +88,8 @@ struct c_sockaddr_t {
|
|||
|
||||
typedef list_t c_socklist_t;
|
||||
|
||||
#define SOCKNODE_TYPE_NONE 0
|
||||
#define SOCKNODE_TYPE_IPV4 1
|
||||
#define SOCKNODE_TYPE_IPV6 2
|
||||
#define SOCKNODE_TYPE_IPV4_AND_IPV6 3
|
||||
typedef struct _c_socknode_t {
|
||||
lnode_t node;
|
||||
|
||||
int type;
|
||||
c_sockaddr_t *addr;
|
||||
} c_socknode_t;
|
||||
|
||||
|
@ -127,9 +121,6 @@ CORE_DECLARE(c_sockaddr_t *) sock_remote_addr(sock_id id);
|
|||
/*
|
||||
* Socket Address
|
||||
*/
|
||||
CORE_DECLARE(status_t) sockaddr_init(void);
|
||||
CORE_DECLARE(status_t) sockaddr_final(void);
|
||||
|
||||
CORE_DECLARE(c_socknode_t *) socknode_add(c_socklist_t *list,
|
||||
int family, const char *hostname, c_uint16_t port, int flags);
|
||||
CORE_DECLARE(status_t) socknode_remove(c_socklist_t *list, c_socknode_t *node);
|
||||
|
|
|
@ -292,7 +292,7 @@ c_sockaddr_t *sock_remote_addr(sock_id id)
|
|||
* Socket Address
|
||||
*/
|
||||
static c_socknode_t *socknode_add_internal(
|
||||
c_socklist_t *list, int type, c_sockaddr_t *addr)
|
||||
c_socklist_t *list, c_sockaddr_t *addr)
|
||||
{
|
||||
c_socknode_t *node = NULL;
|
||||
|
||||
|
@ -300,7 +300,6 @@ static c_socknode_t *socknode_add_internal(
|
|||
d_assert(node, return NULL,);
|
||||
memset(node, 0, sizeof(c_socknode_t));
|
||||
|
||||
node->type = type;
|
||||
node->addr = addr;
|
||||
|
||||
list_append(list, node);
|
||||
|
@ -312,13 +311,7 @@ c_socknode_t *socknode_add(c_socklist_t *list,
|
|||
int family, const char *hostname, c_uint16_t port, int flags)
|
||||
{
|
||||
status_t rv;
|
||||
|
||||
c_sockaddr_t *addr = NULL;
|
||||
int type = 0;
|
||||
|
||||
c_sockaddr_t *iter = NULL;
|
||||
int ipv4 = 0;
|
||||
int ipv6 = 0;
|
||||
|
||||
rv = core_getaddrinfo(&addr, family, hostname, port, flags);
|
||||
if (rv != CORE_OK)
|
||||
|
@ -329,25 +322,8 @@ c_socknode_t *socknode_add(c_socklist_t *list,
|
|||
}
|
||||
|
||||
d_assert(addr, return NULL,);
|
||||
iter = addr;
|
||||
while(iter)
|
||||
{
|
||||
if (iter->c_sa_family == AF_INET) ipv4 = 1;
|
||||
else if (iter->c_sa_family == AF_INET6) ipv6 = 1;
|
||||
else
|
||||
d_assert(0, return NULL, "family = %d\n", iter->c_sa_family);
|
||||
|
||||
iter = iter->next;
|
||||
}
|
||||
d_assert(ipv4 || ipv6, return NULL,);
|
||||
|
||||
if (ipv4 && ipv6) type = SOCKNODE_TYPE_IPV4_AND_IPV6;
|
||||
else if (ipv4) type = SOCKNODE_TYPE_IPV4;
|
||||
else if (ipv6) type = SOCKNODE_TYPE_IPV6;
|
||||
else
|
||||
d_assert(0, return NULL,);
|
||||
|
||||
return socknode_add_internal(list, type, addr);
|
||||
return socknode_add_internal(list, addr);
|
||||
}
|
||||
|
||||
status_t socknode_remove(c_socklist_t *list, c_socknode_t *node)
|
||||
|
@ -392,18 +368,12 @@ status_t socknode_getifaddrs_to_list(c_socklist_t *list, c_uint16_t port)
|
|||
|
||||
for (cur = iflist; cur != NULL; cur = cur->ifa_next)
|
||||
{
|
||||
c_sockaddr_t *ptr;
|
||||
|
||||
c_sockaddr_t *addr = NULL;
|
||||
int type = 0;
|
||||
|
||||
int ipv4 = 0;
|
||||
int ipv6 = 0;
|
||||
|
||||
if (cur->ifa_addr == NULL) /* may happen with ppp interfaces */
|
||||
continue;
|
||||
|
||||
ptr = (c_sockaddr_t *)cur->ifa_addr;
|
||||
addr = (c_sockaddr_t *)cur->ifa_addr;
|
||||
if (cur->ifa_addr->sa_family == AF_INET)
|
||||
{
|
||||
#ifndef IN_IS_ADDR_LOOPBACK
|
||||
|
@ -416,38 +386,28 @@ status_t socknode_getifaddrs_to_list(c_socklist_t *list, c_uint16_t port)
|
|||
#define IN_IS_ADDR_UNSPECIFIED(a) \
|
||||
(((long int) (a)->s_addr) == 0x00000000)
|
||||
#endif /* IN_IS_ADDR_UNSPECIFIED */
|
||||
if (IN_IS_ADDR_UNSPECIFIED(&ptr->sin.sin_addr) ||
|
||||
IN_IS_ADDR_LOOPBACK(&ptr->sin.sin_addr))
|
||||
if (IN_IS_ADDR_UNSPECIFIED(&addr->sin.sin_addr) ||
|
||||
IN_IS_ADDR_LOOPBACK(&addr->sin.sin_addr))
|
||||
continue;
|
||||
ipv4 = 1;
|
||||
}
|
||||
else if (cur->ifa_addr->sa_family == AF_INET6)
|
||||
{
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&ptr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_LOOPBACK(&ptr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_MULTICAST(&ptr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_LINKLOCAL(&ptr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_SITELOCAL(&ptr->sin6.sin6_addr))
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&addr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_LOOPBACK(&addr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_MULTICAST(&addr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_LINKLOCAL(&addr->sin6.sin6_addr) ||
|
||||
IN6_IS_ADDR_SITELOCAL(&addr->sin6.sin6_addr))
|
||||
continue;
|
||||
ipv6 = 1;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
d_assert(ipv4 || ipv6, return CORE_ERROR,);
|
||||
|
||||
if (ipv4 && ipv6) type = SOCKNODE_TYPE_IPV4_AND_IPV6;
|
||||
else if (ipv4) type = SOCKNODE_TYPE_IPV4;
|
||||
else if (ipv6) type = SOCKNODE_TYPE_IPV6;
|
||||
else
|
||||
d_assert(0, return CORE_ERROR,);
|
||||
|
||||
addr = core_calloc(1, sizeof(c_sockaddr_t));
|
||||
d_assert(addr, return CORE_ERROR,);
|
||||
memcpy(&addr->sa, cur->ifa_addr, sockaddr_len(cur->ifa_addr));
|
||||
addr->c_sa_port = htons(port);
|
||||
|
||||
d_assert(socknode_add_internal(list, type, addr), return CORE_ERROR,);
|
||||
d_assert(socknode_add_internal(list, addr), return CORE_ERROR,);
|
||||
}
|
||||
|
||||
freeifaddrs(iflist);
|
||||
|
|
|
@ -301,7 +301,6 @@ static void sock_test7(abts_case *tc, void *data)
|
|||
ABTS_PTR_NOTNULL(tc, addr);
|
||||
ABTS_STR_EQUAL(tc, "::1", CORE_ADDR(addr, buf));
|
||||
ABTS_INT_EQUAL(tc, PORT, CORE_PORT(addr));
|
||||
ABTS_INT_EQUAL(tc, SOCKNODE_TYPE_IPV6, node->type);
|
||||
|
||||
node = list_next(node);
|
||||
ABTS_PTR_NOTNULL(tc, node);
|
||||
|
@ -309,14 +308,12 @@ static void sock_test7(abts_case *tc, void *data)
|
|||
ABTS_PTR_NOTNULL(tc, addr);
|
||||
ABTS_STR_EQUAL(tc, "0.0.0.0", CORE_ADDR(addr, buf));
|
||||
ABTS_INT_EQUAL(tc, PORT, CORE_PORT(addr));
|
||||
ABTS_INT_EQUAL(tc, SOCKNODE_TYPE_IPV4, node->type);
|
||||
|
||||
node = list_next(node);
|
||||
ABTS_PTR_NOTNULL(tc, node);
|
||||
addr = node->addr;
|
||||
ABTS_PTR_NOTNULL(tc, addr);
|
||||
ABTS_INT_EQUAL(tc, PORT, CORE_PORT(addr));
|
||||
ABTS_INT_EQUAL(tc, SOCKNODE_TYPE_IPV4_AND_IPV6, node->type);
|
||||
|
||||
rv = socknode_getifaddrs_to_list(&list, PORT);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
|
Loading…
Reference in New Issue