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] = (n >> 24);
94 address[1] = (n >> 16) & 255;
95 address[2] = (n >> 8) & 255;
96 address[3] = (n & 255);
98 zeroUnusedBytes (address);
103 for (
int i = 0; i < 16; ++i)
112 if (
adr.containsAnyOf (
"[]"))
113 return adr.fromFirstOccurrenceOf (
"[",
false,
true).upToLastOccurrenceOf (
"]",
false,
true);
116 return adr.upToLastOccurrenceOf (
":",
false,
true);
131 for (
int i = 0; i < 4; ++i)
144 tokens.removeEmptyStrings();
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;
264 if (
t.getHexValue32() == 0x0000)
325 for (
int i = 0; i < 10; ++i)
352 return { 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff,
383 :
UnitTest (
"IPAddress", UnitTestCategories::networking)
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());
457 IPAddress address{1, 2, 3, 4};
462static IPAddressTests iPAddressTests;
int size() const noexcept
void insert(int indexToInsertAt, ParameterType newElement)
int indexOf(ParameterType elementToLookFor) const
void add(const ElementType &newElement)
void set(int indexToChange, ParameterType newValue)
bool contains(ParameterType elementToLookFor) const
ElementType & getReference(int index) noexcept
static Array< IPAddress > getAllAddresses(bool includeIPv6=false)
static IPAddress getLocalAddress(bool includeIPv6=false)
static IPAddress local(bool IPv6=false) noexcept
static bool isIPv4MappedAddress(const IPAddress &mappedAddress)
static IPAddress any() noexcept
static String getFormattedAddress(const String &unformattedAddress)
int compare(const IPAddress &) const noexcept
static IPAddress broadcast() noexcept
static void findAllAddresses(Array< IPAddress > &results, bool includeIPv6=false)
static IPAddress convertIPv4AddressToIPv4Mapped(const IPAddress &addressToMap)
static IPAddress convertIPv4MappedAddressToIPv4(const IPAddress &mappedAddress)
static IPAddress getInterfaceBroadcastAddress(const IPAddress &interfaceAddress)
static StringArray fromTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
static String repeatedString(StringRef stringToRepeat, int numberOfTimesToRepeat)
static String toHexString(IntegerType number)