INET Framework for OMNeT++/OMNEST
IPv6Datagram Class Reference

#include <IPv6Datagram.h>

List of all members.

Public Member Functions

 IPv6Datagram (const char *name=NULL, int kind=0)
 IPv6Datagram (const IPv6Datagram &other)
IPv6Datagramoperator= (const IPv6Datagram &other)
virtual IPv6Datagramdup () const
virtual void setExtensionHeaderArraySize (unsigned int size)
virtual void setExtensionHeader (unsigned int k, const IPv6ExtensionHeaderPtr &extensionHeader_var)
virtual unsigned int getExtensionHeaderArraySize () const
virtual IPv6ExtensionHeaderPtr & getExtensionHeader (unsigned int k)
virtual void addExtensionHeader (IPv6ExtensionHeader *eh, int atPos=-1)
virtual int calculateHeaderByteLength () const

Protected Types

typedef std::vector
< IPv6ExtensionHeader * > 
ExtensionHeaders

Protected Attributes

ExtensionHeaders extensionHeaders

Detailed Description

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


Member Typedef Documentation

typedef std::vector<IPv6ExtensionHeader*> IPv6Datagram::ExtensionHeaders [protected]

Constructor & Destructor Documentation

IPv6Datagram::IPv6Datagram ( const char *  name = NULL,
int  kind = 0 
) [inline]
: IPv6Datagram_Base(name,kind) {}
IPv6Datagram::IPv6Datagram ( const IPv6Datagram other) [inline]
: IPv6Datagram_Base(other.getName()) {operator=(other);}

Member Function Documentation

void IPv6Datagram::addExtensionHeader ( IPv6ExtensionHeader eh,
int  atPos = -1 
) [virtual]

Adds an extension header to the datagram, at the given position. The default (atPos==-1) is to add the header at the end.

Referenced by operator=().

{
    if (atPos<0 || atPos>=(int)extensionHeaders.size())
    {
        extensionHeaders.push_back(eh);
        return;
    }

    // insert at position atPos, shift up the rest of the array
    extensionHeaders.insert(extensionHeaders.begin()+atPos, eh);
}
int IPv6Datagram::calculateHeaderByteLength ( ) const [virtual]

Calculates the length of the IPv6 header plus the extension headers.

Referenced by IPv6FragBuf::addFragment().

{
    int len = 40;
    for (unsigned int i=0; i<extensionHeaders.size(); i++)
        len += extensionHeaders[i]->getByteLength();
    return len;
}
virtual IPv6Datagram* IPv6Datagram::dup ( ) const [inline, virtual]

Referenced by IPv6::routeMulticastPacket().

{return new IPv6Datagram(*this);}
IPv6ExtensionHeaderPtr & IPv6Datagram::getExtensionHeader ( unsigned int  k) [virtual]

Returns the kth extension header in this datagram

{
    static IPv6ExtensionHeaderPtr null;
    if (k>=extensionHeaders.size())
        return (null=NULL);
    return extensionHeaders[k];
}
unsigned int IPv6Datagram::getExtensionHeaderArraySize ( ) const [virtual]

Returns the number of extension headers in this datagram

{
    return extensionHeaders.size();
}
IPv6Datagram & IPv6Datagram::operator= ( const IPv6Datagram other)
{
    IPv6Datagram_Base::operator=(other);

    for (ExtensionHeaders::const_iterator i=other.extensionHeaders.begin(); i!=other.extensionHeaders.end(); ++i)
        addExtensionHeader((*i)->dup());

    return *this;
}
void IPv6Datagram::setExtensionHeader ( unsigned int  k,
const IPv6ExtensionHeaderPtr &  extensionHeader_var 
) [virtual]

Generated but unused method, should not be called.

{
    throw cRuntimeError(this, "setExtensionHeader() not supported, use addExtensionHeader()");
}
void IPv6Datagram::setExtensionHeaderArraySize ( unsigned int  size) [virtual]

Generated but unused method, should not be called.

{
    throw cRuntimeError(this, "setExtensionHeaderArraySize() not supported, use addExtensionHeader()");
}

Member Data Documentation


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