osaf/services/saf/amf/amfd/imm.cc |  281 ++++++++++++++++++-------------------
 1 files changed, 138 insertions(+), 143 deletions(-)


diff --git a/osaf/services/saf/amf/amfd/imm.cc 
b/osaf/services/saf/amf/amfd/imm.cc
--- a/osaf/services/saf/amf/amfd/imm.cc
+++ b/osaf/services/saf/amf/amfd/imm.cc
@@ -22,7 +22,7 @@
 
 #include <stdio.h>
 #include <errno.h>
-#include <string.h>
+#include <cstring>
 #include <sys/stat.h>
 #include <unistd.h>
 
@@ -51,6 +51,8 @@
 
 #include "osaf_time.h"
 #include <stdint.h>
+#include <unordered_map>
+#include <string>
 
 /* ========================================================================
  *   DEFINITIONS
@@ -63,6 +65,57 @@
    imm_reinit_mutex and then proceeds for initialization. */
 static pthread_mutex_t imm_reinit_thread_startup_mutex = 
PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t imm_reinit_thread_startup_cond = 
PTHREAD_COND_INITIALIZER;
+
+typedef std::unordered_map<std::string, AVSV_AMF_CLASS_ID> type_map;
+
+type_map amf_type_map = {
+       /* Cluster and Node Class Related */
+       {"safAmfCluster",AVSV_SA_AMF_CLUSTER},
+       {"safAmfNode",AVSV_SA_AMF_NODE},
+       {"safAmfNodeGroup",AVSV_SA_AMF_NODE_GROUP},
+       {"safInstalledSwBundle",AVSV_SA_AMF_NODE_SW_BUNDLE},
+       /* Application Class Related */
+       {"safApp",AVSV_SA_AMF_APP},
+       {"safAppType",AVSV_SA_AMF_APP_BASE_TYPE},
+       /* Service Group Class Related */
+       {"safSg",AVSV_SA_AMF_SG},
+       {"safSgType",AVSV_SA_AMF_SG_BASE_TYPE},
+       /* Service Unit Class Related */
+       {"safSu",AVSV_SA_AMF_SU},
+       {"safSuType",AVSV_SA_AMF_SU_BASE_TYPE},
+       {"safMemberCompType",AVSV_SA_AMF_SUT_COMP_TYPE},
+       /* Service Instance Class Related */
+       {"safSi",AVSV_SA_AMF_SI},
+       {"safSvcType",AVSV_SA_AMF_SVC_BASE_TYPE},
+       {"safDepend",AVSV_SA_AMF_SI_DEPENDENCY},
+       {"safRankedSu",AVSV_SA_AMF_SI_RANKED_SU},
+       {"safSISU",AVSV_SA_AMF_SI_ASSIGNMENT},
+       {"safMemberCSType",AVSV_SA_AMF_SVC_TYPE_CS_TYPES},
+       /* Component Service Instance Class Related */
+       {"safCsi",AVSV_SA_AMF_CSI},
+       {"safCSType",AVSV_SA_AMF_CS_BASE_TYPE},
+       {"safCsiAttr",AVSV_SA_AMF_CSI_ATTRIBUTE},
+       {"safCSIComp",AVSV_SA_AMF_CSI_ASSIGNMENT},
+       /* Component and component types Related */
+       {"safCompType",AVSV_SA_AMF_COMP_BASE_TYPE},
+       {"safSupportedCsType",AVSV_SA_AMF_CLASS_INVALID},
+       {"safComp",AVSV_SA_AMF_COMP},
+       /* Global Component Attributes and Health Check Related */
+       {"safRdn",AVSV_SA_AMF_COMP_GLOBAL_ATTR},
+       {"safHealthcheckKey",AVSV_SA_AMF_CLASS_INVALID},
+       /* Common Version Related */
+       {"safVersion",AVSV_SA_AMF_CLASS_INVALID}
+};
+
+type_map versioned_types = {
+       {"safAppType",AVSV_SA_AMF_APP_TYPE},
+       {"safSgType",AVSV_SA_AMF_SG_TYPE},
+       {"safSuType",AVSV_SA_AMF_SU_TYPE},
+       {"safSvcType",AVSV_SA_AMF_SVC_TYPE},
+       {"safCSType",AVSV_SA_AMF_CS_TYPE},
+       {"safCompType",AVSV_SA_AMF_COMP_TYPE}
+};
+
 //
 // TODO(HANO) Temporary use this function instead of strdup which uses malloc.
 // Later on remove this function and use std::string instead
