33static void zeroUnusedBytes (
uint8* address)
noexcept
35 for (
int i = 4; i < 16; ++i)
41 for (
int i = 0; i < 16; ++i)
47 for (
int i = 0; i < (isIPv6 ? 16 : 4); ++i)
48 address[i] = bytes[i];
51 zeroUnusedBytes (address);
56 IPAddressByteUnion temp;
58 for (
int i = 0; i < 8; ++i)
60 temp.combined = bytes[i];
62 address[i * 2] = temp.split[0];
63 address[i * 2 + 1] = temp.split[1];
69 address[0] =
a0; address[1] =
a1;
70 address[2] =
a2; address[3] =
a3;
72 zeroUnusedBytes (address);
83 for (
int i = 0; i < 8; ++i)
85 temp.combined = array[i];
86 address[i * 2] = temp.split[0];
87 address[i * 2 + 1] = temp.split[1];
93 address[0] =
static_cast<uint8> (n >> 24);
94 address[1] =
static_cast<uint8> ((n >> 16) & 255);
95 address[2] =
static_cast<uint8> ((n >> 8) & 255);
96 address[3] =
static_cast<uint8> ((n & 255));
98 zeroUnusedBytes (address);
103 for (
int i = 0; i < 16; ++i)
112 if (
adr.containsAnyOf (
"[]"))
115 if (
adr.indexOf (
":") ==
adr.lastIndexOf (
":"))
131 for (
int i = 0; i < 4; ++i)
140 if (tokens.contains ({}))
142 auto idx = tokens.
indexOf ({});
143 tokens.set (idx,
"0");
144 tokens.removeEmptyStrings();
147 if (tokens[tokens.size() - 1].containsChar (
'.'))
150 while (tokens.size() < 8)
151 tokens.insert (idx,
"0");
154 for (
int i = 0; i < 8; ++i)
171 address[i * 2] = temp.split[0];
172 address[i * 2 + 1] = temp.split[1];
183 for (
int i = 1; i < 4; ++i)
196 for (
int i = 1; i < 8; ++i)
198 temp.split[0] =
address[i * 2];
199 temp.split[1] =
address[i * 2 + 1];
207bool IPAddress::operator== (
const IPAddress&
other)
const noexcept {
return compare (
other) == 0; }
208bool IPAddress::operator!= (
const IPAddress&
other)
const noexcept {
return compare (
other) != 0; }
209bool IPAddress::operator< (
const IPAddress&
other)
const noexcept {
return compare (
other) < 0; }
210bool IPAddress::operator<= (
const IPAddress&
other)
const noexcept {
return compare (
other) <= 0; }
211bool IPAddress::operator> (
const IPAddress&
other)
const noexcept {
return compare (
other) > 0; }
212bool IPAddress::operator>= (
const IPAddress&
other)
const noexcept {
return compare (
other) >= 0; }
216 if (isIPv6 !=
other.isIPv6)
220 if (isIPv4MappedAddress (*
this))
221 return convertIPv4MappedAddressToIPv4 (*this).compare (
other);
226 if (isIPv4MappedAddress (
other))
227 return compare (convertIPv4MappedAddressToIPv4 (
other));
232 for (
int i = 0; i < (isIPv6 ? 16 : 4); ++i)
234 if (address[i] >
other.address[i])
return 1;
235 if (address[i] <
other.address[i])
return -1;
260 for (
int i = 0; i < tokens.size(); ++i)
264 if (t.getHexValue32() == 0x0000)
325 for (
int i = 0; i < 10; ++i)
352 return { 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff,
386 void runTest()
override
395 beginTest (
"constructors");
402 expect (! local.isNull());
404 IPAddress
ipv4{1, 2, 3, 4};
405 expect (!
ipv4.isNull());
406 expect (!
ipv4.isIPv6);
407 expect (
ipv4.toString() ==
"1.2.3.4");
412 beginTest (
"find all addresses");
424 expect (! a.isNull());
430 expect (! a.isNull());
436 beginTest (
"broadcast addresses");
445 expect (! a.isNull());
450 if (! broadcastAddress.isNull())
457 IPAddress address{1, 2, 3, 4};
Holds a resizable array of primitive or copy-by-value objects.
Represents an IP address.
static Array< IPAddress > getAllAddresses(bool includeIPv6=false)
Populates a list of all the IP addresses that this machine is using.
static IPAddress getLocalAddress(bool includeIPv6=false)
Returns the first 'real' address for the local machine.
bool isNull() const
Returns whether the address contains the null address (e.g.
static IPAddress local(bool IPv6=false) noexcept
Returns an IPv4 or IPv6 address meaning "localhost", equivalent to 127.0.0.1 (IPv4) or ::1 (IPv6)
static bool isIPv4MappedAddress(const IPAddress &mappedAddress)
Returns true if the given IP address is an IPv4-mapped IPv6 address.
static IPAddress getInterfaceBroadcastAddress(const IPAddress &interfaceAddress)
If the IPAdress is the address of an interface on the machine, returns the associated broadcast addre...
static IPAddress any() noexcept
Returns an IP address meaning "any", equivalent to 0.0.0.0 (IPv4) or ::, (IPv6)
static String getFormattedAddress(const String &unformattedAddress)
Returns a formatted version of the provided IPv6 address conforming to RFC 5952 with leading zeros su...
int compare(const IPAddress &) const noexcept
Compares this IPAddress with another.
String toString() const
Returns a dot- or colon-separated string in the form "1.2.3.4" (IPv4) or "1:2:3:4:5:6:7:8" (IPv6).
static void findAllAddresses(Array< IPAddress > &results, bool includeIPv6=false)
Populates a list of all the IP addresses that this machine is using.
static IPAddress broadcast() noexcept
Returns an IPv4 address meaning "broadcast" (255.255.255.255)
uint8 address[16]
The elements of the IP address.
static IPAddress convertIPv4AddressToIPv4Mapped(const IPAddress &addressToMap)
Converts an IPv4 address to an IPv4-mapped IPv6 address.
static IPAddress convertIPv4MappedAddressToIPv4(const IPAddress &mappedAddress)
Converts an IPv4-mapped IPv6 address to an IPv4 address.
IPAddress() noexcept
Creates a null address - 0.0.0.0 (IPv4) or ::, (IPv6)
String & getReference(int index) noexcept
Returns a reference to one of the strings in the array.
int indexOf(StringRef stringToLookFor, bool ignoreCase=false, int startIndex=0) const
Searches for a string in the array.
static StringArray fromTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Returns an array containing the tokens in a given string.
static String repeatedString(StringRef stringToRepeat, int numberOfTimesToRepeat)
Creates a string which is a version of a string repeated and joined together.
static String toHexString(IntegerType number)
Returns a string representing this numeric value in hexadecimal.
String replace(StringRef stringToReplace, StringRef stringToInsertInstead, bool ignoreCase=false) const
Replaces all occurrences of a substring with another string.
String upToLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Returns the start of this string, up to the last occurrence of a substring.
String fromFirstOccurrenceOf(StringRef substringToStartFrom, bool includeSubStringInResult, bool ignoreCase) const
Returns a section of the string starting from a given substring.
This is a base class for classes that perform a unit test.
unsigned short uint16
A platform-independent 16-bit unsigned integer type.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
unsigned int uint32
A platform-independent 32-bit unsigned integer type.
unsigned char uint8
A platform-independent 8-bit unsigned integer type.
Union used to split a 16-bit unsigned integer into 2 8-bit unsigned integers or vice-versa.
Parses a character string, to read a hexadecimal value.