RINASim  October 2016
Documentation of framework for OMNeT++
AE.cc
Go to the documentation of this file.
1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2014-2016 Brno University of Technology, PRISTINE project
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in
13 // all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 // THE SOFTWARE.
22 
23 #include "AE.h"
24 #include "Socket.h"
26 
27 AE::AE() :
28  Irm(NULL), Cdap(NULL)
29 {
30  FlowObject = NULL;
32  maxConRetries = 3;
34 }
35 
38  FlowObject = NULL;
39  Irm = NULL;
40  Cdap = NULL;
41 }
42 
44  //Init pointers
45  initPointers();
46  //Source info
48  //Setup signals
50  //Watchers
51  //WATCH_LIST(flows);
52  WATCH(FlowObject);
53  WATCH(connectionState);
54 }
55 
57  Irm = getRINAModule<IRM*>(this, 4, {MOD_IPCRESMANAGER, MOD_IRM});
58  Cdap = getRINAModule<cModule*>(this, 1, {MOD_CDAP});
59  Cace = new CACEGeneric(this);
60 
61  if (!Cdap)
62  error("Pointers to Cdap !");
63  if (!Irm || !Cdap)
64  error("Pointers to Irm or ConnectionTable or Cdap are not initialized!");
65 }
66 
68  cModule* catcher1 = this->getParentModule();
69  cModule* catcher2 = this->getModuleByPath("^.^.^.^");
70  cModule* catcher3 = this->getModuleByPath("^.^.^");
71 
72 
73  //Signals that this module is emitting
74  sigAEAllocReq = registerSignal(SIG_AE_AllocateRequest);
75  sigAEDeallocReq = registerSignal(SIG_AE_DeallocateRequest);
76  sigAESendData = registerSignal(SIG_AE_DataSend);
79  sigAEConReq = registerSignal(SIG_AE_ConnectionRequest);
80  sigAERelReq = registerSignal(SIG_AE_ReleaseRequest);
81  sigAEEnrolled = registerSignal(SIG_AE_Enrolled);
82  sigAEAPAPI = registerSignal(SIG_AE_AP_API);
83 
84 
85  //Signals that this module is processing
86  lisAERcvData = new LisAEReceiveData(this);
87  catcher1->subscribe(SIG_CDAP_DateReceive, lisAERcvData);
88 
89  //TODO: solve problem with dynamic creation when listener is called (can not subscribe to the same signal)
90  // AllocationRequest from FAI
91  //lisAEAllReqFromFai = new LisAEAllReqFromFai(this);
92  //catcher2->subscribe(SIG_FAI_AllocateRequest, lisAEAllReqFromFai);
93 
94  // Enrollment
95  lisAEEnrolled = new LisAEEnrolled(this);
96  //catcher3->subscribe(SIG_AEMGMT_ConnectionResponsePositive, lisAEEnrolled);
97 
98  // AP-AE API
99  lisAPAEAPI = new LisAPAEAPI(this);
100  catcher3->subscribe(SIG_AP_AE_API, lisAPAEAPI);
101 
102  // DeallocationRequest from FAI
104  catcher2->subscribe(SIG_FAI_DeallocateRequest, lisAEDeallReqFromFai);
106  catcher2->subscribe(SIG_FAI_DeallocateResponse, lisAEDeallResFromFai);
107 
108  lisAEAllResPosi = new LisAEAllResPosi(this);
110 
111  lisAEAllResNega = new LisAEAllResNega(this);
113 }
114 
115 
116 void AE::handleMessage(cMessage* msg) {
117 }
118 
120  EV << this->getFullPath() << " created bindings and registered a new flow" << endl;
121  //Create new gates
122  cGate* gIrmIn;
123  cGate* gIrmOut;
124  Irm->getOrCreateFirstUnconnectedGatePair(GATE_AEIO, false, true, *&gIrmIn, *&gIrmOut);
125 
126  cModule* IrmMod = Irm->getParentModule();
127  cGate* gIrmModIn;
128  cGate* gIrmModOut;
129  IrmMod->getOrCreateFirstUnconnectedGatePair(GATE_NORTHIO, false, true, *&gIrmModIn, *&gIrmModOut);
130 
131  cModule* ApMon = this->getModuleByPath("^.^.^");
132  cGate* gApIn;
133  cGate* gApOut;
134  ApMon->getOrCreateFirstUnconnectedGatePair(GATE_SOUTHIO, false, true, *&gApIn, *&gApOut);
135 
136  //Get AE gates
137  cModule* AeMod = this->getModuleByPath("^.^");
138  cGate* gAeIn;
139  cGate* gAeOut;
140  AeMod->getOrCreateFirstUnconnectedGatePair("southIo", false, true, *&gAeIn, *&gAeOut);
141 
142  //Get AE instance gates
143  cModule* AeInstanceMod = this->getModuleByPath("^");
144  cGate* gAeInstIn;
145  cGate* gAeInstOut;
146  AeInstanceMod->getOrCreateFirstUnconnectedGatePair("aeIo", false, true, *&gAeInstIn, *&gAeInstOut);
147 
148  //Get Socket South Gates
149  cModule* SocketMod = this->getModuleByPath("^.socket");
150  cGate* gSocketIn;
151  cGate* gSocketOut;
152  SocketMod->getOrCreateFirstUnconnectedGatePair("southIo", false, true, *&gSocketIn, *&gSocketOut);
153 
154  //Get Socket CDAP Gates
155  cGate* gSocketCdapIn = SocketMod->gateHalf("cdapIo", cGate::INPUT);
156 
157  //TODO: Vesely -> Jerabek: Unused variable!
158  //cGate* gSocketCdapOut = SocketMod->gateHalf("cdapIo", cGate::OUTPUT);
159 
160  //Dirty hack
161  Socket* socket = dynamic_cast<Socket*>(SocketMod);
162  socket->setFlow(&flow);
163 
164 
165  //CDAPParent Module gates
166  //TODO: Vesely -> Jerabek: Unused variable!
167  //cGate* gCdapParentIn = Cdap->gateHalf(GATE_SOUTHIO, cGate::INPUT);
168  //TODO: Vesely -> Jerabek: Unused variable!
169  //cGate* gCdapParentOut = Cdap->gateHalf(GATE_SOUTHIO, cGate::OUTPUT);
170 
171  //Connect gates together
172  gIrmOut->connectTo(gIrmModOut);
173  gIrmModOut->connectTo(gApIn);
174  gApIn->connectTo(gAeIn);
175  gAeIn->connectTo(gAeInstIn);
176  gAeInstIn->connectTo(gSocketIn);
177  //gSocketCdapIn->connectTo(gCdapParentIn);
178 
179  //gCdapParentOut->connectTo(gSocketCdapOut);
180  gSocketOut->connectTo(gAeInstOut);
181  gAeInstOut->connectTo(gAeOut);
182  gAeOut->connectTo(gApOut);
183  gApOut->connectTo(gIrmModIn);
184  gIrmModIn->connectTo(gIrmIn);
185 
186  //Set north-half of the routing in ConnectionTable
187  Irm->setNorthGates(&flow, gIrmIn, gIrmOut);
188 
189 
190  //Return true if all dynamically created gates have same index
191  return gIrmIn->isConnected()
192  && gAeIn->isConnected()
193  && gIrmModIn->isConnected()
194  && gApIn->isConnected()
195  && gAeInstIn->isConnected()
196  && gSocketCdapIn->isConnected();
197 }
198 
199 
201  //Add a new flow to
202 
203  //Prepare flow
205 
206  //Interconnect IRM and AE
207 
208  bool status = createBindings(*FlowObject);
209  if (!status) {
210  EV << "Gate inconsistency during creation of a new flow!" << endl;
211  }
212 }
213 
216 
217  //send response to AP Instance
218  APIResult *obj = new APIResult();
220  obj->setCDAPConId(cdapConId);
222  signalizeAEAPAPI(obj);
223 
224 }
225 
226 void AE::start(Flow* flow) {
227  if (flow) {
229  FlowObject = flow;
230  insertFlow();
231 
232  //Interconnect IRM and IPC
233  bool status = Irm->receiveAllocationResponsePositiveFromIpc(flow);
234 
235  //Change connection status
236  if (status) {
239  }
240  else {
241  EV << "IRM was unable to create bindings!" << endl;
242  }
243  }
244  else {
245  APNamingInfo src = this->getApni();
246 
247  std::string dstApName = this->par("dstApName").stringValue();
248  std::string dstApInstance = this->par("dstApInstance").stringValue();
249  std::string dstAeName = this->par("dstAeName").stringValue();
250  std::string dstAeInstance = this->par("dstAeInstance").stringValue();
251 
252  APNamingInfo dst = APNamingInfo( APN(dstApName), dstApInstance,
253  dstAeName, dstAeInstance);
254 
255  //Create a flow
256  FlowObject = new Flow(src, dst);
257  //TODO: change configuration of qos
259 
260  //Notify IRM about a new flow
261  insertFlow();
262 
263  //Call flow allocation request
265  }
266 }
267 
268 
270  if (obj->getAPIReqType() == APIReqObj::A_READ) {
271  Enter_Method("onA_read()");
272  onA_read(obj);
273  }
274  else if (obj->getAPIReqType() == APIReqObj::A_WRITE) {
275  Enter_Method("onA_write()");
276  onA_write(obj);
277  }
278  if (obj->getAPIReqType() == APIReqObj::A_CLOSE) {
279  Enter_Method("onA_close()");
281  }
282 }
283 
285  Enter_Method("receiveData()");
286  //M_READ_Request
287  if (dynamic_cast<CDAP_M_Read*>(msg)) {
288  Enter_Method("processMRead()");
289  processMRead(msg);
290  }
291  //M_READ_Response
292  else if (dynamic_cast<CDAP_M_Read_R*>(msg)) {
293  Enter_Method("processMReadR()");
294  processMReadR(msg);
295  }
296  else if (dynamic_cast<CDAP_M_Connect_R*>(msg)) {
297  Enter_Method("processMConnectR()");
298  CDAP_M_Connect_R* cmsg = dynamic_cast<CDAP_M_Connect_R*>(msg);
299  if (!cmsg->getResult().resultValue) {
301  }
302  else {
304  }
305  }
306  else if (dynamic_cast<CDAP_M_Connect*>(msg)) {
308  }
309  //M_WRITE_Request
310  else if (dynamic_cast<CDAP_M_Write*>(msg)) {
311  processMWrite(msg);
312  }
313  //M_WRITE_Response
314  else if (dynamic_cast<CDAP_M_Write_R*>(msg)) {
315  processMWriteR(msg);
316  }
317 
318  delete msg;
319 }
320 
322  Enter_Method("receiveAllocationRequestFromFai()");
323 
324  if ( QoSRequirements.compare(flow->getQosRequirements()) ) {
325 
326  //Initialize flow within AE
327  FlowObject = flow;
328  insertFlow();
329 
330  //Interconnect IRM and IPC
331  bool status = Irm->receiveAllocationResponsePositiveFromIpc(flow);
332 
333  //Change connection status
334  if (status) {
337  }
338  else {
339  EV << "IRM was unable to create bindings!" << endl;
340  }
341  }
342  else {
343  EV << "QoS Requirement cannot be met, please check AE attributes!" << endl;
345  }
346 }
347 
348 
350  Enter_Method("receiveAllocationResponseNegative()");
351  //Change allocation status
353 
355 
356  //Change connection status
358 }
359 
361  Enter_Method("receiveAllocationResponsePositive()");
362  //Interconnect IRM and IPC
364 
365  //CACE starts here!
366  this->Cace->startCACE(flow);
367 }
368 
370  //TODO: Vesely - Substitute with signal
372 
373  //Change connection status
375 }
376 
378  //TODO: Vesely - Substitute with signal
380 }
381 
382 
383 void AE::sendData(Flow* flow, CDAPMessage* msg) {
384  //Retrieve handle from ConTab record
385  int handle = Irm->getIrmGateHandle(flow);
386  if (handle != VAL_UNDEF_HANDLE) {
387  //Pass Data to CDAP
388  //Connection/Release or send data msg
389  if (dynamic_cast<CDAP_M_Connect*>(msg) != NULL &&
392  }
393  else if(dynamic_cast<CDAP_M_Release*>(msg) != NULL){
396  }
397  else if(getConStatus() == ESTABLISHED
398  //TODO: Vesely - Ugly hack to support old AE wo Establishment. Should be removed sooner or later
400  ){
401  signalizeSendData(msg);
402  }
403  }
404  else {
405  EV << "Sending data before flow is allocated!" << endl;
406  delete msg;
407  }
408 }
409 
411 
412 }
413 
415  Enter_Method("receiveDeallocationRequestFromFai()");
416 
417  bool status;
418  status = deleteBindings(*flow);
419  if (!status) {
420  EV << "deleteBindings() failed during DeallocateRequest processing!" << endl;
421  return;
422  }
423 
424  status = Irm->deleteBindings(flow);
425  if (!status) {
426  EV << "IRM.deleteBindings() failed during DeallocateRequest processing!" << endl;
427  return;
428  }
429 
430  //EV << "Statusak> " << status;
431 }
432 
434  EV << this->getFullPath() << " deleted bindings" << endl;
435 
436  int handle1 = Irm->getIrmGateHandle(&flow);
437  //TODO: Vesely -> Jerabek: Unused variable!
438  //int handle2 = Irm->getApGateHandle(&flow);
439  if (handle1 == VAL_UNDEF_HANDLE)
440  error("Delete gates before flow allocation is impossible!");
441 
442  //Disconnect gates
443  cGate* gIrmIn = Irm->gateHalf(GATE_AEIO, cGate::INPUT, handle1);
444  cGate* gIrmOut = Irm->gateHalf(GATE_AEIO, cGate::OUTPUT, handle1);
445 
446  cModule* IrmMod = Irm->getParentModule();
447  cGate* gIrmModIn = IrmMod->gateHalf(GATE_NORTHIO,cGate::INPUT, handle1);
448  cGate* gIrmModOut = IrmMod->gateHalf(GATE_NORTHIO,cGate::OUTPUT, handle1);
449 
450  //Get Socket South Gates
451  //TODO: when more connections, change index system
452  cModule* SocketMod = this->getModuleByPath("^.socket");
453  cGate* gSocketIn = SocketMod->gateHalf(GATE_SOUTHIO, cGate::INPUT, 0);
454  cGate* gSocketOut = SocketMod->gateHalf(GATE_SOUTHIO, cGate::OUTPUT, 0);
455 
456  cGate* gAeInstIn = gSocketIn->getPreviousGate();
457  cGate* gAeInstOut = gSocketOut->getNextGate();
458 
459  cGate* gAeIn = gAeInstIn->getPreviousGate();
460  cGate* gAeOut = gAeInstOut->getNextGate();
461 
462  cGate* gApIn = gAeIn->getPreviousGate();
463 
464 
465  cModule* CdapMod = this->getModuleByPath("^.commonDistributedApplicationProtocol");
466  cGate* gCdapIn = CdapMod->gateHalf(GATE_SOUTHIO, cGate::INPUT);
467  cGate* gCdapOut = CdapMod->gateHalf(GATE_SOUTHIO, cGate::OUTPUT);
468 
469  cGate* gCdapSocketOut = gCdapIn->getPreviousGate();
470 
471  //Disconnect gates
472  gCdapSocketOut->disconnect();
473  gCdapOut->disconnect();
474 
475  gSocketOut->disconnect();
476  gAeInstIn->disconnect();
477 
478  gAeInstOut->disconnect();
479 
480  gAeIn->disconnect();
481  gAeOut->disconnect();
482  gApIn->disconnect();
483 
484 
485  gIrmOut->disconnect();
486  gIrmModOut->disconnect();
487  gIrmModIn->disconnect();
488  gIrmIn->disconnect();
489 
490 
491  APIResult *del = new APIResult();
493  del->setObjName(this->getModuleByPath("^")->getFullName());
494  signalizeAEAPAPI(del);
495 
496 
497  //Return true if all dynamically created gates are disconnected
498  return !gIrmIn->isConnected()
499  && !gIrmOut->isConnected()
500  && !gIrmModIn->isConnected()
501  && !gIrmModOut->isConnected()
502  && !gApIn->isConnected()
503  && !gAeOut->isConnected()
504  && !gAeIn->isConnected()
505  && !gAeInstOut->isConnected()
506  && !gSocketOut->isConnected()
507  && !gCdapOut->isConnected()
508  && !gCdapSocketOut->isConnected();
509 }
510 
512 }
513 
515 }
516 
518 }
519 
520 
521 void AE::connect(){
522  APNIPair* apnip = new APNIPair(
523  APNamingInfo(),
524  APNamingInfo());
525  emit(sigAEEnrolled, apnip);
526 }
527 
529 }
530 
531 
533  //TODO: Vesely -> Jerabek: RESOLVE!
534  return false;
535 }
536 
538  //TODO: Vesely -> Jerabek: RESOLVE!
539  return false;
540 }
541 
542 
544  emit(sigAEAllocReq, flow);
545 }
546 
548  emit(sigAEDeallocReq, flow);
549 }
550 
552  emit(sigAEConReq, msg);
553 }
554 
556  emit(sigAERelReq, msg);
557 }
558 
560  emit(sigAEAllocResNega, flow);
561 }
562 
563 void AE::signalizeSendData(cMessage* msg) {
564  EV << "Emits SendData signal for message " << msg->getName() << endl;
565  emit(sigAESendData, msg);
566 }
567 
569  emit(sigAEAllocResPosi, flow);
570 }
571 
573  emit(sigAEAPAPI, obj);
574 }
simsignal_t sigAEDeallocReq
Definition: AE.h:89
LisAEAllResPosi * lisAEAllResPosi
Definition: AE.h:103
Class representing flow object with attributes from specs.
Definition: Flow.h:45
void setQosRequirements(const QoSReq &qosReqs)
Sets QoS parameters wanted by flow initiator.
Definition: Flow.cc:323
void setFlow(Flow *flow)
Definition: Socket.cc:52
simsignal_t sigAEConReq
Definition: AE.h:93
simsignal_t sigAESendData
Definition: AE.h:90
void signalizeDeallocateRequest(Flow *flow)
Definition: AE.cc:547
bool createBindings(Flow &flow)
Definition: AE.cc:119
void receivePositiveConnectResponse(CDAPMessage *msg)
Definition: CACEGeneric.cc:123
bool deleteBindings(Flow *flow)
Definition: IRM.cc:287
const char * SIG_FAI_DeallocateRequest
Definition: RINASignals.cc:106
const char * SIG_AE_AP_API
Definition: RINASignals.cc:41
AE()
Definition: AE.cc:27
Flow * FlowObject
Definition: AEBase.h:90
simsignal_t sigAEEnrolled
Definition: AE.h:95
const char * SIG_AERIBD_AllocateResponsePositive
Definition: RINASignals.cc:91
void signalizeConnectionRequest(CDAPMessage *msg)
Definition: AE.cc:551
void apiSwitcher(APIReqObj *obj)
Definition: AE.cc:269
void signalizeAllocateResponsePositive(Flow *flow)
Definition: AE.cc:568
virtual void processMReadR(CDAPMessage *msg)
Definition: AE.cc:511
CDAPConnectionState connectionState
Definition: AEBase.h:106
Application Process Name class.
Definition: APN.h:36
void CACEFinished()
Definition: AE.cc:214
void receiveAllocationResponseNegative(Flow *flow)
Definition: AE.cc:349
Definition: AE.h:44
const APNamingInfo & getApni() const
Definition: AEBase.cc:47
cModule * Cdap
Definition: AE.h:74
const char * GATE_AEIO
int maxConRetries
Definition: AEBase.h:102
Define_Module(AE)
int startInvokeId
Definition: AEBase.h:87
void signalizeSendData(cMessage *msg)
Definition: AE.cc:563
void signalizeAllocateResponseNegative(Flow *flow)
Definition: AE.cc:559
void start(Flow *flow)
Definition: AE.cc:226
const char * SIG_AE_DeallocateRequest
Definition: RINASignals.cc:35
void receiveAllocationResponsePositive(Flow *flow)
Definition: AE.cc:360
simsignal_t sigAEAllocReq
Definition: AE.h:88
void receiveData(CDAPMessage *obj)
Definition: AE.cc:284
void changeStatus(Flow *flow, ConnectionTableEntry::ConnectionStatus status)
Definition: IRM.cc:329
void initNamingInfo()
Definition: AEBase.cc:111
void signalizeAllocateRequest(Flow *flow)
Definition: AE.cc:543
simsignal_t sigAERelReq
Definition: AE.h:94
virtual bool onA_write(APIReqObj *obj)
Definition: AE.cc:537
bool receiveAllocationRequestFromAe(Flow *flow)
Definition: IRM.cc:184
void startCACE(Flow *flow)
Definition: CACEGeneric.cc:56
virtual void initialize()
Definition: AE.cc:43
QoSReq QoSRequirements
Definition: AEBase.h:104
Definition: AEBase.h:58
const char * SIG_AE_AllocateRequest
Definition: RINASignals.cc:34
APIReqObj::APIReqType getAPIReqType()
Definition: APIReqObj.cc:40
const char * SIG_FAI_AllocateResponseNegative
Definition: RINASignals.cc:109
virtual void connect()
Definition: AE.cc:521
LisAEEnrolled * lisAEEnrolled
Definition: AE.h:110
APNamingInfo holds complete naming info for particular application process.
Definition: APNamingInfo.h:43
void receiveConnectRequest(CDAPMessage *msg)
Definition: CACEGeneric.cc:176
const QoSReq & getQosRequirements() const
Gets QoS parameters wanted by flow initiator.
Definition: Flow.cc:176
bool receiveDeallocationRequestFromAe(Flow *flow)
Definition: IRM.cc:205
void initPointers()
Definition: AE.cc:56
simsignal_t sigAEAllocResPosi
Definition: AE.h:91
const char * SIG_FAI_DeallocateResponse
Definition: RINASignals.cc:107
simsignal_t sigAEAPAPI
Definition: AE.h:98
void setObjName(std::string objName)
Definition: APIResult.cc:48
const char * SIG_AE_DataSend
Definition: RINASignals.cc:36
IRM * Irm
Definition: AE.h:73
void newFlow(Flow *flow)
Definition: IRM.cc:235
const char * MOD_CDAP
Definition: ExternConsts.cc:26
unsigned long cdapConId
Definition: AEBase.h:88
virtual void afterOnStart()
Definition: AE.cc:528
void receiveAllocationRequestFromFAI(Flow *flow)
Definition: AE.cc:321
const char * MOD_IRM
Definition: ExternConsts.cc:50
virtual void processMWriteR(CDAPMessage *msg)
Definition: AE.cc:517
virtual void handleMessage(cMessage *msg)
Definition: AE.cc:116
void insertFlow()
Definition: AE.cc:200
const char * SIG_AE_ReleaseRequest
Definition: RINASignals.cc:38
const char * GATE_SOUTHIO
const char * SIG_AP_AE_API
Definition: RINASignals.cc:32
void signalizeAEAPAPI(APIResult *obj)
Definition: AE.cc:572
void signalizeReleaseRequest(CDAPMessage *msg)
Definition: AE.cc:555
CACEGeneric * Cace
Definition: AE.h:75
virtual void processMRead(CDAPMessage *msg)
Definition: AE.cc:410
const char * SIG_AE_Enrolled
Definition: RINASignals.cc:39
void setAPIResType(APIResult::APIResType type)
Definition: APIResult.cc:31
void setInvokeId(unsigned long id)
Definition: APIObjBase.cc:40
const char * GATE_NORTHIO
Definition: Socket.h:40
virtual result_t & getResult()
void sendDeallocationRequest(Flow *flow)
Definition: AE.cc:377
friend class CACEGeneric
Definition: AE.h:46
CDAPConnectionState getConStatus()
Definition: AEBase.cc:107
const char * SIG_FAI_AllocateResponsePositive
Definition: RINASignals.cc:108
const char * SIG_AERIBD_AllocateResponseNegative
Definition: RINASignals.cc:92
const QoSReq & getQoSRequirements() const
Definition: AEBase.cc:128
virtual bool onA_read(APIReqObj *obj)
Definition: AE.cc:532
void initSignalsAndListeners()
Definition: AE.cc:67
void setNorthGates(Flow *flow, cGate *nIn, cGate *nOut)
Definition: IRM.cc:342
int authType
Definition: AEBase.h:98
void setCDAPConId(unsigned long id)
Definition: APIObjBase.cc:32
LisAPAEAPI * lisAPAEAPI
Definition: AE.h:113
LisAEDeallReqFromFai * lisAEDeallResFromFai
Definition: AE.h:106
LisAEAllResNega * lisAEAllResNega
Definition: AE.h:104
bool compare(const QoSReq &other) const
Definition: QoSReq.cc:355
const char * SIG_AE_ConnectionRequest
Definition: RINASignals.cc:37
int32_t resultValue
void receiveDeallocationRequestFromFAI(Flow *flow)
Definition: AE.cc:414
LisAEDeallReqFromFai * lisAEDeallReqFromFai
Definition: AE.h:105
void sendData(Flow *flow, CDAPMessage *msg)
Definition: AE.cc:383
bool receiveAllocationResponsePositiveFromIpc(Flow *flow)
Definition: IRM.cc:276
simsignal_t sigAEAllocResNega
Definition: AE.h:92
void changeConStatus(CDAPConnectionState conState)
Definition: AEBase.cc:103
virtual void processMWrite(CDAPMessage *msg)
Definition: AE.cc:514
const char * SIG_CDAP_DateReceive
Definition: RINASignals.cc:81
void receiveNegativeConnectResponse(CDAPMessage *msg)
Definition: CACEGeneric.cc:147
LisAEReceiveData * lisAERcvData
Definition: AE.h:101
const int VAL_UNDEF_HANDLE
Definition: IRM.cc:26
const char * MOD_IPCRESMANAGER
Definition: ExternConsts.cc:49
void sendAllocationRequest(Flow *flow)
Definition: AE.cc:369
bool deleteBindings(Flow &flow)
Definition: AE.cc:433
int getIrmGateHandle(Flow *flow) const
Definition: IRM.cc:333
virtual ~AE()
Definition: AE.cc:36