From cea728ee4a4022f44849685ddc3c8a8a26e1cf29 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Olivier=20Cr=C3=AAte?= Date: Sat, 17 May 2014 01:29:14 -0400 Subject: [PATCH] address: add nice_address_equal_no_port() to compare addresses ignoring ports --- agent/address.c | 20 ++++++++++++++++++++ agent/address.h | 17 +++++++++++++++++ docs/reference/libnice/libnice-sections.txt | 1 + nice/libnice.sym | 1 + win32/vs9/libnice.def | 1 + 5 files changed, 40 insertions(+) diff --git a/agent/address.c b/agent/address.c index 830873c..0cfe5d1 100644 --- a/agent/address.c +++ b/agent/address.c @@ -391,3 +391,23 @@ nice_address_ip_version (const NiceAddress *addr) return 0; } } + +NICEAPI_EXPORT gboolean +nice_address_equal_no_port (const NiceAddress *a, const NiceAddress *b) +{ + if (a->s.addr.sa_family != b->s.addr.sa_family) + return FALSE; + + switch (a->s.addr.sa_family) + { + case AF_INET: + return (a->s.ip4.sin_addr.s_addr == b->s.ip4.sin_addr.s_addr); + + case AF_INET6: + return IN6_ARE_ADDR_EQUAL (&a->s.ip6.sin6_addr, &b->s.ip6.sin6_addr) + && (a->s.ip6.sin6_scope_id == b->s.ip6.sin6_scope_id); + + default: + g_return_val_if_reached (FALSE); + } +} diff --git a/agent/address.h b/agent/address.h index 46d733f..2133d7b 100644 --- a/agent/address.h +++ b/agent/address.h @@ -235,6 +235,7 @@ nice_address_copy_to_sockaddr (const NiceAddress *addr, struct sockaddr *sin); * @b: Second #NiceAddress to compare * * Compares two #NiceAddress structures to see if they contain the same address + * and the same port. * * Returns: %TRUE if @a and @b are the same address, %FALSE if they are different */ @@ -242,6 +243,22 @@ gboolean nice_address_equal (const NiceAddress *a, const NiceAddress *b); /** + * nice_address_equal_no_port: + * @a: First #NiceAddress to compare + * @b: Second #NiceAddress to compare + * + * Compares two #NiceAddress structures to see if they contain the same address, + * ignoring the port. + * + * Returns: %TRUE if @a and @b are the same address, %FALSE if they + * are different + * + * Since: UNRELEASED + */ +gboolean +nice_address_equal_no_port (const NiceAddress *a, const NiceAddress *b); + +/** * nice_address_to_string: * @addr: The #NiceAddress to query * @dst: The string to fill diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt index 2a49bf6..9db982c 100644 --- a/docs/reference/libnice/libnice-sections.txt +++ b/docs/reference/libnice/libnice-sections.txt @@ -112,6 +112,7 @@ nice_address_set_from_string nice_address_set_from_sockaddr nice_address_copy_to_sockaddr nice_address_equal +nice_address_equal_no_port nice_address_to_string nice_address_is_private nice_address_is_valid diff --git a/nice/libnice.sym b/nice/libnice.sym index 2f0ef30..117d00a 100644 --- a/nice/libnice.sym +++ b/nice/libnice.sym @@ -1,6 +1,7 @@ nice_address_copy_to_sockaddr nice_address_dup nice_address_equal +nice_address_equal_no_port nice_address_free nice_address_get_port nice_address_init diff --git a/win32/vs9/libnice.def b/win32/vs9/libnice.def index 1faebc2..a9cd217 100644 --- a/win32/vs9/libnice.def +++ b/win32/vs9/libnice.def @@ -5,6 +5,7 @@ EXPORTS nice_address_copy_to_sockaddr nice_address_dup nice_address_equal +nice_address_equal_no_port nice_address_free nice_address_get_port nice_address_init -- 2.7.4