#include <GenericPacketParser.h>
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 |
char * GenericPacketParser::encapsulatePayload | ( | cMessage * | msg, | |
unsigned int * | length | |||
) | [virtual] |
serializes messages in a buffer
msg | the message to serialize | |
length | the length of the message |
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
buf | the buffer to extract the message from | |
length | the length of the buffer |
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 }
the buffer used to encapsulate and decapsulate messages
Referenced by decapsulatePayload(), and encapsulatePayload().