INET Framework for OMNeT++/OMNEST
inet::eigrp::EigrpRequestQueue Class Reference

Queue for storing requests for message sending. More...

#include <EigrpRtp.h>

Inheritance diagram for inet::eigrp::EigrpRequestQueue:

Public Member Functions

virtual ~EigrpRequestQueue ()
 
void pushReq (EigrpMsgReq *req)
 
EigrpMsgReqfindReqByIf (int ifaceId, bool sent=true)
 Get first rel/unrel message with given interface ID from request Queue. More...
 
EigrpMsgReqfindReqByNeighbor (int neighId, bool sent=true)
 
EigrpMsgReqfindUnrelReqByIf (int ifaceId)
 Get first unrel message with given interface ID from request Queue. More...
 
EigrpMsgReqfindReqBySeq (uint32_t seqNumber)
 
EigrpMsgReqremoveReq (EigrpMsgReq *msgReq)
 
void removeAllMsgsToIf (int ifaceId)
 Delete all messages with given destination interface ID (fall of interface,...). More...
 
void removeAllMsgsToNeigh (int ifaceId)
 Delete all messages with given destination neighbor ID (end of neighborship,...). More...
 
int getNumReq () const
 
void printInfo () const
 

Private Types

typedef std::list< EigrpMsgReq * > MessageQueue
 

Private Attributes

MessageQueue reqQueue
 Queue with requests waiting for sending (rel/unrel) More...
 

Detailed Description

Queue for storing requests for message sending.

Member Typedef Documentation

◆ MessageQueue

Constructor & Destructor Documentation

◆ ~EigrpRequestQueue()

inet::eigrp::EigrpRequestQueue::~EigrpRequestQueue ( )
virtual
94 {
95  MessageQueue::iterator it;
96  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
97  delete *it;
98  }
99 }

Member Function Documentation

◆ findReqByIf()

EigrpMsgReq * inet::eigrp::EigrpRequestQueue::findReqByIf ( int  ifaceId,
bool  sent = true 
)

Get first rel/unrel message with given interface ID from request Queue.

Parameters
sentIf false search only for messages waiting for send (not actually sent).
106 {
107  MessageQueue::iterator it;
108  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
109  if ((*it)->getDestInterface() == ifaceId) {
110  if (sent) // Get first message
111  return *it;
112  else if ((*it)->getNumOfAck() == 0)
113  return *it;
114  }
115  }
116  return nullptr;
117 }

◆ findReqByNeighbor()

EigrpMsgReq * inet::eigrp::EigrpRequestQueue::findReqByNeighbor ( int  neighId,
bool  sent = true 
)
120 {
121  MessageQueue::iterator it;
122  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
123  if ((*it)->getDestNeighbor() == neighId) {
124  if (sent) // Get first message
125  return *it;
126  else if ((*it)->getNumOfAck() == 0)
127  return *it;
128  }
129  }
130  return nullptr;
131 }

◆ findReqBySeq()

EigrpMsgReq * inet::eigrp::EigrpRequestQueue::findReqBySeq ( uint32_t  seqNumber)
148 {
149  MessageQueue::iterator it;
150  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
151  if ((*it)->getSeqNumber() == seqNumber)
152  return *it;
153  }
154  return nullptr;
155 }

◆ findUnrelReqByIf()

EigrpMsgReq * inet::eigrp::EigrpRequestQueue::findUnrelReqByIf ( int  ifaceId)

Get first unrel message with given interface ID from request Queue.

137 {
138  MessageQueue::iterator it;
139  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
140  if ((*it)->getDestInterface() == ifaceId && !(*it)->isMsgReliable()) {
141  return *it;
142  }
143  }
144  return nullptr;
145 }

◆ getNumReq()

int inet::eigrp::EigrpRequestQueue::getNumReq ( ) const
inline
53 { return reqQueue.size(); }

◆ printInfo()

void inet::eigrp::EigrpRequestQueue::printInfo ( ) const
76 {
77  MessageQueue::const_iterator it;
78  EigrpMsgReq *req;
79 
80  EV_DEBUG << "EIGRP RTP: content of request queue:" << endl;
81  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
82  req = *it;
83 
84  EV_DEBUG << " Type:" << eigrpRtp::UserMsgs[req->getOpcode()];
85  EV_DEBUG << " destIF:" << req->getDestInterface();
86  EV_DEBUG << " destNeighbor:" << req->getDestNeighbor();
87  EV_DEBUG << " seqNumber:" << req->getSeqNumber();
88  EV_DEBUG << " ackNumber:" << req->getAckNumber();
89  EV_DEBUG << " numberOfAck:" << req->getNumOfAck() << endl;
90  }
91 }

◆ pushReq()

void inet::eigrp::EigrpRequestQueue::pushReq ( EigrpMsgReq req)
158 {
159  reqQueue.push_back(req);
160 #ifdef EIGRP_RTP_DEBUG
161 // printInfo();
162 #endif
163 }

◆ removeAllMsgsToIf()

void inet::eigrp::EigrpRequestQueue::removeAllMsgsToIf ( int  ifaceId)

Delete all messages with given destination interface ID (fall of interface,...).

184 {
185  MessageQueue::iterator it;
186  for (it = reqQueue.begin(); it != reqQueue.end();) {
187  if ((*it)->getDestInterface() == ifaceId) {
188  delete *it;
189  it = reqQueue.erase(it);
190  }
191  else
192  ++it;
193  }
194 }

◆ removeAllMsgsToNeigh()

void inet::eigrp::EigrpRequestQueue::removeAllMsgsToNeigh ( int  ifaceId)

Delete all messages with given destination neighbor ID (end of neighborship,...).

200 {
201  MessageQueue::iterator it;
202  for (it = reqQueue.begin(); it != reqQueue.end();) {
203  if ((*it)->getDestNeighbor() == neighborId) {
204  delete *it;
205  it = reqQueue.erase(it);
206  }
207  else
208  ++it;
209  }
210 }

◆ removeReq()

EigrpMsgReq * inet::eigrp::EigrpRequestQueue::removeReq ( EigrpMsgReq msgReq)
166 {
167  MessageQueue::iterator it;
168  for (it = reqQueue.begin(); it != reqQueue.end(); it++) {
169  if ((*it) == msgReq) {
170  reqQueue.erase(it);
171 #ifdef EIGRP_RTP_DEBUG
172 // printInfo();
173 #endif
174  return msgReq;
175  }
176  }
177  return nullptr;
178 }

Member Data Documentation

◆ reqQueue

MessageQueue inet::eigrp::EigrpRequestQueue::reqQueue
private

The documentation for this class was generated from the following files:
inet::eigrp::eigrpRtp::UserMsgs
const char * UserMsgs[]
Definition: EigrpRtp.cc:48
inet::eigrp::EigrpRequestQueue::reqQueue
MessageQueue reqQueue
Queue with requests waiting for sending (rel/unrel)
Definition: EigrpRtp.h:37