Fix bug on regexp insertion for xml messages
[anna.git] / example / diameter / launcher / EventOperation.cpp
index a3ee7ba..f21f729 100644 (file)
@@ -357,7 +357,7 @@ bool EventOperation::sendmsg_hex_2e(std::string &response, const std::string & d
   if(my_app.getOperatedHost()->logEnabled()) {
     anna::diameter::comm::Server *usedServer = my_app.getOperatedEntity()->getLastUsedResource();
     anna::diameter::comm::ClientSession *usedClientSession = usedServer ? usedServer->getLastUsedResource() : NULL;
-    std::string detail = usedClientSession ? usedClientSession->asString() : "<null client session>"; // shouldn't happen
+    std::string detail = usedClientSession ? usedClientSession->asString() : "[null client session]"; // shouldn't happen
     my_app.getOperatedHost()->writeLogFile(codecMsg, (success ? "sent2e" : "send2eError"), detail);
   }
 
@@ -422,7 +422,7 @@ bool EventOperation::sendmsg_hex_2c(std::string &response, const std::string & d
   // Detailed log:
   if(my_app.getOperatedHost()->logEnabled()) {
     anna::diameter::comm::ServerSession *usedServerSession = my_app.getOperatedServer()->getLastUsedResource();
-    std::string detail = usedServerSession ? usedServerSession->asString() : "<null server session>"; // shouldn't happen
+    std::string detail = usedServerSession ? usedServerSession->asString() : "[null server session]"; // shouldn't happen
     my_app.getOperatedHost()->writeLogFile(codecMsg, (success ? "sent2c" : "send2cError"), detail);
   }
 
@@ -754,18 +754,22 @@ bool EventOperation::test_id__waitfefc_msg(std::string &response, unsigned int i
       std::string::size_type pos, pos_1, pos_2;
 
       pos = regexp.find("end-to-end-id=", 0u);
-      pos = regexp.find("\"", pos);
-      pos_1 = pos;
-      pos = regexp.find("\"", pos+1);
-      pos_2 = pos;
-      regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      if (pos != std::string::npos) {
+        pos = regexp.find("\"", pos);
+        pos_1 = pos;
+        pos = regexp.find("\"", pos+1);
+        pos_2 = pos;
+        regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      }
 
       pos = regexp.find("hop-by-hop-id=", 0u);
-      pos = regexp.find("\"", pos);
-      pos_1 = pos;
-      pos = regexp.find("\"", pos+1);
-      pos_2 = pos;
-      regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      if (pos != std::string::npos) {
+        pos = regexp.find("\"", pos);
+        pos_1 = pos;
+        pos = regexp.find("\"", pos+1);
+        pos_2 = pos;
+        regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      }
 
       // For this representation: <avp name="Origin-State-Id" data="1428633668"/>
       //pos = regexp.find("Origin-State-Id", 0u);
@@ -777,13 +781,15 @@ bool EventOperation::test_id__waitfefc_msg(std::string &response, unsigned int i
       //regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
       // But we have this one: <avp data="1428633668" name="Origin-State-Id"/>
       pos = regexp.find("Origin-State-Id", 0u);
-      pos = regexp.rfind("\"", pos);
-      pos = regexp.rfind("\"", pos-1);
-      pos = regexp.rfind("\"", pos-1);
-      pos_1 = pos;
-      pos = regexp.find("\"", pos+1);
-      pos_2 = pos;
-      regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      if (pos != std::string::npos) {
+        pos = regexp.rfind("\"", pos);
+        pos = regexp.rfind("\"", pos-1);
+        pos = regexp.rfind("\"", pos-1);
+        pos_1 = pos;
+        pos = regexp.find("\"", pos+1);
+        pos_2 = pos;
+        regexp.replace(pos_1 + 1, pos_2 - pos_1 - 1, "[0-9]+");
+      }
 
       //regexp.insert(0, "^");
       //regexp += "$";
@@ -877,12 +883,12 @@ bool EventOperation::test__ip_limit(std::string &response, int amount) {
   if (amount > -2) {
     testManager.setInProgressLimit(amount);
     response = "New in-progress limit: ";
-    response += (amount != -1) ? anna::functions::asString(amount) : "<no limit>";
+    response += (amount != -1) ? anna::functions::asString(amount) : "[no limit]";
   }
   else {
     response = "In-progress limit amount: ";
     int limit = testManager.getInProgressLimit();
-    response += (limit != -1) ? anna::functions::asString(limit) : "<no limit>";
+    response += (limit != -1) ? anna::functions::asString(limit) : "[no limit]";
     response += "; currently there are ";
     response += anna::functions::asString(testManager.getInProgressCount());
     response += " test cases running";