GenericPacketParser Class Reference

#include <GenericPacketParser.h>

Inheritance diagram for GenericPacketParser:

PacketParser

List of all members.


Detailed Description

A message parser using the cMemCommBuffer to serialize cmessages.

Author:
Bernhard Heep

Public Member Functions

char * encapsulatePayload (cMessage *msg, unsigned int *length)
 serializes messages in a buffer
cMessage * decapsulatePayload (char *buf, unsigned int length)
 deserializes messages from a char[] of size length

Private Attributes

cNetCommBuffer commBuffer
 the buffer used to encapsulate and decapsulate messages

Member Function Documentation

char * GenericPacketParser::encapsulatePayload ( cMessage *  msg,
unsigned int *  length 
) [virtual]

serializes messages in a buffer

Parameters:
msg the message to serialize
length the length of the message
Returns:
the encapsulated messages as a char[] of size length

Implements PacketParser.

00031 {
00032     commBuffer.reset();
00033     commBuffer.packObject(msg);
00034 
00035     *length = commBuffer.getMessageSize();    
00036     char* byte_buf = new char[*length];
00037     memcpy(byte_buf, commBuffer.getBuffer(), *length);
00038 
00039     return byte_buf;
00040 }

cMessage * GenericPacketParser::decapsulatePayload ( char *  buf,
unsigned int  length 
) [virtual]

deserializes messages from a char[] of size length

Parameters:
buf the buffer to extract the message from
length the length of the buffer
Returns:
the decapsulated cMessage

Implements PacketParser.

00043 {
00044     cMessage *msg;
00045     
00046     commBuffer.reset();
00047     //commBuffer.pack(buf, length);
00048     commBuffer.allocateAtLeast(length);
00049     memcpy(commBuffer.getBuffer(), buf, length);
00050     commBuffer.setMessageSize(length);
00051     
00052     try {
00053         msg = check_and_cast<cMessage*>(commBuffer.unpackObject());
00054               commBuffer.assertBufferEmpty();       
00055 //    } catch (cRuntimeError err) {
00056 //    FIXME:
00057 //    the above does, for some reason, not work. So we catch everyting, 
00058 //    which may prevent the simulation from terminating corectly while
00059 //    parsing a message.
00060     } catch (...) {
00061         ev << "[GenericPacketParser::decapsulatePayload()]\n"
00062            << "    Parsing of payload failed"
00063            << endl;
00064         return NULL;
00065     }
00066     
00067     return msg;
00068 }


Member Data Documentation

the buffer used to encapsulate and decapsulate messages

Referenced by decapsulatePayload(), and encapsulatePayload().


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

Generated on Fri Sep 19 13:05:06 2008 for ITM OverSim by  doxygen 1.5.5