INET Framework for OMNeT++/OMNEST
inet::rtp::RtpProfile Class Reference

The class RtpProfile is a module which handles RtpPayloadSender and RtpPayloadReceiver modules. More...

#include <RtpProfile.h>

Inheritance diagram for inet::rtp::RtpProfile:
inet::rtp::RtpAvProfile

Classes

class  SsrcGate
 

Public Member Functions

 RtpProfile ()
 

Protected Types

typedef std::map< uint32_t, SsrcGate * > SsrcGateMap
 Stores information to which gate rtp data packets from a ssrc must be forwarded. More...
 

Protected Member Functions

virtual void initialize () override
 Initializes variables. More...
 
virtual ~RtpProfile ()
 
virtual void handleMessage (cMessage *msg) override
 Creates and removes payload sender and receiver modules on demand. More...
 
virtual void handleMessageFromRTP (cMessage *msg)
 Handles messages received from the rtp module. More...
 
virtual void handleMessageFromPayloadSender (cMessage *msg)
 Handles messages coming from the sender module. More...
 
virtual void handleMessageFromPayloadReceiver (cMessage *msg)
 Handles messages coming from a receiver module. More...
 
virtual void initializeProfile (RtpInnerPacket *rinp)
 Initialization message received from rtp module. More...
 
virtual void createSenderModule (RtpInnerPacket *rinp)
 This method is called when the application issued the creation of an rtp payload sender module to transmit data. More...
 
virtual void deleteSenderModule (RtpInnerPacket *rinp)
 When a sender module is no longer needed it can be deleted by the profile module. More...
 
virtual void senderModuleControl (RtpInnerPacket *rinp)
 The profile module forwards sender control messages to the sender module. More...
 
virtual void dataIn (RtpInnerPacket *rinp)
 Handles incoming data packets: If there isn't a receiver module for this sender it creates one. More...
 
virtual void senderModuleInitialized (RtpInnerPacket *rinp)
 The sender module returns a senderModuleInitialized message after being initialized. More...
 
virtual void senderModuleStatus (RtpInnerPacket *rinp)
 After having received a sender module control message the sender module returns a sender status message to inform the application what it's doing at the moment. More...
 
virtual void dataOut (RtpInnerPacket *rinp)
 Handles outgoing data packets: Calls processOutgoingPacket and forwards the packet to the rtp module. More...
 
virtual void processIncomingPacket (RtpInnerPacket *rinp)
 Every time a rtp packet is received it it pre-processed by this method to remove profile specific extension which are not handled by the payload receiver module. More...
 
virtual void processOutgoingPacket (RtpInnerPacket *rinp)
 Simular to the procedure for incoming packets, this adds profile specific extensions to outgoing rtp packets. More...
 
virtual SsrcGatefindSSRCGate (uint32_t ssrc)
 Finds the gate of the receiver module for rtp data packets from this ssrc. More...
 
virtual SsrcGatenewSSRCGate (uint32_t ssrc)
 Creates a new association ssrc/gateId for this ssrc. More...
 

Protected Attributes

const char * _profileName = nullptr
 The name of this profile. More...
 
int _maxReceivers = 0
 The maximum number of incoming data streams this profile module can handle. More...
 
SsrcGateMap _ssrcGates
 
int _rtcpPercentage = 0
 The percentage of the available bandwidth to be used for rtcp. More...
 
int _preferredPort = -1
 The rtp port this profile uses if no port is given. More...
 
int _mtu = 0
 The maximum size an RtpPacket can have. More...
 
bool _autoOutputFileNames = false
 If this is set true the RtpProfile automatically sets the output file name for payload receiver modules so the user is not bothered to set them manually during simulation runtime. More...
 

Detailed Description

The class RtpProfile is a module which handles RtpPayloadSender and RtpPayloadReceiver modules.

It creates them dynamically on demand. This class offers all functionality for the above tasks, subclasses just need to set variables like profile name, rtcp percentage and preferred port in their initialize() method. The dynamically created sender and receiver modules must have have following class names: Rtp<profileName>Payload<payloadType>Sender Rtp<profileName>Payload<payloadType>Receiver

Member Typedef Documentation

◆ SsrcGateMap

typedef std::map<uint32_t, SsrcGate *> inet::rtp::RtpProfile::SsrcGateMap
protected

Stores information to which gate rtp data packets from a ssrc must be forwarded.

Constructor & Destructor Documentation

◆ RtpProfile()

inet::rtp::RtpProfile::RtpProfile ( )
22 {
23 }

◆ ~RtpProfile()

inet::rtp::RtpProfile::~RtpProfile ( )
protectedvirtual
40 {
41  for (auto& elem : _ssrcGates)
42  delete elem.second;
43 }

Member Function Documentation

◆ createSenderModule()

void inet::rtp::RtpProfile::createSenderModule ( RtpInnerPacket rinp)
protectedvirtual

This method is called when the application issued the creation of an rtp payload sender module to transmit data.

It creates a new sender module and connects it. The profile module informs the rtp module of having finished this task. Then it initializes the newly create sender module with a inititalizeSenderModule message.

139 {
140  EV_TRACE << "createSenderModule Enter" << endl;
141  int ssrc = rinp->getSsrc();
142  int payloadType = rinp->getPayloadType();
143 
144  EV_INFO << "ProfileName: " << _profileName << " payloadType: " << payloadType << endl;
145 
146  std::string moduleTypeName(std::string("inet.transportlayer.rtp.Rtp") + _profileName + "Payload" + std::to_string(payloadType) + "Sender");
147  std::string moduleName(std::string("rtp") + _profileName + "Payload" + std::to_string(payloadType) + "Sender");
148 
149  cModuleType *moduleType = cModuleType::find(moduleTypeName.c_str());
150  if (moduleType == nullptr)
151  throw cRuntimeError("RtpProfile: payload sender module '%s' not found", moduleTypeName.c_str());
152 
153  RtpPayloadSender *rtpPayloadSender = check_and_cast<RtpPayloadSender *>(moduleType->create(moduleName.c_str(), this));
154  rtpPayloadSender->finalizeParameters();
155 
156  gate("payloadSenderOut")->connectTo(rtpPayloadSender->gate("profileIn"));
157  rtpPayloadSender->gate("profileOut")->connectTo(gate("payloadSenderIn"));
158 
159  rtpPayloadSender->callInitialize();
160  rtpPayloadSender->scheduleStart(simTime());
161 
162  RtpInnerPacket *rinpOut1 = new RtpInnerPacket("senderModuleCreated()");
163  rinpOut1->setSenderModuleCreatedPkt(ssrc);
164  send(rinpOut1, "rtpOut");
165 
166  RtpInnerPacket *rinpOut2 = new RtpInnerPacket("initializeSenderModule()");
167  rinpOut2->setInitializeSenderModulePkt(ssrc, rinp->getFileName(), _mtu);
168  send(rinpOut2, "payloadSenderOut");
169 
170  delete rinp;
171  EV_TRACE << "createSenderModule Exit" << endl;
172 }

Referenced by handleMessageFromRTP().

◆ dataIn()

void inet::rtp::RtpProfile::dataIn ( RtpInnerPacket rinp)
protectedvirtual

Handles incoming data packets: If there isn't a receiver module for this sender it creates one.

The data packet is forwarded to the receiver module after calling processIncomingPacket.

192 {
193  EV_TRACE << "dataIn(RtpInnerPacket *rinp) Enter" << endl;
194  processIncomingPacket(rinp);
195 
196  Packet *packet = check_and_cast<Packet *>(rinp->getEncapsulatedPacket());
197  const auto& rtpHeader = packet->peekAtFront<RtpHeader>();
198 
199  uint32_t ssrc = rtpHeader->getSsrc();
200 
201  SsrcGate *ssrcGate = findSSRCGate(ssrc);
202 
203  if (!ssrcGate) {
204  ssrcGate = newSSRCGate(ssrc);
205  std::string payloadReceiverTypeName(std::string("inet.transportlayer.rtp.Rtp") + _profileName + "Payload" + std::to_string(rtpHeader->getPayloadType()) + "Receiver");
206  std::string payloadReceiverName(std::string("rtp") + _profileName + "Payload" + std::to_string(rtpHeader->getPayloadType()) + "Receiver" + std::to_string(ssrc));
207  cModuleType *moduleType = cModuleType::find(payloadReceiverTypeName.c_str());
208  if (moduleType == nullptr)
209  throw cRuntimeError("Receiver module type %s not found", payloadReceiverTypeName.c_str());
210  else {
211  RtpPayloadReceiver *receiverModule =
212  check_and_cast<RtpPayloadReceiver *>(moduleType->create(payloadReceiverName.c_str(), this));
213  if (_autoOutputFileNames) {
214  char outputFileName[100];
215  sprintf(outputFileName, "id%i.sim", receiverModule->getId());
216  receiverModule->par("outputFileName") = outputFileName;
217  }
218  receiverModule->finalizeParameters();
219 
220  this->gate(ssrcGate->getGateId())->connectTo(receiverModule->gate("profileIn"));
221  receiverModule->gate("profileOut")->connectTo(this->gate(ssrcGate->getGateId()
222  - findGate("payloadReceiverOut", 0) + findGate("payloadReceiverIn", 0)));
223 
224  for (int i = 0; receiverModule->callInitialize(i); i++)
225  ;
226 
227  receiverModule->scheduleStart(simTime());
228  }
229  }
230 
231  send(rinp, ssrcGate->getGateId());
232  EV_TRACE << "dataIn(RtpInnerPacket *rinp) Exit" << endl;
233 }

Referenced by handleMessageFromRTP().

◆ dataOut()

void inet::rtp::RtpProfile::dataOut ( RtpInnerPacket rinp)
protectedvirtual

Handles outgoing data packets: Calls processOutgoingPacket and forwards the packet to the rtp module.

236 {
237  processOutgoingPacket(rinp);
238  send(rinp, "rtpOut");
239 }

Referenced by handleMessageFromPayloadSender().

◆ deleteSenderModule()

void inet::rtp::RtpProfile::deleteSenderModule ( RtpInnerPacket rinp)
protectedvirtual

When a sender module is no longer needed it can be deleted by the profile module.

175 {
176  cModule *senderModule = gate("payloadSenderOut")->getNextGate()->getOwnerModule();
177  senderModule->deleteModule();
178 
179  RtpInnerPacket *rinpOut = new RtpInnerPacket("senderModuleDeleted()");
180  rinpOut->setSenderModuleDeletedPkt(rinpIn->getSsrc());
181  delete rinpIn;
182 
183  send(rinpOut, "rtpOut");
184 }

Referenced by handleMessageFromRTP().

◆ findSSRCGate()

RtpProfile::SsrcGate * inet::rtp::RtpProfile::findSSRCGate ( uint32_t  ssrc)
protectedvirtual

Finds the gate of the receiver module for rtp data packets from this ssrc.

264 {
265  auto objectIndex = _ssrcGates.find(ssrc);
266  return (objectIndex == _ssrcGates.end()) ? nullptr : objectIndex->second;
267 }

Referenced by dataIn().

◆ handleMessage()

void inet::rtp::RtpProfile::handleMessage ( cMessage *  msg)
overrideprotectedvirtual

Creates and removes payload sender and receiver modules on demand.

46 {
47  if (msg->getArrivalGateId() == findGate("rtpIn")) {
49  }
50  else if (msg->getArrivalGateId() == findGate("payloadSenderIn")) {
52  }
53  else if (msg->getArrivalGateId() >= findGate("payloadReceiverIn")
54  && msg->getArrivalGateId() < findGate("payloadReceiverIn") + _maxReceivers)
55  {
57  }
58  else {
59  throw cRuntimeError("message coming from unknown gate");
60  }
61 }

◆ handleMessageFromPayloadReceiver()

void inet::rtp::RtpProfile::handleMessageFromPayloadReceiver ( cMessage *  msg)
protectedvirtual

Handles messages coming from a receiver module.

122 {
123  // currently payload receiver modules don't send messages
124  delete msg;
125 }

Referenced by handleMessage().

◆ handleMessageFromPayloadSender()

void inet::rtp::RtpProfile::handleMessageFromPayloadSender ( cMessage *  msg)
protectedvirtual

Handles messages coming from the sender module.

99 {
100  RtpInnerPacket *rinpIn = check_and_cast<RtpInnerPacket *>(msg);
101 
102  switch (rinpIn->getType()) {
103  case RTP_INP_DATA_OUT:
104  dataOut(rinpIn);
105  break;
106 
108  senderModuleInitialized(rinpIn);
109  break;
110 
112  senderModuleStatus(rinpIn);
113  break;
114 
115  default:
116  throw cRuntimeError("Profile received RtpInnerPacket from sender module with wrong type: %d", rinpIn->getType());
117  break;
118  }
119 }

Referenced by handleMessage().

◆ handleMessageFromRTP()

void inet::rtp::RtpProfile::handleMessageFromRTP ( cMessage *  msg)
protectedvirtual

Handles messages received from the rtp module.

64 {
65  EV_TRACE << "handleMessageFromRTP Enter " << endl;
66 
67  RtpInnerPacket *rinpIn = check_and_cast<RtpInnerPacket *>(msg);
68 
69  switch (rinpIn->getType()) {
71  initializeProfile(rinpIn);
72  break;
73 
75  createSenderModule(rinpIn);
76  break;
77 
79  deleteSenderModule(rinpIn);
80  break;
81 
83  senderModuleControl(rinpIn);
84  break;
85 
86  case RTP_INP_DATA_IN:
87  dataIn(rinpIn);
88  break;
89 
90  default:
91  throw cRuntimeError("RtpInnerPacket from RtpModule has wrong type: %d", rinpIn->getType());
92  break;
93  }
94 
95  EV_TRACE << "handleMessageFromRTP Exit " << endl;
96 }

Referenced by handleMessage().

◆ initialize()

void inet::rtp::RtpProfile::initialize ( )
overrideprotectedvirtual

Initializes variables.

Must be overwritten by subclasses.

Reimplemented in inet::rtp::RtpAvProfile.

26 {
27  EV_TRACE << "initialize() Enter" << endl;
28  _profileName = "Profile";
29  _rtcpPercentage = 5;
31 
32  // how many gates to payload receivers do we have
33  _maxReceivers = gateSize("payloadReceiverOut");
34  _ssrcGates.clear();
35  _autoOutputFileNames = par("autoOutputFileNames");
36  EV_TRACE << "initialize() Exit" << endl;
37 }

◆ initializeProfile()

void inet::rtp::RtpProfile::initializeProfile ( RtpInnerPacket rinp)
protectedvirtual

Initialization message received from rtp module.

128 {
129  EV_TRACE << "initializeProfile Enter" << endl;
130  _mtu = rinp->getMtu();
131  delete rinp;
132  RtpInnerPacket *rinpOut = new RtpInnerPacket("profileInitialized()");
133  rinpOut->setProfileInitializedPkt(_rtcpPercentage, _preferredPort);
134  send(rinpOut, "rtpOut");
135  EV_TRACE << "initializeProfile Exit" << endl;
136 }

Referenced by handleMessageFromRTP().

◆ newSSRCGate()

RtpProfile::SsrcGate * inet::rtp::RtpProfile::newSSRCGate ( uint32_t  ssrc)
protectedvirtual

Creates a new association ssrc/gateId for this ssrc.

270 {
271  SsrcGate *ssrcGate = new SsrcGate(ssrc);
272  bool assigned = false;
273  int receiverGateId = findGate("payloadReceiverOut", 0);
274  for (int i = receiverGateId; i < receiverGateId + _maxReceivers && !assigned; i++) {
275  if (!gate(i)->isConnected()) {
276  ssrcGate->setGateId(i);
277  assigned = true;
278  }
279  }
280 
281  if (!assigned)
282  throw cRuntimeError("Can't manage more senders");
283 
284  _ssrcGates[ssrc] = ssrcGate;
285  return ssrcGate;
286 }

Referenced by dataIn().

◆ processIncomingPacket()

void inet::rtp::RtpProfile::processIncomingPacket ( RtpInnerPacket rinp)
protectedvirtual

Every time a rtp packet is received it it pre-processed by this method to remove profile specific extension which are not handled by the payload receiver module.

In this implementation the packet isn't changed. Important: This method works with RtpInnerPacket. So the rtp packet must be decapsulated, changed and encapsulated again.

254 {
255  // do nothing with the packet
256 }

Referenced by dataIn().

◆ processOutgoingPacket()

void inet::rtp::RtpProfile::processOutgoingPacket ( RtpInnerPacket rinp)
protectedvirtual

Simular to the procedure for incoming packets, this adds profile specific extensions to outgoing rtp packets.

259 {
260  // do nothing with the packet
261 }

Referenced by dataOut().

◆ senderModuleControl()

void inet::rtp::RtpProfile::senderModuleControl ( RtpInnerPacket rinp)
protectedvirtual

The profile module forwards sender control messages to the sender module.

187 {
188  send(rinp, "payloadSenderOut");
189 }

Referenced by handleMessageFromRTP().

◆ senderModuleInitialized()

void inet::rtp::RtpProfile::senderModuleInitialized ( RtpInnerPacket rinp)
protectedvirtual

The sender module returns a senderModuleInitialized message after being initialized.

The profile module forwards this message to the rtp module which delivers it to its destination, the rtcp module.

242 {
243  EV_TRACE << "senderModuleInitialized" << endl;
244  send(rinp, "rtpOut");
245 }

Referenced by handleMessageFromPayloadSender().

◆ senderModuleStatus()

void inet::rtp::RtpProfile::senderModuleStatus ( RtpInnerPacket rinp)
protectedvirtual

After having received a sender module control message the sender module returns a sender status message to inform the application what it's doing at the moment.

248 {
249  EV_TRACE << "senderModuleStatus" << endl;
250  send(rinp, "rtpOut");
251 }

Referenced by handleMessageFromPayloadSender().

Member Data Documentation

◆ _autoOutputFileNames

bool inet::rtp::RtpProfile::_autoOutputFileNames = false
protected

If this is set true the RtpProfile automatically sets the output file name for payload receiver modules so the user is not bothered to set them manually during simulation runtime.

Referenced by dataIn(), and initialize().

◆ _maxReceivers

int inet::rtp::RtpProfile::_maxReceivers = 0
protected

The maximum number of incoming data streams this profile module can handle.

It is set to the gate size of "payloadReceiverOut", "payloadReceiverIn".

Referenced by handleMessage(), initialize(), and newSSRCGate().

◆ _mtu

int inet::rtp::RtpProfile::_mtu = 0
protected

The maximum size an RtpPacket can have.

Referenced by createSenderModule(), and initializeProfile().

◆ _preferredPort

int inet::rtp::RtpProfile::_preferredPort = -1
protected

The rtp port this profile uses if no port is given.

Referenced by initialize(), and initializeProfile().

◆ _profileName

const char* inet::rtp::RtpProfile::_profileName = nullptr
protected

The name of this profile.

Needed for dynamic creating of sender and receiver modules.

Referenced by createSenderModule(), dataIn(), and initialize().

◆ _rtcpPercentage

int inet::rtp::RtpProfile::_rtcpPercentage = 0
protected

The percentage of the available bandwidth to be used for rtcp.

Referenced by initialize(), and initializeProfile().

◆ _ssrcGates

SsrcGateMap inet::rtp::RtpProfile::_ssrcGates
protected

The documentation for this class was generated from the following files:
inet::rtp::RtpProfile::_mtu
int _mtu
The maximum size an RtpPacket can have.
Definition: RtpProfile.h:197
inet::rtp::RtpProfile::handleMessageFromRTP
virtual void handleMessageFromRTP(cMessage *msg)
Handles messages received from the rtp module.
Definition: RtpProfile.cc:63
inet::rtp::RtpProfile::dataIn
virtual void dataIn(RtpInnerPacket *rinp)
Handles incoming data packets: If there isn't a receiver module for this sender it creates one.
Definition: RtpProfile.cc:191
inet::PORT_UNDEF
const short PORT_UNDEF
TCP/UDP port numbers.
Definition: Ipv4Address.h:28
inet::rtp::RtpProfile::_rtcpPercentage
int _rtcpPercentage
The percentage of the available bandwidth to be used for rtcp.
Definition: RtpProfile.h:187
inet::rtp::RtpProfile::_profileName
const char * _profileName
The name of this profile.
Definition: RtpProfile.h:168
inet::rtp::RtpProfile::_ssrcGates
SsrcGateMap _ssrcGates
Definition: RtpProfile.h:182
inet::rtp::RtpProfile::initializeProfile
virtual void initializeProfile(RtpInnerPacket *rinp)
Initialization message received from rtp module.
Definition: RtpProfile.cc:127
inet::rtp::RTP_INP_DATA_IN
@ RTP_INP_DATA_IN
Definition: RtpInnerPacket_m.h:102
inet::find
std::vector< T >::iterator find(std::vector< T > &v, const Tk &a)
Definition: stlutils.h:44
inet::rtp::RtpProfile::findSSRCGate
virtual SsrcGate * findSSRCGate(uint32_t ssrc)
Finds the gate of the receiver module for rtp data packets from this ssrc.
Definition: RtpProfile.cc:263
inet::rtp::RTP_INP_SENDER_MODULE_CONTROL
@ RTP_INP_SENDER_MODULE_CONTROL
Definition: RtpInnerPacket_m.h:97
inet::rtp::RTP_INP_SENDER_MODULE_INITIALIZED
@ RTP_INP_SENDER_MODULE_INITIALIZED
Definition: RtpInnerPacket_m.h:96
inet::rtp::RtpProfile::processOutgoingPacket
virtual void processOutgoingPacket(RtpInnerPacket *rinp)
Simular to the procedure for incoming packets, this adds profile specific extensions to outgoing rtp ...
Definition: RtpProfile.cc:258
inet::rtp::RtpProfile::handleMessageFromPayloadReceiver
virtual void handleMessageFromPayloadReceiver(cMessage *msg)
Handles messages coming from a receiver module.
Definition: RtpProfile.cc:121
inet::rtp::RtpProfile::_maxReceivers
int _maxReceivers
The maximum number of incoming data streams this profile module can handle.
Definition: RtpProfile.h:175
inet::rtp::RtpProfile::_preferredPort
int _preferredPort
The rtp port this profile uses if no port is given.
Definition: RtpProfile.h:192
inet::rtp::RTP_INP_INITIALIZE_PROFILE
@ RTP_INP_INITIALIZE_PROFILE
Definition: RtpInnerPacket_m.h:87
inet::rtp::RTP_INP_DATA_OUT
@ RTP_INP_DATA_OUT
Definition: RtpInnerPacket_m.h:101
inet::rtp::RTP_INP_CREATE_SENDER_MODULE
@ RTP_INP_CREATE_SENDER_MODULE
Definition: RtpInnerPacket_m.h:91
inet::rtp::RtpProfile::newSSRCGate
virtual SsrcGate * newSSRCGate(uint32_t ssrc)
Creates a new association ssrc/gateId for this ssrc.
Definition: RtpProfile.cc:269
inet::rtp::RtpProfile::_autoOutputFileNames
bool _autoOutputFileNames
If this is set true the RtpProfile automatically sets the output file name for payload receiver modul...
Definition: RtpProfile.h:204
inet::rtp::RtpProfile::createSenderModule
virtual void createSenderModule(RtpInnerPacket *rinp)
This method is called when the application issued the creation of an rtp payload sender module to tra...
Definition: RtpProfile.cc:138
inet::rtp::RtpProfile::senderModuleInitialized
virtual void senderModuleInitialized(RtpInnerPacket *rinp)
The sender module returns a senderModuleInitialized message after being initialized.
Definition: RtpProfile.cc:241
inet::rtp::RtpProfile::senderModuleStatus
virtual void senderModuleStatus(RtpInnerPacket *rinp)
After having received a sender module control message the sender module returns a sender status messa...
Definition: RtpProfile.cc:247
inet::rtp::RtpProfile::dataOut
virtual void dataOut(RtpInnerPacket *rinp)
Handles outgoing data packets: Calls processOutgoingPacket and forwards the packet to the rtp module.
Definition: RtpProfile.cc:235
inet::rtp::RtpProfile::processIncomingPacket
virtual void processIncomingPacket(RtpInnerPacket *rinp)
Every time a rtp packet is received it it pre-processed by this method to remove profile specific ext...
Definition: RtpProfile.cc:253
inet::rtp::RtpProfile::deleteSenderModule
virtual void deleteSenderModule(RtpInnerPacket *rinp)
When a sender module is no longer needed it can be deleted by the profile module.
Definition: RtpProfile.cc:174
inet::rtp::RTP_INP_SENDER_MODULE_STATUS
@ RTP_INP_SENDER_MODULE_STATUS
Definition: RtpInnerPacket_m.h:98
inet::rtp::RTP_INP_DELETE_SENDER_MODULE
@ RTP_INP_DELETE_SENDER_MODULE
Definition: RtpInnerPacket_m.h:93
inet::rtp::RtpProfile::handleMessageFromPayloadSender
virtual void handleMessageFromPayloadSender(cMessage *msg)
Handles messages coming from the sender module.
Definition: RtpProfile.cc:98
inet::rtp::RtpProfile::senderModuleControl
virtual void senderModuleControl(RtpInnerPacket *rinp)
The profile module forwards sender control messages to the sender module.
Definition: RtpProfile.cc:186