diff options
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.cc | 104 |
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; |