#include <IPv6Datagram.h>
Public Member Functions | |
IPv6ExtensionHeader () | |
IPv6ExtensionHeader (const IPv6ExtensionHeader &other) | |
IPv6ExtensionHeader & | operator= (const IPv6ExtensionHeader &other) |
virtual IPProtocolId | getExtensionType () const |
virtual int | getByteLength () const |
IPv6ExtensionHeader::IPv6ExtensionHeader | ( | const IPv6ExtensionHeader & | other | ) | [inline] |
IPv6ExtensionHeader& IPv6ExtensionHeader::operator= | ( | const IPv6ExtensionHeader & | other | ) | [inline] |
IPProtocolId IPv6ExtensionHeader::getExtensionType | ( | ) | const [virtual] |
00117 { 00118 // FIXME msg files don't yet support readonly attrs that can be 00119 // redefined in subclasses, so for now we resort to the following 00120 // unsafe and unextensible nasty solution 00121 if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) { 00122 return IP_PROT_IPv6EXT_HOP; 00123 } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) { 00124 return IP_PROT_IPv6EXT_ROUTING; 00125 } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) { 00126 return IP_PROT_IPv6EXT_FRAGMENT; 00127 } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) { 00128 return IP_PROT_IPv6EXT_DEST; 00129 } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) { 00130 return IP_PROT_IPv6EXT_AUTH; 00131 } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) { 00132 return IP_PROT_IPv6EXT_ESP; 00133 } else { 00134 throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName()); 00135 } 00136 }
int IPv6ExtensionHeader::getByteLength | ( | ) | const [virtual] |
00139 { 00140 // FIXME msg files don't yet support readonly attrs that can be 00141 // redefined in subclasses, so for now we resort to the following 00142 // unsafe and unextensible nasty solution 00143 if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) { 00144 return 8; // FIXME verify 00145 } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) { 00146 return 8; // FIXME verify 00147 } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) { 00148 return 8; 00149 } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) { 00150 return 8; // FIXME verify 00151 } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) { 00152 return 8; // FIXME verify 00153 } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) { 00154 return 8; // FIXME verify 00155 } else { 00156 throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName()); 00157 } 00158 }