--- a
+++ b/src/DAF/CDAP/CDAPSplitter.cc
@@ -0,0 +1,69 @@
+//
+// 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 "CDAPSplitter.h"
+
+Define_Module(CDAPSplitter);
+
+void CDAPSplitter::initialize()
+{
+    MsgLog = dynamic_cast<CDAPMsgLog*>(this->getParentModule()->getSubmodule(MOD_CDAPMSGLOG));
+    if (!MsgLog)
+        error("Pointer to CDAPMsgLog is not initialized!");
+}
+
+void CDAPSplitter::handleMessage(cMessage *msg)
+{
+    //Output gate pointer
+    cGate* out;
+
+    //Received from south gates
+    if ( strstr(msg->getArrivalGate()->getName(), GATE_SOUTHIO) != NULL ) {
+        //Pass it to the CACE module
+        if (dynamic_cast<CDAP_M_Connect*>(msg) ||  dynamic_cast<CDAP_M_Connect_R*>(msg) ||
+            dynamic_cast<CDAP_M_Release*>(msg) ||  dynamic_cast<CDAP_M_Release_R*>(msg) )
+        {
+            out = gateHalf(GATE_CACEIO, cGate::OUTPUT, msg->getArrivalGate()->getIndex());
+        }
+
+        //Pass it to the Auth module
+
+        //Pass it to the CDAP module
+        else if (dynamic_cast<CDAP_M_Create*>(msg) || dynamic_cast<CDAP_M_Create_R*>(msg) ||
+                 dynamic_cast<CDAP_M_Delete*>(msg) || dynamic_cast<CDAP_M_Delete_R*>(msg) ||
+                 dynamic_cast<CDAP_M_Start*>(msg) || dynamic_cast<CDAP_M_Start_R*>(msg)   ||
+                 dynamic_cast<CDAP_M_Stop*>(msg) || dynamic_cast<CDAP_M_Stop_R*>(msg)     ||
+                 dynamic_cast<CDAP_M_Write*>(msg) || dynamic_cast<CDAP_M_Write_R*>(msg)   ||
+                 dynamic_cast<CDAP_M_Read*>(msg) || dynamic_cast<CDAP_M_Read_R*>(msg)     ||
+                 dynamic_cast<CDAP_M_CancelRead*>(msg) || dynamic_cast<CDAP_M_CancelRead_R*>(msg) )
+        {
+            //EV <<"XXXXXXXX "<< msg->getArrivalGate()->getFullName() << "-" << msg->getArrivalGate()->getIndex() << endl;
+            out = gateHalf(GATE_CDAPIO, cGate::OUTPUT, msg->getArrivalGate()->getIndex());
+        }
+
+    }
+    //Received from north gates
+    else if (strstr(msg->getArrivalGate()->getName(), GATE_SOUTHIO) == NULL) {
+        out = gateHalf(GATE_SOUTHIO, cGate::OUTPUT, msg->getArrivalGate()->getIndex());
+    }
+    //Unknown message
+    else {
+        EV << this->getFullPath() << " received unknown message" << endl;
+        delete msg;
+    }
+
+    //Forward message
+    send(msg, out);
+}