--- a/src/DAF/CDAP/CDAP.cc
+++ b/src/DAF/CDAP/CDAP.cc
@@ -19,10 +19,43 @@
void CDAP::initialize()
{
- // TODO - Generated method body
+ initSignalsAndListeners();
}
-void CDAP::handleMessage(cMessage *msg)
+void CDAP::handleMessage(cMessage* msg)
{
- // TODO - Generated method body
+ //Pass CDAP message to AE or RIBd
+ if (dynamic_cast<CDAPMessage*>(msg)) {
+ CDAPMessage* cmsg = check_and_cast<CDAPMessage*>(msg);
+ cmsg->setHandle(cmsg->getArrivalGate()->getIndex());
+ signalizeReceiveData(cmsg);
+ }
+ //FIXME: Vesely - Proper disposing of object
+ //delete msg;
}
+
+void CDAP::initSignalsAndListeners() {
+ cModule* catcher = this->getParentModule()->getParentModule();
+
+ //Signals emmited by this module
+ sigCDAPReceiveData = registerSignal(SIG_CDAP_DateReceive);
+
+ //Listeners registered to process signal
+ lisCDAPSendData = new LisCDAPSendData(this);
+ catcher->subscribe(SIG_AE_DataSend, lisCDAPSendData);
+ catcher->subscribe(SIG_RIBD_DataSend, lisCDAPSendData);
+}
+
+void CDAP::sendData(CDAPMessage* cmsg) {
+ //Change and take ownership
+ Enter_Method("SendData()");
+ take(check_and_cast<cOwnedObject*>(cmsg) );
+
+ //Send message
+ cGate* out = gateHalf(GATE_SPLITIO, cGate::OUTPUT, cmsg->getHandle());
+ send(cmsg, out);
+}
+
+void CDAP::signalizeReceiveData(CDAPMessage* cmsg) {
+ emit(sigCDAPReceiveData, cmsg);
+}