summaryrefslogtreecommitdiff
path: root/www/chromium/files/patch-net_socket_udp__socket__posix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'www/chromium/files/patch-net_socket_udp__socket__posix.cc')
-rw-r--r--www/chromium/files/patch-net_socket_udp__socket__posix.cc104
1 files changed, 39 insertions, 65 deletions
diff --git a/www/chromium/files/patch-net_socket_udp__socket__posix.cc b/www/chromium/files/patch-net_socket_udp__socket__posix.cc
index ab7b488ba777..9eb5240440a5 100644
--- a/www/chromium/files/patch-net_socket_udp__socket__posix.cc
+++ b/www/chromium/files/patch-net_socket_udp__socket__posix.cc
@@ -1,93 +1,67 @@
---- net/socket/udp_socket_posix.cc.orig 2020-05-13 18:39:46 UTC
+--- net/socket/udp_socket_posix.cc.orig 2020-11-13 06:36:46 UTC
+++ net/socket/udp_socket_posix.cc
-@@ -70,7 +70,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+@@ -70,6 +70,32 @@ const int kActivityMonitorMinimumSamplesForThroughputE
const base::TimeDelta kActivityMonitorMsThreshold =
base::TimeDelta::FromMilliseconds(100);
--#if defined(OS_MACOSX)
-+#if defined(OS_MACOSX) || defined(OS_BSD)
- // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
- // requires passing IPv4 address instead of interface index. This function
- // resolves IPv4 address by interface index. The |address| is returned in
-@@ -99,7 +99,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
- return OK;
- }
-
--#endif // OS_MACOSX
-+#endif // OS_MACOSX || OS_BSD
-
- #if defined(OS_MACOSX) && !defined(OS_IOS)
++#if defined(OS_BSD)
++int GetIPv4AddressFromIndex(int socket, uint32_t index, uint32_t* address) {
++ if (!index) {
++ *address = htonl(INADDR_ANY);
++ return OK;
++ }
++
++ sockaddr_in* result = nullptr;
++
++ ifreq ifr;
++ ifr.ifr_addr.sa_family = AF_INET;
++ if (!if_indextoname(index, ifr.ifr_name))
++ return MapSystemError(errno);
++ int rv = ioctl(socket, SIOCGIFADDR, &ifr);
++ if (rv == -1)
++ return MapSystemError(errno);
++ result = reinterpret_cast<sockaddr_in*>(&ifr.ifr_addr);
++
++ if (!result)
++ return ERR_ADDRESS_INVALID;
++
++ *address = result->sin_addr.s_addr;
++ return OK;
++}
++#endif
++
+ #if defined(OS_MAC)
-@@ -645,13 +645,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ // On OSX the file descriptor is guarded to detect the cause of
+@@ -622,13 +648,13 @@ int UDPSocketPosix::SetDoNotFragment() {
}
void UDPSocketPosix::SetMsgConfirm(bool confirm) {
--#if !defined(OS_MACOSX) && !defined(OS_IOS)
-+#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+-#if !defined(OS_APPLE)
++#if !defined(OS_APPLE) && !defined(OS_BSD)
if (confirm) {
sendto_flags_ |= MSG_CONFIRM;
} else {
sendto_flags_ &= ~MSG_CONFIRM;
}
--#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
-+#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+-#endif // !defined(OS_APPLE)
++#endif // !defined(OS_APPLE) && !defined(OS_BSD)
}
int UDPSocketPosix::AllowAddressReuse() {
-@@ -666,17 +666,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- int value = broadcast ? 1 : 0;
- int rv;
--#if defined(OS_MACOSX)
-+#if defined(OS_MACOSX) || defined(OS_BSD)
- // SO_REUSEPORT on OSX permits multiple processes to each receive
- // UDP multicast or broadcast datagrams destined for the bound
- // port.
- // This is only being set on OSX because its behavior is platform dependent
- // and we are playing it safe by only setting it on platforms where things
- // break.
-+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
-+ if (rv != 0)
-+ return MapSystemError(errno);
- rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
- if (rv != 0)
- return MapSystemError(errno);
--#endif // defined(OS_MACOSX)
-+#endif // defined(OS_MACOSX) || defined(OS_BSD)
- rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
-
- return rv == 0 ? OK : MapSystemError(errno);
-@@ -936,7 +939,7 @@ int UDPSocketPosix::SetMulticastOptions() {
- if (multicast_interface_ != 0) {
- switch (addr_family_) {
- case AF_INET: {
--#if defined(OS_MACOSX)
-+#if defined(OS_MACOSX) || defined(OS_BSD)
- ip_mreq mreq = {};
- int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
- &mreq.imr_interface.s_addr);
-@@ -948,7 +951,11 @@ int UDPSocketPosix::SetMulticastOptions() {
+@@ -917,7 +943,11 @@ int UDPSocketPosix::SetMulticastOptions() {
+ mreq.imr_ifindex = multicast_interface_;
mreq.imr_address.s_addr = htonl(INADDR_ANY);
- #endif // !defined(OS_MACOSX)
int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
+#if defined(OS_BSD)
-+ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr), sizeof(mreq.imr_interface.s_addr));
++ reinterpret_cast<const char*>(&mreq.imr_address.s_addr), sizeof(mreq.imr_address.s_addr));
+#else
reinterpret_cast<const char*>(&mreq), sizeof(mreq));
+#endif
if (rv)
return MapSystemError(errno);
break;
-@@ -1010,7 +1017,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
- if (addr_family_ != AF_INET)
- return ERR_ADDRESS_INVALID;
-
--#if defined(OS_MACOSX)
-+#if defined(OS_MACOSX) || defined(OS_BSD)
- ip_mreq mreq = {};
- int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
- &mreq.imr_interface.s_addr);
-@@ -1058,9 +1065,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
+@@ -1018,9 +1048,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
case IPAddress::kIPv4AddressSize: {
if (addr_family_ != AF_INET)
return ERR_ADDRESS_INVALID;