OriginHostManager to abstract Procedure (dyamic) from knowing the OriginHost node
[anna.git] / dynamic / launcher / gx / 00001 / Procedure.cpp
index 086a074..20af42c 100644 (file)
@@ -18,6 +18,7 @@
 #include <anna/diameter/helpers/dcca/functions.hpp>
 #include <anna/diameter/helpers/dcca/functions.hpp>
 #include <anna/diameter.comm/OriginHost.hpp>
+#include <anna/diameter.comm/OriginHostManager.hpp>
 
 // Local
 #include "Procedure.hpp"
@@ -47,7 +48,7 @@ namespace {
    }
 }
 
-void Procedure::execute(const std::string &args, std::string &response, anna::diameter::comm::OriginHost *originHost)  throw(anna::RuntimeException) {
+void Procedure::execute(const std::string &args, std::string &response)  throw(anna::RuntimeException) {
 
   response = "Dynamic procedure failed to process '"; response += args; response += "': ";
 
@@ -93,6 +94,7 @@ void Procedure::execute(const std::string &args, std::string &response, anna::di
   anna::diameter::codec::Message ccri, ccrt;
   anna::diameter::codec::Avp *ccri_sessionId, *ccrt_sessionId, *ccri_framedIPAddress, *ccrt_framedIPAddress, *ccri_msisdn, *ccri_imsi;
   anna::diameter::codec::Avp *si1, *si2, *sidata1, *sidata2, *sitype1;
+  anna::diameter::codec::Avp *ccri_originHost;
 
   ///////// CCR-Initial:
   ccri.loadXML(ccr_i);
@@ -100,6 +102,7 @@ void Procedure::execute(const std::string &args, std::string &response, anna::di
   // Session-Id & Framed-Ip-Address AVPs
   ccri_sessionId = ccri.getAvp("Session-Id");
   ccri_framedIPAddress = ccri.getAvp("Framed-IP-Address");
+  ccri_originHost = ccri.getAvp("Origin-Host");
 
   // Subscription-Id AVPs
   if (ccri.countAvp("Subscription-Id") != 2) {
@@ -206,6 +209,12 @@ void Procedure::execute(const std::string &args, std::string &response, anna::di
   char cad_framed[16];
   anna::testing::TestCase *tc;
 
+  // Origin host manager:
+  anna::diameter::comm::OriginHostManager &ohm = anna::diameter::comm::OriginHostManager::instantiate();
+  // Assume the oh name from CCR-I (same as CCR-T):
+  std::string originHostName = ccri_originHost->getDiameterIdentity()->getValue();
+  anna::diameter::comm::OriginHost *originHost = ohm.getOriginHost(originHostName);
+
   for (ll_index = 0; ll_index < ll_seq_size; ll_index++) {
 
     // Calculate next values ////////////////////////////////////////////////////////////