Converts between CsmaCaMacHeader and binary network byte order mac header.
More...
#include <CsmaCaMacHeaderSerializer.h>
Converts between CsmaCaMacHeader and binary network byte order mac header.
◆ CsmaCaMacHeaderSerializer()
| inet::CsmaCaMacHeaderSerializer::CsmaCaMacHeaderSerializer |
( |
| ) |
|
|
inline |
26 : FieldsChunkSerializer() {}
◆ deserialize()
Deserializes a chunk from a stream by reading the bytes at the current position of the stream.
The current stream position is updated according to the length of the returned chunk.
Implements inet::FieldsChunkSerializer.
48 auto startPos = stream.getPosition();
50 uint8_t length = stream.readUint8();
53 auto macHeader = makeShared<CsmaCaMacDataHeader>();
54 macHeader->setType(
type);
55 macHeader->setHeaderLengthField(length);
56 macHeader->setReceiverAddress(stream.readMacAddress());
57 macHeader->setTransmitterAddress(stream.readMacAddress());
58 macHeader->setNetworkProtocol(stream.readUint16Be());
59 macHeader->setPriority(stream.readByte());
60 if (
B(length) > stream.getPosition() - startPos)
61 stream.readByteRepeatedly(
'?', length -
B(stream.getPosition() - startPos).get());
65 auto macHeader = makeShared<CsmaCaMacAckHeader>();
66 macHeader->setType(
type);
67 macHeader->setHeaderLengthField(length);
68 macHeader->setReceiverAddress(stream.readMacAddress());
69 macHeader->setTransmitterAddress(stream.readMacAddress());
70 if (
B(length) > stream.getPosition() - startPos)
71 stream.readByteRepeatedly(
'?', length -
B(stream.getPosition() - startPos).get());
75 throw cRuntimeError(
"CsmaCaMacSerializer: cannot deserialize chunk");
◆ serialize()
| void inet::CsmaCaMacHeaderSerializer::serialize |
( |
MemoryOutputStream & |
stream, |
|
|
const Ptr< const Chunk > & |
chunk |
|
) |
| const |
|
overrideprotectedvirtual |
Serializes a chunk into a stream by writing all bytes representing the chunk at the end of the stream.
Implements inet::FieldsChunkSerializer.
21 auto startPos = stream.getLength();
22 if (
auto macHeader = dynamicPtrCast<const CsmaCaMacDataHeader>(chunk)) {
23 stream.writeUint8(macHeader->getType());
24 auto length = macHeader->getHeaderLengthField();
25 stream.writeUint8(length);
26 stream.writeMacAddress(macHeader->getReceiverAddress());
27 stream.writeMacAddress(macHeader->getTransmitterAddress());
28 stream.writeUint16Be(macHeader->getNetworkProtocol());
29 stream.writeByte(macHeader->getPriority());
30 if (macHeader->getChunkLength() > stream.getLength() - startPos)
31 stream.writeByteRepeatedly(
'?',
B(macHeader->getChunkLength() - (stream.getLength() - startPos)).get());
33 else if (
auto macHeader = dynamicPtrCast<const CsmaCaMacAckHeader>(chunk)) {
34 stream.writeUint8(0x01);
35 auto length = macHeader->getHeaderLengthField();
36 stream.writeUint8(length);
37 stream.writeMacAddress(macHeader->getReceiverAddress());
38 stream.writeMacAddress(macHeader->getTransmitterAddress());
39 if (macHeader->getChunkLength() > stream.getLength() - startPos)
40 stream.writeByteRepeatedly(
'?',
B(macHeader->getChunkLength() - (stream.getLength() - startPos)).get());
43 throw cRuntimeError(
"CsmaCaMacSerializer: cannot serialize chunk");
The documentation for this class was generated from the following files: