62 if (msg->isSelfMessage())
75 userDataField->encapsulate((*it));
83 send(userDataField,
southO);
91 if (msg->arrivedOn(
northI->getId()))
95 else if (msg->arrivedOn(
southI->getId()))
114 std::vector<Data*> dataQ;
118 int64_t length = sduData->getByteLength();
121 data->encapsulate(sduData);
125 dataQ.push_back(data);
133 data->setByteLength(maxFlowPDUSize);
134 dataQ.push_back(data);
140 data->setByteLength(length);
141 dataQ.push_back(data);
147 for(
auto it = dataQ.begin(); it != dataQ.end(); it = dataQ.erase(it))
159 userDataField->encapsulate((*it));
167 send(userDataField,
southO);
181 data->encapsulate(sduData);
195 int64_t pduDatalength = pduData->getByteLength();
198 if(restLength < sduData->getByteLength())
201 int64_t length = sduData->getByteLength();
204 data->encapsulate(sduData);
206 data->setByteLength(restLength);
208 length -= restLength;
217 data->setByteLength(maxFlowPDUSize);
218 dataQ.push_back(data);
224 data->setByteLength(length);
225 dataQ.push_back(data);
227 for(
auto it = dataQ.begin(); it != dataQ.end(); it = dataQ.erase(it))
239 userDataField->encapsulate((*it));
247 send(userDataField,
southO);
257 data->encapsulate(sduData);
278 userDataField->encapsulate((*it));
286 send(userDataField,
southO);
293 data->encapsulate(sduData);
301 userDataField->encapsulate(pduData);
308 send(userDataField,
southO);
322 pduData =
static_cast<PDUData*
>((*it)->decapsulate());
324 for(; (data = pduData->
decapsulate()) !=
nullptr; ){
336 if (sduData !=
nullptr)
349 for(; tmpIt !=
dataQIn.end(); ++tmpIt){
358 (*it)->setByteLength((*it)->getEncapMsgLength());
360 if (sduData !=
nullptr)
396 if(!timer->isScheduled()){
virtual void setNoLength(bool noLength)
virtual void setEncapMsgLength(int64_t encapMsgLength)
virtual void setSduSeqNumPresent(bool sduSeqNumPresent)
virtual void handleMessage(cMessage *msg)
Define_Module(Delimiting)
unsigned int maxFlowSDUSize
void handleMsgFromEfcpi(UserDataField *msg)
virtual int getType() const
#define GATE_DELIMIT_SOUTHIO
virtual void setLastFragment(bool lastFragment)
#define GATE_DELIMIT_NORTHIO
std::vector< SDUData * > sduDataQIn
std::vector< Data * > dataQIn
unsigned int maxFlowPDUSize
void setSduSeqNum(unsigned int sduSeqNum)
virtual void setFirstFragment(bool firstFragment)
std::vector< UserDataField * > userDataFieldQIn
virtual void setDataType(int dataType)
void processMsgFromFAI(SDUData *msg)
void schedule(DelimitingTimers *timer)
virtual void initialize(int step)
virtual Data * decapsulate()
virtual void setCompleteSDU(bool completeSDU)
DelimitingDelimitTimer * delimitingTimer
virtual void encapsulate(Data *data)
virtual void setMidFragment(bool midFragment)
std::vector< PDUData * > pduDataQOut