Bug 1960474 - Add LNA utility functions. r=necko-reviewers,valentin
Differential Revision: https://phabricator.services.mozilla.com/D238479
This commit is contained in:
committed by
smayya@mozilla.com
parent
78cc49157a
commit
7fc56ed888
@@ -225,8 +225,8 @@ LoadInfo::LoadInfo(
|
|||||||
aLoadingContext->OwnerDoc()->CookieJarSettings())
|
aLoadingContext->OwnerDoc()->CookieJarSettings())
|
||||||
->Clone();
|
->Clone();
|
||||||
}
|
}
|
||||||
// TODO browsing context id is not set. Check how we need to handle setting
|
// XXX(sunil) browsing context id is not set. Check how we need to handle
|
||||||
// of parent IP address space if not availble.
|
// setting of parent IP address space if not availble.
|
||||||
|
|
||||||
mInnerWindowID = aLoadingContext->OwnerDoc()->InnerWindowID();
|
mInnerWindowID = aLoadingContext->OwnerDoc()->InnerWindowID();
|
||||||
RefPtr<WindowContext> ctx = WindowContext::GetById(mInnerWindowID);
|
RefPtr<WindowContext> ctx = WindowContext::GetById(mInnerWindowID);
|
||||||
@@ -2635,8 +2635,6 @@ void LoadInfo::UpdateParentAddressSpaceInfo() {
|
|||||||
RefPtr<mozilla::dom::BrowsingContext> bc;
|
RefPtr<mozilla::dom::BrowsingContext> bc;
|
||||||
GetBrowsingContext(getter_AddRefs(bc));
|
GetBrowsingContext(getter_AddRefs(bc));
|
||||||
if (!bc) {
|
if (!bc) {
|
||||||
// TODO: confirm this assumption holds for all cases
|
|
||||||
// See Bug 1967165
|
|
||||||
mParentIPAddressSpace = nsILoadInfo::Local;
|
mParentIPAddressSpace = nsILoadInfo::Local;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2649,8 +2647,8 @@ void LoadInfo::UpdateParentAddressSpaceInfo() {
|
|||||||
} else if (RefPtr<dom::BrowsingContext> opener = bc->GetOpener()) {
|
} else if (RefPtr<dom::BrowsingContext> opener = bc->GetOpener()) {
|
||||||
mParentIPAddressSpace = opener->GetCurrentIPAddressSpace();
|
mParentIPAddressSpace = opener->GetCurrentIPAddressSpace();
|
||||||
} else {
|
} else {
|
||||||
// TODO: add if this was loaded from about:blank. In that case we need to
|
// XXX (sunil): add if this was loaded from about:blank. In that case we
|
||||||
// give assign local IPAddress
|
// need to give assign local IPAddress
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// For non-document loads, we need to set the parent IPAddressSpace to
|
// For non-document loads, we need to set the parent IPAddressSpace to
|
||||||
|
|||||||
@@ -159,8 +159,30 @@ bool NetAddr::IsLoopbackAddr() const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return IPv6ADDR_IS_V4MAPPED(&addr->inet6.ip) &&
|
if (IPv6ADDR_IS_V4MAPPED(&addr->inet6.ip)) {
|
||||||
IPv6ADDR_V4MAPPED_TO_IPADDR(&addr->inet6.ip) == htonl(INADDR_LOOPBACK);
|
return IPv6ADDR_V4MAPPED_TO_IPADDR(&addr->inet6.ip) ==
|
||||||
|
htonl(INADDR_LOOPBACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPv6 loopback address ::1
|
||||||
|
uint64_t ipv6Addr1 = ntohl(addr->inet6.ip.u64[0]);
|
||||||
|
uint64_t ipv6Addr2 = ntohl(addr->inet6.ip.u64[1]);
|
||||||
|
return (ipv6Addr1 == 0 && ipv6Addr2 == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NetAddr::IsBenchMarkingAddress() const {
|
||||||
|
// check for 198.18.0.0/15
|
||||||
|
if (this->raw.family == AF_INET) {
|
||||||
|
uint32_t addr = ntohl(this->inet.ip) >> 17;
|
||||||
|
return addr == (0xC612 >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IPv6ADDR_IS_V4MAPPED(&this->inet6.ip)) {
|
||||||
|
uint32_t addr = ntohl(IPv6ADDR_V4MAPPED_TO_IPADDR(&this->inet6.ip)) >> 17;
|
||||||
|
return addr == (0xC612 >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NetAddr::IsLoopBackAddressWithoutIPv6Mapping() const {
|
bool NetAddr::IsLoopBackAddressWithoutIPv6Mapping() const {
|
||||||
@@ -214,6 +236,21 @@ bool NetAddr::IsIPAddrAny() const {
|
|||||||
|
|
||||||
NetAddr::NetAddr(const PRNetAddr* prAddr) { PRNetAddrToNetAddr(prAddr, this); }
|
NetAddr::NetAddr(const PRNetAddr* prAddr) { PRNetAddrToNetAddr(prAddr, this); }
|
||||||
|
|
||||||
|
nsILoadInfo::IPAddressSpace NetAddr::GetIpAddressSpace() const {
|
||||||
|
const NetAddr* addr = this;
|
||||||
|
|
||||||
|
if (addr->IsBenchMarkingAddress() || addr->IsLoopbackAddr() ||
|
||||||
|
addr->IsIPAddrAny()) {
|
||||||
|
return nsILoadInfo::IPAddressSpace::Local;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addr->IsIPAddrLocal() || addr->IsIPAddrShared()) {
|
||||||
|
return nsILoadInfo::IPAddressSpace::Private;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nsILoadInfo::IPAddressSpace::Public;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult NetAddr::InitFromString(const nsACString& aString, uint16_t aPort) {
|
nsresult NetAddr::InitFromString(const nsACString& aString, uint16_t aPort) {
|
||||||
PRNetAddr prAddr{};
|
PRNetAddr prAddr{};
|
||||||
memset(&prAddr, 0, sizeof(PRNetAddr));
|
memset(&prAddr, 0, sizeof(PRNetAddr));
|
||||||
@@ -245,7 +282,7 @@ static bool isLocalIPv4(uint32_t networkEndianIP) {
|
|||||||
uint32_t addr32 = ntohl(networkEndianIP);
|
uint32_t addr32 = ntohl(networkEndianIP);
|
||||||
return addr32 >> 24 == 0x00 || // 0/8 prefix (RFC 1122).
|
return addr32 >> 24 == 0x00 || // 0/8 prefix (RFC 1122).
|
||||||
addr32 >> 24 == 0x0A || // 10/8 prefix (RFC 1918).
|
addr32 >> 24 == 0x0A || // 10/8 prefix (RFC 1918).
|
||||||
addr32 >> 20 == 0xAC1 || // 172.16/12 prefix (RFC 1918).
|
addr32 >> 20 == 0x0AC1 || // 172.16/12 prefix (RFC 1918).
|
||||||
addr32 >> 16 == 0xC0A8 || // 192.168/16 prefix (RFC 1918).
|
addr32 >> 16 == 0xC0A8 || // 192.168/16 prefix (RFC 1918).
|
||||||
addr32 >> 16 == 0xA9FE; // 169.254/16 prefix (Link Local).
|
addr32 >> 16 == 0xA9FE; // 169.254/16 prefix (Link Local).
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#ifndef DNS_h_
|
#ifndef DNS_h_
|
||||||
#define DNS_h_
|
#define DNS_h_
|
||||||
|
|
||||||
|
#include "nsILoadInfo.h"
|
||||||
#include "nscore.h"
|
#include "nscore.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include "prio.h"
|
#include "prio.h"
|
||||||
@@ -148,6 +149,7 @@ union NetAddr {
|
|||||||
bool IsLoopbackAddr() const;
|
bool IsLoopbackAddr() const;
|
||||||
bool IsLoopBackAddressWithoutIPv6Mapping() const;
|
bool IsLoopBackAddressWithoutIPv6Mapping() const;
|
||||||
bool IsIPAddrV4() const;
|
bool IsIPAddrV4() const;
|
||||||
|
bool IsBenchMarkingAddress() const;
|
||||||
bool IsIPAddrV4Mapped() const;
|
bool IsIPAddrV4Mapped() const;
|
||||||
bool IsIPAddrLocal() const;
|
bool IsIPAddrLocal() const;
|
||||||
bool IsIPAddrShared() const;
|
bool IsIPAddrShared() const;
|
||||||
@@ -155,6 +157,7 @@ union NetAddr {
|
|||||||
bool ToStringBuffer(char* buf, uint32_t bufSize) const;
|
bool ToStringBuffer(char* buf, uint32_t bufSize) const;
|
||||||
nsCString ToString() const;
|
nsCString ToString() const;
|
||||||
void ToAddrPortString(nsACString& aOutput) const;
|
void ToAddrPortString(nsACString& aOutput) const;
|
||||||
|
nsILoadInfo::IPAddressSpace GetIpAddressSpace() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class DNSResolverType : uint32_t { Native = 0, TRR };
|
enum class DNSResolverType : uint32_t { Native = 0, TRR };
|
||||||
@@ -176,7 +179,8 @@ class AddrInfo {
|
|||||||
DNSResolverType aResolverType, unsigned int aTRRType,
|
DNSResolverType aResolverType, unsigned int aTRRType,
|
||||||
nsTArray<NetAddr>&& addresses);
|
nsTArray<NetAddr>&& addresses);
|
||||||
|
|
||||||
// Creates a basic AddrInfo object (initialize only the host and TRR status).
|
// Creates a basic AddrInfo object (initialize only the host and TRR
|
||||||
|
// status).
|
||||||
explicit AddrInfo(const nsACString& host, DNSResolverType aResolverType,
|
explicit AddrInfo(const nsACString& host, DNSResolverType aResolverType,
|
||||||
unsigned int aTRRType, nsTArray<NetAddr>&& addresses,
|
unsigned int aTRRType, nsTArray<NetAddr>&& addresses,
|
||||||
uint32_t aTTL = NO_TTL_DATA);
|
uint32_t aTTL = NO_TTL_DATA);
|
||||||
|
|||||||
Reference in New Issue
Block a user