#include <IPvXAddress.h>
Storage is efficient: an object occupies size of an IPv6 address (128bits=16 bytes) plus a bool.
Public Member Functions | |
| IPvXAddress () | |
| IPvXAddress (const IPAddress &addr) | |
| IPvXAddress (const IPv6Address &addr) | |
| IPvXAddress (const char *addr) | |
| IPvXAddress (const IPvXAddress &addr) | |
| ~IPvXAddress () | |
| bool | isIPv6 () const |
| IPAddress | get4 () const |
| IPv6Address | get6 () const |
| void | set (const IPAddress &addr) |
| void | set (const IPv6Address &addr) |
| void | set (const IPvXAddress &addr) |
| void | set (const char *addr) |
| IPvXAddress & | operator= (const IPAddress &addr) |
| IPvXAddress & | operator= (const IPv6Address &addr) |
| IPvXAddress & | operator= (const IPvXAddress &addr) |
| bool | tryParse (const char *addr) |
| std::string | str () const |
| bool | isUnspecified () const |
| bool | equals (const IPAddress &addr) const |
| bool | equals (const IPv6Address &addr) const |
| bool | equals (const IPvXAddress &addr) const |
| bool | operator== (const IPAddress &addr) const |
| bool | operator!= (const IPAddress &addr) const |
| bool | operator== (const IPv6Address &addr) const |
| bool | operator!= (const IPv6Address &addr) const |
| bool | operator== (const IPvXAddress &addr) const |
| bool | operator!= (const IPvXAddress &addr) const |
| bool | operator< (const IPvXAddress &addr) const |
Protected Attributes | |
| uint32 | d [4] |
| bool | isv6 |
|
|
Constructor for IPv4 addresses.
|
|
|
Constructor for IPv4 addresses. 00053 {set(addr);}
|
|
|
Constructor for IPv6 addresses. 00058 {set(addr);}
|
|
|
Accepts string representations suuported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized. 00065 {set(addr);}
|
|
|
Copy constructor. 00070 {set(addr);}
|
|
|
Destructor 00075 {}
|
|
|
Returns true if the two addresses are equal 00203 {
00204 return d[0]==addr.d[0] && (!isv6 || (d[1]==addr.d[1] && d[2]==addr.d[2] && d[3]==addr.d[3]));
00205 }
|
|
|
Returns true if the two addresses are equal 00195 {
00196 uint32 *w = const_cast<IPv6Address&>(addr).words();
00197 return isv6 && d[0]==w[0] && d[1]==w[1] && d[2]==w[2] && d[3]==w[3];
00198 }
|
|
|
Returns true if the two addresses are equal
|
|
|
Get IPv4 address. Throws exception if this is an IPv6 address. 00088 {
00089 if (isv6)
00090 throw new cException("IPvXAddress: cannot return IPv6 address %s as IPv4", str().c_str());
00091 return IPAddress(d[0]);
00092 }
|
|
|
Get IPv6 address. Throws exception if this is an IPv4 address. 00097 {
00098 if (!isv6) {
00099 if (d[0]==0) // allow null address to be returned as IPv6
00100 return IPv6Address();
00101 throw new cException("IPvXAddress: cannot return IPv4 address %s as IPv6", str().c_str());
00102 }
00103 return IPv6Address(d[0], d[1], d[2], d[3]);
00104 }
|
|
|
Is this an IPv6 address? 00083 {return isv6;}
|
|
|
True if the structure has not been assigned any address yet.
|
|
|
Returns !equals(addr). 00235 {return !equals(addr);}
|
|
|
Returns !equals(addr). 00225 {return !equals(addr);}
|
|
|
Returns !equals(addr). 00215 {return !equals(addr);}
|
|
|
Compares two addresses. 00240 {
00241 if (isv6!=addr.isv6)
00242 return !isv6;
00243 else if (!isv6)
00244 return d[0]<addr.d[0];
00245 else
00246 return memcmp(&d, &addr.d, 16) < 0; // this provides an ordering, though not surely the one one would expect
00247 }
|
|
|
Assignment 00162 {set(addr); return *this;}
|
|
|
Assignment 00157 {set(addr); return *this;}
|
|
|
Assignment 00152 {set(addr); return *this;}
|
|
|
Returns equals(addr). 00230 {return equals(addr);}
|
|
|
Returns equals(addr). 00220 {return equals(addr);}
|
|
|
Returns equals(addr). 00210 {return equals(addr);}
|
|
|
Accepts string representations supported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized. 00144 {
00145 if (!tryParse(addr))
00146 throw new cRuntimeError("IPvXAddress: cannot interpret address string `%s'", addr);
00147 }
|
|
|
Assignment 00131 {
00132 isv6 = addr.isv6;
00133 d[0] = addr.d[0];
00134 if (isv6) {
00135 d[1] = addr.d[1]; d[2] = addr.d[2]; d[3] = addr.d[3];
00136 }
00137 }
|
|
|
Set to an IPv6 address. 00117 {
00118 if (addr.isUnspecified()) {
00119 // we always represent nulls as IPv4 null
00120 isv6 = false; d[0] = 0;
00121 return;
00122 }
00123 isv6 = true;
00124 uint32 *w = const_cast<IPv6Address&>(addr).words();
00125 d[0] = w[0]; d[1] = w[1]; d[2] = w[2]; d[3] = w[3];
00126 }
|
|
|
Set to an IPv4 address.
|
|
|
Returns the string representation of the address (e.g. "152.66.86.92")
|
|
|
Parses and assigns the given address and returns true if the string is recognized by IPAddress or IPv6Address, otherwise just returns false. 00023 {
00024 // try as IPv4
00025 if (IPAddress::isWellFormed(addr))
00026 {
00027 set(IPAddress(addr));
00028 return true;
00029 }
00030
00031 // try as IPv6
00032 IPv6Address ipv6;
00033 if (ipv6.tryParse(addr))
00034 {
00035 set(ipv6);
00036 return true;
00037 }
00038
00039 // no luck
00040 return false;
00041 }
|
|
|
|
|
|
|
1.4.1