INET Framework for OMNeT++/OMNEST
inet::VoipStreamPacketSerializer Class Reference

Converts between VoipStreamPacket and binary (network byte order) Udp header. More...

#include <VoipStreamPacketSerializer.h>

Inheritance diagram for inet::VoipStreamPacketSerializer:
inet::FieldsChunkSerializer inet::ChunkSerializer

Public Member Functions

 VoipStreamPacketSerializer ()
 
- Public Member Functions inherited from inet::FieldsChunkSerializer
virtual void serialize (MemoryOutputStream &stream, const Ptr< const Chunk > &chunk, b offset, b length) const override
 Serializes a chunk into a stream by writing the bytes representing the chunk at the end of the stream. More...
 
virtual const Ptr< Chunkdeserialize (MemoryInputStream &stream, const std::type_info &typeInfo) const override
 Deserializes a chunk from a stream by reading the bytes at the current position of the stream. More...
 

Protected Member Functions

virtual void serialize (MemoryOutputStream &stream, const Ptr< const Chunk > &chunk) const override
 Serializes a chunk into a stream by writing all bytes representing the chunk at the end of the stream. More...
 
virtual const Ptr< Chunkdeserialize (MemoryInputStream &stream) const override
 Deserializes a chunk from a stream by reading the bytes at the current position of the stream. More...
 

Additional Inherited Members

- Static Public Attributes inherited from inet::ChunkSerializer
static b totalSerializedLength = b(0)
 
static b totalDeserializedLength = b(0)
 

Detailed Description

Converts between VoipStreamPacket and binary (network byte order) Udp header.

Constructor & Destructor Documentation

◆ VoipStreamPacketSerializer()

inet::VoipStreamPacketSerializer::VoipStreamPacketSerializer ( )
inline
25 : FieldsChunkSerializer() {}

Member Function Documentation

◆ deserialize()

const Ptr< Chunk > inet::VoipStreamPacketSerializer::deserialize ( MemoryInputStream stream) const
overrideprotectedvirtual

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.

42 {
43  auto startPosition = stream.getPosition();
44  auto voipStreamPacket = makeShared<VoipStreamPacket>();
45  int headerLength = stream.readByte();
46  voipStreamPacket->setHeaderLength(headerLength);
47  VoipStreamPacketType type = static_cast<VoipStreamPacketType>(stream.readByte());
48  voipStreamPacket->setType(type);
49  voipStreamPacket->setCodec(stream.readUint32Be());
50  voipStreamPacket->setSampleBits(stream.readUint16Be());
51  voipStreamPacket->setSampleRate(stream.readUint16Be());
52  voipStreamPacket->setTransmitBitrate(stream.readUint32Be());
53  voipStreamPacket->setSamplesPerPacket(stream.readUint16Be());
54  voipStreamPacket->setSeqNo(stream.readUint16Be());
55  voipStreamPacket->setTimeStamp(stream.readUint32Be());
56  voipStreamPacket->setSsrc(stream.readUint32Be());
57  if (type == VOICE)
58  voipStreamPacket->setDataLength(stream.readUint16Be());
59 
60  B remainders = B(headerLength) - (stream.getPosition() - startPosition);
61  if (remainders.get() < 0) {
62  voipStreamPacket->markIncorrect();
63  return voipStreamPacket;
64  }
65  stream.readByteRepeatedly('?', B(remainders).get());
66  return voipStreamPacket;
67 }

◆ serialize()

void inet::VoipStreamPacketSerializer::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.

18 {
19  auto startPosition = stream.getLength();
20  const auto& voipStreamPacket = staticPtrCast<const VoipStreamPacket>(chunk);
21  stream.writeByte(voipStreamPacket->getHeaderLength());
22  VoipStreamPacketType type = voipStreamPacket->getType();
23  stream.writeByte(type);
24  stream.writeUint32Be(voipStreamPacket->getCodec());
25  stream.writeUint16Be(voipStreamPacket->getSampleBits());
26  stream.writeUint16Be(voipStreamPacket->getSampleRate());
27  stream.writeUint32Be(voipStreamPacket->getTransmitBitrate());
28  stream.writeUint16Be(voipStreamPacket->getSamplesPerPacket());
29  stream.writeUint16Be(voipStreamPacket->getSeqNo());
30  stream.writeUint32Be(voipStreamPacket->getTimeStamp());
31  stream.writeUint32Be(voipStreamPacket->getSsrc());
32  if (type == VOICE)
33  stream.writeUint16Be(voipStreamPacket->getDataLength());
34 
35  int64_t remainders = B(voipStreamPacket->getHeaderLength()).get() - B((stream.getLength() - startPosition)).get();
36  if (remainders < 0)
37  throw cRuntimeError("voipStreamPacket length = %d smaller than required %d bytes, try to increment the 'voipHeaderSize' parameter", (int)B(voipStreamPacket->getChunkLength()).get(), (int)B(stream.getLength() - startPosition).get());
38  stream.writeByteRepeatedly('?', remainders);
39 }

The documentation for this class was generated from the following files:
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
type
removed type
Definition: IUdp-gates.txt:7