@@ -86,10 +139,11 @@
        SaAisErrorT rc;
        AvdJobDequeueResultT res;
        
-       TRACE_ENTER2("Create %s", parentName_.value);
+       TRACE_ENTER2("Create %s", parentName_.c_str());
 
+       const SaNameTWrapper parent_name(parentName_);
        rc = saImmOiRtObjectCreate_2(immOiHandle, className_,
-                                    &parentName_, attrValues_);
+                                    parent_name, attrValues_);
 
        if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_EXIST)) {
                delete Fifo::dequeue();
@@ -150,7 +204,7 @@
        const SaImmAttrModificationT_2 *attrMods[] = {&attrMod, nullptr};
        SaImmAttrValueT attrValues[] = {value_};
 
-       TRACE_ENTER2("Update '%s' %s", dn_.value, attributeName_);
+       TRACE_ENTER2("Update '%s' %s", dn.c_str(), attributeName_);
 
        attrMod.modType = SA_IMM_ATTR_VALUES_REPLACE;
        attrMod.modAttr.attrName = attributeName_;
@@ -158,7 +212,7 @@
        attrMod.modAttr.attrValueType = attrValueType_;
        attrMod.modAttr.attrValues = attrValues;
 
-       rc = saImmOiRtObjectUpdate_2(immOiHandle, &dn_, attrMods);
+       rc = saImmOiRtObjectUpdate_o3(immOiHandle, dn.c_str(), attrMods);
 
        if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_NOT_EXIST)) {
                delete Fifo::dequeue();
@@ -196,9 +250,9 @@
        SaAisErrorT rc;
        AvdJobDequeueResultT res;
 
-       TRACE_ENTER2("Delete %s", dn_.value);
+       TRACE_ENTER2("Delete %s", dn.c_str());
 
-       rc = saImmOiRtObjectDelete(immOiHandle, &dn_);
+       rc = saImmOiRtObjectDelete_o3(immOiHandle, dn.c_str());
 
        if ((rc == SA_AIS_OK) || (rc == SA_AIS_ERR_NOT_EXIST)) {
                delete Fifo::dequeue();
@@ -370,7 +424,7 @@
        (SaImmOiImplementerNameT)"safAmfService";
 static const SaImmOiImplementerNameT applierNamePrefix =
        (SaImmOiImplementerNameT)"@safAmfService";
-static SaVersionT immVersion = { 'A', 2, 11 };
+static SaVersionT immVersion = { 'A', 2, 15 };
 
 /* This string array must match the AVSV_AMF_CLASS_ID enum */
 static const char *avd_class_names[] = {
@@ -456,6 +510,7 @@
                valueSize = sizeof(SaTimeT);
                break;
        case SA_IMM_ATTR_SANAMET:
+               //@todo this needs updating to support long DN
                valueSize = sizeof(SaNameT);
                break;
        case SA_IMM_ATTR_SAFLOATT:
@@ -535,13 +590,14 @@
        return copy;
 }
 
-static AVSV_AMF_CLASS_ID class_name_to_class_type(const char *className)
+static AVSV_AMF_CLASS_ID class_name_to_class_type(const std::string& className)
 {
        int i;
 
        for (i = 0; i < AVSV_SA_AMF_CLASS_MAX; i++) {
-               if (strcmp(className, avd_class_names[i]) == 0)
+               if (className.compare(avd_class_names[i]) == 0) {
                        return static_cast<AVSV_AMF_CLASS_ID>(i);
+               }
        }
 
        osafassert(0);
@@ -560,111 +616,49 @@
  * NOTES: None.
  *
  **************************************************************************/
-static AVSV_AMF_CLASS_ID object_name_to_class_type(const SaNameT *obj_name)
+static AVSV_AMF_CLASS_ID object_name_to_class_type(const std::string& obj_name)
 {
+       TRACE_ENTER2("%s", obj_name.c_str());
        AVSV_AMF_CLASS_ID class_type = AVSV_SA_AMF_CLASS_INVALID;
 
-       /* Cluster and Node Class Related */
-       if (strncmp((char *)&obj_name->value, "safAmfCluster=", 14) == 0) {
-               class_type = AVSV_SA_AMF_CLUSTER;
-       } else if (strncmp((char *)&obj_name->value, "safAmfNode=", 11) == 0) {
-               class_type = AVSV_SA_AMF_NODE;
-       } else if (strncmp((char *)&obj_name->value, "safAmfNodeGroup=", 16) == 
0) {
-               class_type = AVSV_SA_AMF_NODE_GROUP;
-       } else if (strncmp((char *)&obj_name->value, "safInstalledSwBundle=", 
21) == 0) {
-               class_type = AVSV_SA_AMF_NODE_SW_BUNDLE;
+       const std::string::size_type first_equal = obj_name.find('=');
+       const std::string prefix(obj_name.substr(0, first_equal));
+
+       if (first_equal != std::string::npos) {
+               // prefix contains all the chars before the first comma
+               class_type = amf_type_map[prefix];
+       } else {
+               LOG_NO("unknown type: %s", obj_name.c_str());
+               osafassert(false);
        }
 
-       /* Application Class Related */
-       else if (strncmp((char *)&obj_name->value, "safApp=", 7) == 0) {
-               class_type = AVSV_SA_AMF_APP;
-       } else if (strncmp((char *)&obj_name->value, "safAppType=", 11) == 0) {
-               class_type = AVSV_SA_AMF_APP_BASE_TYPE;
-       }
-
-       /* Service Group Class Related */
-       else if (strncmp((char *)&obj_name->value, "safSg=", 6) == 0) {
-               class_type = AVSV_SA_AMF_SG;
-       } else if (strncmp((char *)&obj_name->value, "safSgType=", 10) == 0) {
-               class_type = AVSV_SA_AMF_SG_BASE_TYPE;
-       }
-
-       /* Service Unit Class Related */
-       else if (strncmp((char *)&obj_name->value, "safSu=", 6) == 0) {
-               class_type = AVSV_SA_AMF_SU;
-       } else if (strncmp((char *)&obj_name->value, "safSuType=", 10) == 0) {
-               class_type = AVSV_SA_AMF_SU_BASE_TYPE;
-       } else if (strncmp((char *)&obj_name->value, "safMemberCompType=", 18) 
== 0) {
-               class_type = AVSV_SA_AMF_SUT_COMP_TYPE;
-       }
-
-       /* Service Instance Class Related */
-       else if (strncmp((char *)&obj_name->value, "safSi=", 6) == 0) {
-               class_type = AVSV_SA_AMF_SI;
-       } else if (strncmp((char *)&obj_name->value, "safSvcType=", 11) == 0) {
-               class_type = AVSV_SA_AMF_SVC_BASE_TYPE;
-       } else if (strncmp((char *)&obj_name->value, "safDepend=", 10) == 0) {
-               class_type = AVSV_SA_AMF_SI_DEPENDENCY;
-       } else if (strncmp((char *)&obj_name->value, "safRankedSu=", 12) == 0) {
-               class_type = AVSV_SA_AMF_SI_RANKED_SU;
-       } else if (strncmp((char *)&obj_name->value, "safSISU=", 8) == 0) {
-               class_type = AVSV_SA_AMF_SI_ASSIGNMENT;
-       } else if (strncmp((char *)&obj_name->value, "safMemberCSType=", 16) == 
0) {
-               class_type = AVSV_SA_AMF_SVC_TYPE_CS_TYPES;
-       }
-
-       /* Component Service Instance Class Related */
-       else if (strncmp((char *)&obj_name->value, "safCsi=", 7) == 0) {
-               class_type = AVSV_SA_AMF_CSI;
-       } else if (strncmp((char *)&obj_name->value, "safCSType=", 10) == 0) {
-               class_type = AVSV_SA_AMF_CS_BASE_TYPE;
-       } else if (strncmp((char *)&obj_name->value, "safCsiAttr=", 11) == 0) {
-               class_type = AVSV_SA_AMF_CSI_ATTRIBUTE;
-       } else if (strncmp((char *)&obj_name->value, "safCSIComp=", 11) == 0) {
-               class_type = AVSV_SA_AMF_CSI_ASSIGNMENT;
-       }
-
-       /* Component and component types Related */
-       else if (strncmp((char *)&obj_name->value, "safCompType=", 12) == 0) {
-               class_type = AVSV_SA_AMF_COMP_BASE_TYPE;
-       } else if (strncmp((char *)&obj_name->value, "safSupportedCsType=", 19) 
== 0) {
-               if (strstr((char *)&obj_name->value, "safCompType=") != 0) {
-                       class_type = AVSV_SA_AMF_CT_CS_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safComp=") != 0) {
-                       class_type = AVSV_SA_AMF_COMP_CS_TYPE;
-               }
-       } else if (strncmp((char *)&obj_name->value, "safComp=", 8) == 0) {
-               class_type = AVSV_SA_AMF_COMP;
-       }
-
-       /* Global Component Attributes and Health Check Related */
-       else if (strncmp((char *)&obj_name->value, "safRdn=", 7) == 0) {
-               class_type = AVSV_SA_AMF_COMP_GLOBAL_ATTR;
-       } else if (strncmp((char *)&obj_name->value, "safHealthcheckKey=", 18) 
== 0) {
-               if (strstr((char *)&obj_name->value, "safVersion=") != 0) {
-                       class_type = AVSV_SA_AMF_HEALTH_CHECK_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safComp=") != 0) {
-                       class_type = AVSV_SA_AMF_HEALTH_CHECK;
+       if (class_type == AVSV_SA_AMF_CLASS_INVALID) {
+               // we weren't able to do a simple lookup
+               if (prefix.compare("safSupportedCsType") == 0) {
+                       if (obj_name.find("safCompType=") != std::string::npos) 
{
+                               class_type = AVSV_SA_AMF_CT_CS_TYPE;
+                       } else if (obj_name.find("safComp=") != 
std::string::npos) {
+                                class_type = AVSV_SA_AMF_COMP_CS_TYPE;
+                       }
+               } else if (prefix.compare("safHealthcheckKey") == 0) {
+                       if (obj_name.find("safVersion=") != std::string::npos) {
+                               class_type = AVSV_SA_AMF_HEALTH_CHECK_TYPE;
+                       } else if (obj_name.find("safComp=") != 
std::string::npos) {
+                               class_type = AVSV_SA_AMF_HEALTH_CHECK;
+                       } 
+               } else if (prefix.compare("safVersion") == 0) {
+                       // eg safVersion=4.0.0,safAppType=OpenSafApplicationType
+                       const std::string::size_type first_comma = 
obj_name.find(',');
+                       const std::string::size_type second_equal = 
obj_name.find('=', first_comma + 1);
+                       const std::string type(obj_name.substr(first_comma + 1,
+                               second_equal - first_comma - 1));
+                       
+                       TRACE("versioned type %s", type.c_str());
+                       
+                       class_type = versioned_types[type];
                }
        }
-
-       /* Common Version Related */
-       else if (strncmp((char *)&obj_name->value, "safVersion=", 11) == 0) {
-               if (strstr((char *)&obj_name->value, "safAppType=") != 0) {
-                       class_type = AVSV_SA_AMF_APP_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safSgType=") != 0) 
{
-                       class_type = AVSV_SA_AMF_SG_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safSuType=") != 0) 
{
-                       class_type = AVSV_SA_AMF_SU_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safSvcType=") != 
0) {
-                       class_type = AVSV_SA_AMF_SVC_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safCSType=") != 0) 
{
-                       class_type = AVSV_SA_AMF_CS_TYPE;
-               } else if (strstr((char *)&obj_name->value, "safCompType=") != 
0) {
-                       class_type = AVSV_SA_AMF_COMP_TYPE;
-               }
-       }
-
+       TRACE_LEAVE2("%u", class_type);
        return class_type;
 }
 
@@ -684,7 +678,7 @@
        SaInvocationT invocation, const SaNameT *object_name,
        SaImmAdminOperationIdT op_id, const SaImmAdminOperationParamsT_2 
**params)
 {
-       AVSV_AMF_CLASS_ID type = object_name_to_class_type(object_name);
+       AVSV_AMF_CLASS_ID type = 
object_name_to_class_type(Amf::to_string(object_name));
 
        TRACE_ENTER2("'%s', invocation: %llu, op: %llu", object_name->value, 
invocation, op_id);
 
@@ -756,7 +750,7 @@
        const SaNameT *object_name, const SaImmAttrNameT *attribute_names)
 {
        SaAisErrorT error;
-       AVSV_AMF_CLASS_ID type = object_name_to_class_type(object_name);
+       AVSV_AMF_CLASS_ID type = 
object_name_to_class_type(Amf::to_string(object_name));
 
        TRACE_ENTER2("%s", object_name->value);
        osafassert(rtattr_update_callback[type] != nullptr);
@@ -845,7 +839,7 @@
 
        /* Verify that DN is valid for class */
        id_from_class_name = class_name_to_class_type(class_name);
-       id_from_dn = object_name_to_class_type(&operation->objectName);
+       id_from_dn = 
object_name_to_class_type(Amf::to_string(&operation->objectName));
        if (id_from_class_name != id_from_dn) {
                LOG_ER("Illegal DN '%s' for class '%s'", 
operation->objectName.value, class_name);
                rc = SA_AIS_ERR_INVALID_PARAM;
@@ -974,7 +968,7 @@
           are applied." */
 
        while ((opdata = ccbutil_getNextCcbOp(ccb_id, opdata)) != nullptr) {
-               type = object_name_to_class_type(&opdata->objectName);
+               type = 
object_name_to_class_type(Amf::to_string(&opdata->objectName));
 
                /* Standby AMFD should process CCB completed callback only for 
CCB_DELETE. */
                if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
@@ -1164,7 +1158,7 @@
        TRACE_ENTER2("CCB ID %llu", ccb_id);
 
        while ((opdata = ccbutil_getNextCcbOp(ccb_id, opdata)) != nullptr) {
-               type = object_name_to_class_type(&opdata->objectName);
+               type = 
object_name_to_class_type(Amf::to_string(&opdata->objectName));
                /* Base types will not have an apply callback, skip empty ones 
*/
                if (ccb_apply_callback[type] != nullptr) {
                        /* insert the apply callback into the sorted list
@@ -1208,7 +1202,7 @@
        next = ccb_apply_list;
        while (next != nullptr) {
                // TODO: would be more elegant with yet another function pointer
-               type = object_name_to_class_type(&next->opdata->objectName);
+               type = 
object_name_to_class_type(Amf::to_string(&next->opdata->objectName));
                if ((type == AVSV_SA_AMF_SG) && (next->opdata->operationType == 
CCBUTIL_CREATE)) {
                        AVD_SG *sg = 
sg_db->find(Amf::to_string(&next->opdata->objectName));
                        avd_sg_adjust_config(sg);
@@ -1417,7 +1411,7 @@
        }
 }
 
-void avd_class_impl_set(const char *className,
+void avd_class_impl_set(const std::string& className,
        SaImmOiRtAttrUpdateCallbackT rtattr_cb, 
SaImmOiAdminOperationCallbackT_2 adminop_cb,
        AvdImmOiCcbCompletedCallbackT ccb_compl_cb, AvdImmOiCcbApplyCallbackT 
ccb_apply_cb)
 {
@@ -1529,7 +1523,7 @@
  * @param attrValueType
  * @param value
  */
-SaAisErrorT avd_saImmOiRtObjectUpdate_sync(const SaNameT *dn, SaImmAttrNameT 
attributeName,
+SaAisErrorT avd_saImmOiRtObjectUpdate_sync(const std::string& dn, 
SaImmAttrNameT attributeName,
        SaImmValueTypeT attrValueType, void *value)
 {
        SaAisErrorT rc;
@@ -1537,7 +1531,7 @@
        const SaImmAttrModificationT_2 *attrMods[] = {&attrMod, nullptr};
        SaImmAttrValueT attrValues[] = {value};
 
-       TRACE_ENTER2("'%s' %s", dn->value, attributeName);
+       TRACE_ENTER2("'%s' %s", dn.c_str(), attributeName);
 
        attrMod.modType = SA_IMM_ATTR_VALUES_REPLACE;
        attrMod.modAttr.attrName = attributeName;
@@ -1545,10 +1539,10 @@
        attrMod.modAttr.attrValueType = attrValueType;
        attrMod.modAttr.attrValues = attrValues;
 
-       rc = saImmOiRtObjectUpdate_2(avd_cb->immOiHandle, dn, attrMods);
+       rc = saImmOiRtObjectUpdate_o3(avd_cb->immOiHandle, dn.c_str(), 
attrMods);
        if (rc != SA_AIS_OK) {
                LOG_WA("saImmOiRtObjectUpdate of '%s' %s failed with %u", 
-                       dn->value, attributeName, rc);
+                       dn.c_str(), attributeName, rc);
        }
        return rc;
 }
@@ -1560,7 +1554,7 @@
  * @param  dn (ptr to SaNameT)
  * @return true/false
  */
-bool check_to_create_immjob_at_standby_amfd(const SaNameT *dn)
+bool check_to_create_immjob_at_standby_amfd(const std::string& dn)
 {
 
        AVSV_AMF_CLASS_ID class_type = AVSV_SA_AMF_CLASS_INVALID;
@@ -1590,10 +1584,10 @@
  * @param attrValueType
  * @param value
  */
-void avd_saImmOiRtObjectUpdate(const SaNameT *dn, const char *attributeName,
+void avd_saImmOiRtObjectUpdate(const std::string& dn, const std::string& 
attributeName,
        SaImmValueTypeT attrValueType, void *value)
 {
-       TRACE_ENTER2("'%s' %s", dn->value, attributeName);
+       TRACE_ENTER2("'%s' %s", dn.c_str(), attributeName.c_str());
        
        size_t sz;
 
@@ -1605,8 +1599,8 @@
 
        sz = value_size(attrValueType);
 
-       ajob->dn_= *dn;
-       ajob->attributeName_= StrDup(attributeName);
+       ajob->dn = dn;
+       ajob->attributeName_= StrDup(attributeName.c_str());
        ajob->attrValueType_ = attrValueType;
        ajob->value_ = new char[sz];
 
@@ -1622,10 +1616,10 @@
  * @param parentName
  * @param attrValues
  */
-void avd_saImmOiRtObjectCreate(const char *className,
-       const SaNameT *parentName, const SaImmAttrValuesT_2 **attrValues)
+void avd_saImmOiRtObjectCreate(const std::string& className,
+       const std::string& parentName, const SaImmAttrValuesT_2 **attrValues)
 {
-       TRACE_ENTER2("%s %s", className, parentName->value);
+       TRACE_ENTER2("%s %s", className.c_str(), parentName.c_str());
 
        if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
                        (check_to_create_immjob_at_standby_amfd(parentName) == 
false))
@@ -1633,9 +1627,9 @@
 
        ImmObjCreate* ajob = new ImmObjCreate;
 
-       ajob->className_ = StrDup(className);
+       ajob->className_ = StrDup(className.c_str());
        osafassert(ajob->className_ != nullptr);
-       ajob->parentName_ = *parentName;
+       ajob->parentName_ = parentName;
        ajob->attrValues_ = dupSaImmAttrValuesT_array(attrValues);
        Fifo::queue(ajob);
        
@@ -1646,9 +1640,9 @@
  * Queue an IM object delete to be executed later, non blocking
  * @param dn
  */
-void avd_saImmOiRtObjectDelete(const SaNameT* dn)
+void avd_saImmOiRtObjectDelete(const std::string& dn)
 {
-       TRACE_ENTER2("%s", dn->value);
+       TRACE_ENTER2("%s", dn.c_str());
        
        if ((avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) &&
                        (check_to_create_immjob_at_standby_amfd(dn) == false))
@@ -1656,7 +1650,7 @@
 
        ImmObjDelete *ajob = new ImmObjDelete;
 
-       ajob->dn_ = *dn;
+       ajob->dn = dn;
        Fifo::queue(ajob);
        
        TRACE_LEAVE();
@@ -1671,19 +1665,20 @@
        for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin();
                        it != su_db->end(); it++) {
                AVD_SU *su = it->second;
-               avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUPreInstantiable",
+               avd_saImmOiRtObjectUpdate(su->name, "saAmfSUPreInstantiable",
                        SA_IMM_ATTR_SAUINT32T,  &su->saAmfSUPreInstantiable);
 
-               avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUHostedByNode",
-                       SA_IMM_ATTR_SANAMET, &su->saAmfSUHostedByNode);
+               const SaNameTWrapper hosted_by_node(su->saAmfSUHostedByNode);
+               avd_saImmOiRtObjectUpdate(su->name, "saAmfSUHostedByNode",
+                       SA_IMM_ATTR_SANAMET, (void*)static_cast<const 
SaNameT*>(hosted_by_node));
 
-               avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUPresenceState",
+               avd_saImmOiRtObjectUpdate(su->name, "saAmfSUPresenceState",
                        SA_IMM_ATTR_SAUINT32T, &su->saAmfSUPresenceState);
 
-               avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUOperState",
+               avd_saImmOiRtObjectUpdate(su->name, "saAmfSUOperState",
                        SA_IMM_ATTR_SAUINT32T, &su->saAmfSUOperState);
 
-               avd_saImmOiRtObjectUpdate(&su->name, "saAmfSUReadinessState",
+               avd_saImmOiRtObjectUpdate(su->name, "saAmfSUReadinessState",
                        SA_IMM_ATTR_SAUINT32T, &su->saAmfSuReadinessState);
 
        }
@@ -1692,15 +1687,15 @@
        for (std::map<std::string, AVD_COMP*>::const_iterator it = 
comp_db->begin();
                        it != comp_db->end(); it++) {
                AVD_COMP *comp  = it->second;
-               avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
+               avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
                        "saAmfCompReadinessState", SA_IMM_ATTR_SAUINT32T,
                        &comp->saAmfCompReadinessState);
 
-               avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
+               avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
                        "saAmfCompOperState", SA_IMM_ATTR_SAUINT32T,
                        &comp->saAmfCompOperState);
 
-               avd_saImmOiRtObjectUpdate(&comp->comp_info.name,
+               avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name),
                        "saAmfCompPresenceState", SA_IMM_ATTR_SAUINT32T,
                        &comp->saAmfCompPresenceState);
 
@@ -1710,7 +1705,7 @@
        for (std::map<std::string, AVD_AVND *>::const_iterator it = 
node_name_db->begin();
                        it != node_name_db->end(); it++) {
                AVD_AVND *node = it->second;
-               avd_saImmOiRtObjectUpdate(&node->name, "saAmfNodeOperState",
+               avd_saImmOiRtObjectUpdate(node->name, "saAmfNodeOperState",
                                SA_IMM_ATTR_SAUINT32T, 
&node->saAmfNodeOperState);
        }
 
@@ -1718,7 +1713,7 @@
        for (std::map<std::string, AVD_SI*>::const_iterator it = si_db->begin();
                        it != si_db->end(); it++) {
                AVD_SI *si = it->second;
-               avd_saImmOiRtObjectUpdate(&si->name, "saAmfSIAssignmentState",
+               avd_saImmOiRtObjectUpdate(si->name, "saAmfSIAssignmentState",
                        SA_IMM_ATTR_SAUINT32T, &si->saAmfSIAssignmentState);
        }
 }

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to