Public Member Functions

IPv6ExtensionHeader Class Reference

#include <IPv6Datagram.h>

List of all members.

Public Member Functions

 IPv6ExtensionHeader ()
 IPv6ExtensionHeader (const IPv6ExtensionHeader &other)
IPv6ExtensionHeaderoperator= (const IPv6ExtensionHeader &other)
virtual IPv6ExtensionHeaderdup () const
virtual IPProtocolId getExtensionType () const
virtual int getByteLength () const

Detailed Description

Represents an IPv6 extension header. More info in the IPv6Datagram.msg file (and the documentation generated from it).

Definition at line 74 of file IPv6Datagram.h.


Constructor & Destructor Documentation

IPv6ExtensionHeader::IPv6ExtensionHeader (  )  [inline]

Definition at line 77 of file IPv6Datagram.h.

: IPv6ExtensionHeader_Base() {}

IPv6ExtensionHeader::IPv6ExtensionHeader ( const IPv6ExtensionHeader other  )  [inline]

Definition at line 78 of file IPv6Datagram.h.

: IPv6ExtensionHeader_Base() {operator=(other);}


Member Function Documentation

virtual IPv6ExtensionHeader* IPv6ExtensionHeader::dup (  )  const [inline, virtual]

Definition at line 80 of file IPv6Datagram.h.

{throw cRuntimeError(this, "dup() should be redefined");}

int IPv6ExtensionHeader::getByteLength (  )  const [virtual]

Definition at line 111 of file IPv6Datagram.cc.

{
    // FIXME msg files don't yet support readonly attrs that can be
    // redefined in subclasses, so for now we resort to the following
    // unsafe and unextensible nasty solution
    if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) {
        return 8;
    } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) {
        return 8; // FIXME verify
    } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) {
        return 8; // FIXME verify
    } else {
        throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName());
    }
}

IPProtocolId IPv6ExtensionHeader::getExtensionType (  )  const [virtual]

Definition at line 89 of file IPv6Datagram.cc.

{
    // FIXME msg files don't yet support readonly attrs that can be
    // redefined in subclasses, so for now we resort to the following
    // unsafe and unextensible nasty solution
    if (dynamic_cast<const IPv6HopByHopOptionsHeader*>(this)) {
        return IP_PROT_IPv6EXT_HOP;
    } else if (dynamic_cast<const IPv6RoutingHeader*>(this)) {
        return IP_PROT_IPv6EXT_ROUTING;
    } else if (dynamic_cast<const IPv6FragmentHeader*>(this)) {
        return IP_PROT_IPv6EXT_FRAGMENT;
    } else if (dynamic_cast<const IPv6DestinationOptionsHeader*>(this)) {
        return IP_PROT_IPv6EXT_DEST;
    } else if (dynamic_cast<const IPv6AuthenticationHeader*>(this)) {
        return IP_PROT_IPv6EXT_AUTH;
    } else if (dynamic_cast<const IPv6EncapsulatingSecurityPayloadHeader*>(this)) {
        return IP_PROT_IPv6EXT_ESP;
    } else {
        throw cRuntimeError("unrecognised HeaderExtension subclass %s in IPv6ExtensionHeader::getExtensionType()", getClassName());
    }
}

IPv6ExtensionHeader& IPv6ExtensionHeader::operator= ( const IPv6ExtensionHeader other  )  [inline]

Definition at line 79 of file IPv6Datagram.h.

{IPv6ExtensionHeader_Base::operator=(other); return *this;}


The documentation for this class was generated from the following files: