From ebd9abc1a23db8fe9acfd163155e0f9bc544b10e Mon Sep 17 00:00:00 2001 From: Yongje Lee Date: Fri, 27 Apr 2018 09:47:07 +0900 Subject: [PATCH] Use IFA_LOCAL instead of IFA_ADDRESS over IPv4 network on ANDROID IFA_ADDRESS gives DESTINATION address in case of point-to-point connection, which is not able to create ports for candidate gathering. Use IFA_LOCAL to avoid this problem. Bug: webrtc:9189 Change-Id: Ifcb1955b1b4011dc69c93d99b4e223b370dc16eb Reviewed-on: https://webrtc-review.googlesource.com/69620 Commit-Queue: Tommi Reviewed-by: Tommi Cr-Commit-Position: refs/heads/master@{#23055} --- AUTHORS | 1 + rtc_base/ifaddrs-android.cc | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/AUTHORS b/AUTHORS index 9394364856..8e7e1830a4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -68,6 +68,7 @@ ARM Holdings <*@arm.com> BroadSoft Inc. <*@broadsoft.com> Facebook Inc. <*@fb.com> Google Inc. <*@google.com> +HyperConnect Inc. <*@hpcnt.com> Life On Air Inc. <*@lifeonair.com> Intel Corporation <*@intel.com> MIPS Technologies <*@mips.com> diff --git a/rtc_base/ifaddrs-android.cc b/rtc_base/ifaddrs-android.cc index 85a4497fdd..b713c02442 100644 --- a/rtc_base/ifaddrs-android.cc +++ b/rtc_base/ifaddrs-android.cc @@ -174,24 +174,24 @@ int getifaddrs(struct ifaddrs** result) { rtattr* rta = IFA_RTA(address_msg); ssize_t payload_len = IFA_PAYLOAD(header); while (RTA_OK(rta, payload_len)) { - if (rta->rta_type == IFA_ADDRESS) { - int family = address_msg->ifa_family; - if (family == AF_INET || family == AF_INET6) { - ifaddrs* newest = new ifaddrs; - memset(newest, 0, sizeof(ifaddrs)); - if (current) { - current->ifa_next = newest; - } else { - start = newest; - } - if (populate_ifaddrs(newest, address_msg, RTA_DATA(rta), - RTA_PAYLOAD(rta)) != 0) { - freeifaddrs(start); - *result = nullptr; - return -1; - } - current = newest; + if ((address_msg->ifa_family == AF_INET && + rta->rta_type == IFA_LOCAL) || + (address_msg->ifa_family == AF_INET6 && + rta->rta_type == IFA_ADDRESS)) { + ifaddrs* newest = new ifaddrs; + memset(newest, 0, sizeof(ifaddrs)); + if (current) { + current->ifa_next = newest; + } else { + start = newest; } + if (populate_ifaddrs(newest, address_msg, RTA_DATA(rta), + RTA_PAYLOAD(rta)) != 0) { + freeifaddrs(start); + *result = nullptr; + return -1; + } + current = newest; } rta = RTA_NEXT(rta, payload_len); }