--- a
+++ b/src/DIF/RIB/RIBdListeners.cc
@@ -0,0 +1,130 @@
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+// 
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/.
+// 
+
+#include "RIBdListeners.h"
+
+RIBdListeners::RIBdListeners(RIBdBase* nribd) : ribd(nribd)
+{
+}
+
+RIBdListeners::~RIBdListeners() {
+    ribd = NULL;
+}
+
+void LisRIBDCreReq::receiveSignal(cComponent* src, simsignal_t id, cObject* obj) {
+    EV << "CreateRequest initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->sendCreateRequestFlow(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDRcvData::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "ReceiveData initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    CDAPMessage* cimsg = dynamic_cast<CDAPMessage*>(obj);
+    if (cimsg) {
+        ribd->receiveData(cimsg);
+    }
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDAllReqFromFai::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "AllocationRequest{fromFAI} initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow) {
+        //Check whether dstApp is local...
+        const APN dstApn = flow->getSrcApni().getApn();
+        if (ribd->getMyAddress().getApname() == dstApn)
+            ribd->receiveAllocationRequestFromFai(flow);
+    }
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+
+}
+
+void LisRIBDCreResNega::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "CreateResponseFlowNegative initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->sendCreateResponseNegative(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDCreResPosi::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "CreateResponseFlowPositive initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->sendCreateResponsePostive(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDDelReq::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "DeleteRequest initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->sendDeleteRequestFlow(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDDelRes::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "DeleteResponse initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->sendDeleteResponseFlow(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+}
+
+void LisRIBDCreFloNega::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "CreateFlowNega initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->receiveCreateFlowNegativeFromRa(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+
+}
+
+void LisRIBDCreFloPosi::receiveSignal(cComponent* src, simsignal_t id,
+        cObject* obj) {
+    EV << "CreateFlowNegative initiated by " << src->getFullPath()
+       << " and processed by " << ribd->getFullPath() << endl;
+    Flow* flow = dynamic_cast<Flow*>(obj);
+    if (flow)
+        ribd->receiveCreateFlowPositiveFromRa(flow);
+    else
+        EV << "RIBdListener received unknown object!" << endl;
+
+}