--- a/src/DAF/AE/AEPing.cc
+++ b/src/DAF/AE/AEPing.cc
@@ -29,6 +29,7 @@
const char* PAR_DSTAPINSTANCE = "dstApInstance";
const char* PAR_DSTAENAME = "dstAeName";
const char* PAR_DSTAEINSTANCE = "dstAeInstance";
+const char* VAL_MODULEPATH = "getFullPath()";
AEPing::AEPing() {
}
@@ -46,7 +47,7 @@
void AEPing::preparePing() {
//Schedule Data transfer
for (int i = 0; i < rate && pingAt + i < stopAt; i++) {
- std::stringstream ss;
+ std::ostringstream ss;
ss << MSG_PING << i;
cMessage* m2 = new cMessage(ss.str().c_str());
scheduleAt(pingAt + i, m2);
@@ -82,16 +83,6 @@
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();
@@ -102,27 +93,46 @@
if (stopAt > 0)
prepareDeallocateRequest();
+ myPath = this->getFullPath();
+
//Watchers
WATCH_LIST(flows);
}
void AEPing::handleSelfMessage(cMessage *msg) {
//EV << flows.back().info() << endl;
- if ( !strcmp(msg->getName(), "StartCommunication") ) {
- //signalizeAllocateRequest(&flows.back());
+ if ( !strcmp(msg->getName(), TIM_START) ) {
//FIXME: Vesely - last flow in a list?!
- Irm->receiveAllocationRequest(&flows.back());
+
+ //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);
+
+ sendAllocationRequest(&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 if ( !strcmp(msg->getName(), TIM_STOP) ) {
+ //FIXME: Vesely - last flow in a list?!
+ sendDeallocationRequest(&flows.back());
+ }
+ else if ( strstr(msg->getName(), MSG_PING) ) {
+ //Create PING messsage
+ CDAP_M_Read* ping = new CDAP_M_Read(VAL_MODULEPATH);
+ object_t obj;
+ obj.objectName = VAL_MODULEPATH;
+ obj.objectClass = "string";
+ obj.objectInstance = -1;
+ obj.objectVal = (cObject*)(&myPath);
+ ping->setObject(obj);
+
+ //Send message
+ sendData(&flows.back(), ping);
}
else
EV << this->getFullPath() << " received unknown self-message " << msg->getName();
@@ -134,3 +144,46 @@
if ( msg->isSelfMessage() )
this->handleSelfMessage(msg);
}
+
+void AEPing::processMRead(CDAPMessage* msg) {
+ CDAP_M_Read* msg1 = check_and_cast<CDAP_M_Read*>(msg);
+
+ EV << "Received M_Read";
+ object_t object = msg1->getObject();
+ EV << " with object '" << object.objectClass << "'" << endl;
+
+ if ( strstr(object.objectName.c_str(), VAL_MODULEPATH) ) {
+ std::string* source = (std::string*)(object.objectVal);
+ std::ostringstream os;
+ os << "Ping requested by " << *source << endl;
+ bubble(os.str().c_str());
+ EV << os.str().c_str();
+
+ //Create PING response
+ CDAP_M_Read_R* pong = new CDAP_M_Read_R(VAL_MODULEPATH);
+ object_t obj;
+ obj.objectName = VAL_MODULEPATH;
+ obj.objectClass = "string";
+ obj.objectInstance = -1;
+ obj.objectVal = (cObject*)(&myPath);
+ pong->setObject(obj);
+
+ sendData(&flows.back(), pong);
+ }
+}
+
+void AEPing::processMReadR(CDAPMessage* msg) {
+ CDAP_M_Read_R* msg1 = check_and_cast<CDAP_M_Read_R*>(msg);
+
+ EV << "Received M_Read_R";
+ object_t object = msg1->getObject();
+ EV << " with object '" << object.objectClass << "'" << endl;
+
+ if ( strstr(object.objectName.c_str(), VAL_MODULEPATH) ) {
+ std::string* source = (std::string*)(object.objectVal);
+ std::ostringstream os;
+ os << "Ping replied by " << *source << endl;
+ bubble(os.str().c_str());
+ EV << os.str().c_str();
+ }
+}