#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 |
IPvXAddress::IPvXAddress | ( | ) | [inline] |
IPvXAddress::IPvXAddress | ( | const IPAddress & | addr | ) | [inline] |
IPvXAddress::IPvXAddress | ( | const IPv6Address & | addr | ) | [inline] |
IPvXAddress::IPvXAddress | ( | const char * | addr | ) | [inline] |
Accepts string representations suuported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized.
IPvXAddress::IPvXAddress | ( | const IPvXAddress & | addr | ) | [inline] |
bool IPvXAddress::isIPv6 | ( | ) | const [inline] |
name Getters, setters Is this an IPv6 address?
Referenced by doPacking(), SCTPAssociation::getLevel(), SCTPAssociation::sendInit(), IPTrafGen::sendPacket(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
00082 {return isv6;}
IPAddress IPvXAddress::get4 | ( | ) | const [inline] |
Get IPv4 address. Throws exception if this is an IPv6 address.
Referenced by doPacking(), SCTPAssociation::getLevel(), UDP::matchesSocket(), SCTPAssociation::pmStartPathManagement(), LDP::processMessageFromTCP(), SCTPPathVariables::SCTPPathVariables(), SCTP::sendAbortFromMain(), SCTPAssociation::sendInit(), IPTrafGen::sendPacket(), SCTP::sendShutdownCompleteFromMain(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
00087 { 00088 if (isv6) 00089 throw cRuntimeError("IPvXAddress: cannot return IPv6 address %s as IPv4", str().c_str()); 00090 return IPAddress(d[0]); 00091 }
IPv6Address IPvXAddress::get6 | ( | ) | const [inline] |
Get IPv6 address. Throws exception if this is an IPv4 address.
Referenced by doPacking(), SCTPAssociation::getLevel(), UDP::matchesSocket(), IPTrafGen::sendPacket(), PingApp::sendToICMP(), TCPSpoof::sendToIP(), TCPConnection::sendToIP(), and SCTPAssociation::sendToIP().
00096 { 00097 if (!isv6) { 00098 if (d[0]==0) // allow null address to be returned as IPv6 00099 return IPv6Address(); 00100 throw cRuntimeError("IPvXAddress: cannot return IPv4 address %s as IPv6", str().c_str()); 00101 } 00102 return IPv6Address(d[0], d[1], d[2], d[3]); 00103 }
void IPvXAddress::set | ( | const IPAddress & | addr | ) | [inline] |
void IPvXAddress::set | ( | const IPv6Address & | addr | ) | [inline] |
Set to an IPv6 address.
00116 { 00117 if (addr.isUnspecified()) { 00118 // we always represent nulls as IPv4 null 00119 isv6 = false; d[0] = 0; 00120 return; 00121 } 00122 isv6 = true; 00123 uint32 *w = const_cast<IPv6Address&>(addr).words(); 00124 d[0] = w[0]; d[1] = w[1]; d[2] = w[2]; d[3] = w[3]; 00125 }
void IPvXAddress::set | ( | const IPvXAddress & | addr | ) | [inline] |
void IPvXAddress::set | ( | const char * | addr | ) | [inline] |
Accepts string representations supported by IPAddress (dotted decimal notation) and IPv6Address (hex string with colons). Throws an error if the format is not recognized.
00143 { 00144 if (!tryParse(addr)) 00145 throw cRuntimeError("IPvXAddress: cannot interpret address string `%s'", addr); 00146 }
IPvXAddress& IPvXAddress::operator= | ( | const IPAddress & | addr | ) | [inline] |
IPvXAddress& IPvXAddress::operator= | ( | const IPv6Address & | addr | ) | [inline] |
IPvXAddress& IPvXAddress::operator= | ( | const IPvXAddress & | addr | ) | [inline] |
bool IPvXAddress::tryParse | ( | const char * | addr | ) |
Parses and assigns the given address and returns true if the string is recognized by IPAddress or IPv6Address, otherwise just returns false.
Referenced by IPAddressResolver::tryResolve().
00022 { 00023 // try as IPv4 00024 if (IPAddress::isWellFormed(addr)) 00025 { 00026 set(IPAddress(addr)); 00027 return true; 00028 } 00029 00030 // try as IPv6 00031 IPv6Address ipv6; 00032 if (ipv6.tryParse(addr)) 00033 { 00034 set(ipv6); 00035 return true; 00036 } 00037 00038 // no luck 00039 return false; 00040 }
std::string IPvXAddress::str | ( | ) | const [inline] |
Returns the string representation of the address (e.g. "152.66.86.92")
Referenced by TCP::addSockPair(), operator<<(), and SCTPPathVariables::SCTPPathVariables().
bool IPvXAddress::isUnspecified | ( | ) | const [inline] |
name Comparison True if the structure has not been assigned any address yet.
Referenced by SCTP::addLocalAddress(), SCTP::addLocalAddressToAllRemoteAddresses(), TCP::addSockPair(), UDP::bind(), UDPSocket::connect(), UDP::connect(), IPAddressResolver::getAddressFrom(), PingApp::handleMessage(), UDP::matchesSocket(), SCTPAssociation::process_ASSOCIATE(), TCPConnection::processTCPSegment(), UDPVideoStreamCli::requestStream(), UDPSocket::send(), SCTPAssociation::sendInit(), TCPConnection::sendSyn(), and IPAddressResolver::tryResolve().
bool IPvXAddress::equals | ( | const IPAddress & | addr | ) | const [inline] |
bool IPvXAddress::equals | ( | const IPv6Address & | addr | ) | const [inline] |
Returns true if the two addresses are equal
00194 { 00195 uint32 *w = const_cast<IPv6Address&>(addr).words(); 00196 return isv6 && d[0]==w[0] && d[1]==w[1] && d[2]==w[2] && d[3]==w[3]; 00197 }
bool IPvXAddress::equals | ( | const IPvXAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator== | ( | const IPAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator!= | ( | const IPAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator== | ( | const IPv6Address & | addr | ) | const [inline] |
bool IPvXAddress::operator!= | ( | const IPv6Address & | addr | ) | const [inline] |
bool IPvXAddress::operator== | ( | const IPvXAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator!= | ( | const IPvXAddress & | addr | ) | const [inline] |
bool IPvXAddress::operator< | ( | const IPvXAddress & | addr | ) | const [inline] |
uint32 IPvXAddress::d[4] [protected] |
Referenced by equals(), and operator<().
bool IPvXAddress::isv6 [protected] |
Referenced by operator<().