--- a
+++ b/src/DAF/AE/AEPing.cc
@@ -0,0 +1,136 @@
+//
+// 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 "AEPing.h"
+
+Define_Module(AEPing);
+
+//Consts
+const char* TIM_START = "StartCommunication";
+const char* TIM_STOP = "StopCommunication";
+const char* MSG_PING = "PING-";
+const char* PAR_START = "startAt";
+const char* PAR_STOP = "stopAt";
+const char* PAR_PING = "pingAt";
+const char* PAR_RATE = "rate";
+const char* PAR_DSTAPNAME = "dstApName";
+const char* PAR_DSTAPINSTANCE = "dstApInstance";
+const char* PAR_DSTAENAME = "dstAeName";
+const char* PAR_DSTAEINSTANCE = "dstAeInstance";
+
+AEPing::AEPing() {
+}
+
+AEPing::~AEPing() {
+
+}
+
+void AEPing::prepareAllocateRequest() {
+ //Schedule AllocateRequest
+ cMessage* m1 = new cMessage(TIM_START);
+ scheduleAt(startAt, m1);
+}
+
+void AEPing::preparePing() {
+ //Schedule Data transfer
+ for (int i = 0; i < rate && pingAt + i < stopAt; i++) {
+ std::stringstream ss;
+ ss << MSG_PING << i;
+ cMessage* m2 = new cMessage(ss.str().c_str());
+ scheduleAt(pingAt + i, m2);
+ }
+}
+
+void AEPing::prepareDeallocateRequest() {
+ //Schedule DeallocateRequest
+ cMessage* m3 = new cMessage(TIM_STOP);
+ scheduleAt(stopAt, m3);
+}
+
+void AEPing::initialize()
+{
+ //Init pointers
+ initPointers();
+ //Source info
+ initNamingInfo();
+ //Setup signals
+ initSignalsAndListeners();
+ //Init QoSRequirements
+ initQoSRequiremets();
+
+ //Timers
+ startAt = simTime() + par(PAR_START);
+ stopAt = simTime() + par(PAR_STOP);
+ pingAt = simTime() + par(PAR_PING);
+ rate = par(PAR_RATE);
+
+ //Destination for flow
+ dstApName = this->par(PAR_DSTAPNAME).stringValue();
+ dstApInstance = this->par(PAR_DSTAPINSTANCE).stringValue();
+ dstAeName = this->par(PAR_DSTAENAME).stringValue();
+ dstAeInstance = this->par(PAR_DSTAEINSTANCE).stringValue();
+
+ //Flow
+ APNamingInfo src = this->getApni();
+ APNamingInfo dst = APNamingInfo( APN(this->dstApName), this->dstApInstance,
+ this->dstAeName, this->dstAeInstance);
+ Flow fl = Flow(src, dst);
+ fl.setQosParameters(this->getQoSRequirements());
+
+ //Insert it to the Flows ADT
+ insertFlow(fl);
+
+ //Schedule AllocateRequest
+ if (startAt > 0)
+ prepareAllocateRequest();
+ //Schedule Data transfer
+ if (pingAt > 0)
+ preparePing();
+ //Schedule DeallocateRequest
+ if (stopAt > 0)
+ prepareDeallocateRequest();
+
+ //Watchers
+ WATCH_LIST(flows);
+}
+
+void AEPing::handleSelfMessage(cMessage *msg) {
+ //EV << flows.back().info() << endl;
+ if ( !strcmp(msg->getName(), "StartCommunication") ) {
+ //signalizeAllocateRequest(&flows.back());
+ //FIXME: Vesely - last flow in a list?!
+ Irm->receiveAllocationRequest(&flows.back());
+ }
+ else if ( !strcmp(msg->getName(), "StopCommunication") )
+ //signalizeDeallocateRequest(&flows.back());
+ //Irm->receiveDeallocationRequest(&flows.back());
+ EV << "StopCommunication";
+ else if ( strstr(msg->getName(), "PING") ) {
+ //TODO: Vesely - Send M_READ
+ std::stringstream ss;
+ ss << "M_READ(" << msg->getName() << ")";
+ cMessage* ping = new cMessage(ss.str().c_str());
+ send(ping , "dataIo$o", 0);
+ }
+ else
+ EV << this->getFullPath() << " received unknown self-message " << msg->getName();
+ delete(msg);
+}
+
+void AEPing::handleMessage(cMessage *msg)
+{
+ if ( msg->isSelfMessage() )
+ this->handleSelfMessage(msg);
+}