osaf/services/saf/amf/amfd/app.cc | 68 ++++---- osaf/services/saf/amf/amfd/apptype.cc | 61 ++++--- osaf/services/saf/amf/amfd/clm.cc | 14 +- osaf/services/saf/amf/amfd/cluster.cc | 2 +- osaf/services/saf/amf/amfd/comp.cc | 169 ++++++++++---------- osaf/services/saf/amf/amfd/compcstype.cc | 174 ++++++++++----------- osaf/services/saf/amf/amfd/comptype.cc | 43 ++-- osaf/services/saf/amf/amfd/csi.cc | 248 +++++++++++++++++------------- osaf/services/saf/amf/amfd/csiattr.cc | 4 +- osaf/services/saf/amf/amfd/cstype.cc | 55 ++---- osaf/services/saf/amf/amfd/ctcstype.cc | 67 ++++---- 11 files changed, 465 insertions(+), 440 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/app.cc b/osaf/services/saf/amf/amfd/app.cc --- a/osaf/services/saf/amf/amfd/app.cc +++ b/osaf/services/saf/amf/amfd/app.cc @@ -26,6 +26,8 @@ AmfDb<std::string, AVD_APP> *app_db = 0; AVD_APP::AVD_APP() : + name{}, + saAmfAppType{}, saAmfApplicationAdminState(SA_AMF_ADMIN_UNLOCKED), saAmfApplicationCurrNumSGs(0), list_of_sg(nullptr), @@ -33,11 +35,11 @@ app_type_list_app_next(nullptr), app_type(nullptr) { - memset(&name, 0, sizeof(SaNameT)); - memset(&saAmfAppType, 0, sizeof(SaNameT)); } -AVD_APP::AVD_APP(const SaNameT* dn) : +AVD_APP::AVD_APP(const std::string& dn) : + name{dn}, + saAmfAppType{}, saAmfApplicationAdminState(SA_AMF_ADMIN_UNLOCKED), saAmfApplicationCurrNumSGs(0), list_of_sg(nullptr), @@ -45,10 +47,6 @@ app_type_list_app_next(nullptr), app_type(nullptr) { - memset(&name, 0, sizeof(SaNameT)); - memcpy(name.value, dn->value, dn->length); - name.length = dn->length; - memset(&saAmfAppType, 0, sizeof(SaNameT)); } AVD_APP::~AVD_APP() @@ -58,7 +56,7 @@ // TODO(hafe) change this to a destructor static void avd_app_delete(AVD_APP *app) { - app_db->erase(Amf::to_string(&app->name)); + app_db->erase(app->name); m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, app, AVSV_CKPT_AVD_APP_CONFIG); avd_apptype_remove_app(app); delete app; @@ -66,7 +64,7 @@ static void app_add_to_model(AVD_APP *app) { - TRACE_ENTER2("%s", app->name.value); + TRACE_ENTER2("%s", app->name.c_str()); /* Check type link to see if it has been added already */ if (app->app_type != nullptr) { @@ -74,10 +72,10 @@ goto done; } - app_db->insert(Amf::to_string(&app->name), app); + app_db->insert(app->name, app); /* Find application type and make a link with app type */ - app->app_type = avd_apptype_get(&app->saAmfAppType); + app->app_type = avd_apptype_get(app->saAmfAppType); osafassert(app->app_type); avd_apptype_add_app(app); @@ -160,7 +158,7 @@ sg->app = nullptr; } -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes, +static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2 **attributes, const CcbUtilOperationData_t *opdata) { SaAisErrorT rc; @@ -168,15 +166,15 @@ SaAmfAdminStateT admstate; /* Applications should be root objects */ - if (strchr((char *)dn->value, ',') != nullptr) { - report_ccb_validation_error(opdata, "Parent to '%s' is not root", dn->value); + if (dn.find(',') != std::string::npos) { + report_ccb_validation_error(opdata, "Parent to '%s' is not root", dn.c_str()); return 0; } rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"), attributes, 0, &aname); osafassert(rc == SA_AIS_OK); - if (avd_apptype_get(&aname) == nullptr) { + if (avd_apptype_get(Amf::to_string(&aname)) == nullptr) { /* App type does not exist in current model, check CCB */ if (opdata == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in model", aname.value); @@ -191,32 +189,35 @@ if ((immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfApplicationAdminState"), attributes, 0, &admstate) == SA_AIS_OK) && !avd_admin_state_is_valid(admstate, opdata)) { - report_ccb_validation_error(opdata, "Invalid saAmfApplicationAdminState %u for '%s'", admstate, dn->value); + report_ccb_validation_error(opdata, "Invalid saAmfApplicationAdminState %u for '%s'", admstate, dn.c_str()); return 0; } return 1; } -AVD_APP *avd_app_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +AVD_APP *avd_app_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { AVD_APP *app; SaAisErrorT error; + SaNameT app_type; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); /* ** If called at new active at failover, the object is found in the DB ** but needs to get configuration attributes initialized. */ - app = app_db->find(Amf::to_string(dn)); + app = app_db->find(dn); if (app == nullptr) { app = new AVD_APP(dn); - } else + } else { TRACE("already created, refreshing config..."); + } - error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"), attributes, 0, &app->saAmfAppType); + error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfAppType"), attributes, 0, &app_type); osafassert(error == SA_AIS_OK); + app->saAmfAppType = Amf::to_string(&app_type); if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfApplicationAdminState"), attributes, 0, &app->saAmfApplicationAdminState) != SA_AIS_OK) { /* Empty, assign default value */ @@ -237,7 +238,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - if (is_config_valid(&opdata->objectName, opdata->param.create.attrValues, opdata)) + if (is_config_valid(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues, opdata)) rc = SA_AIS_OK; break; case CCBUTIL_MODIFY: @@ -246,7 +247,7 @@ if (!strcmp(attribute->attrName, "saAmfAppType")) { SaNameT dn = *((SaNameT*)attribute->attrValues[0]); - if (nullptr == avd_apptype_get(&dn)) { + if (nullptr == avd_apptype_get(Amf::to_string(&dn))) { report_ccb_validation_error(opdata, "saAmfAppType '%s' not found", dn.value); rc = SA_AIS_ERR_BAD_OPERATION; goto done; @@ -287,7 +288,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - app = avd_app_create(&opdata->objectName, opdata->param.create.attrValues); + app = avd_app_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(app); app_add_to_model(app); break; @@ -299,11 +300,11 @@ const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr; if (!strcmp(attribute->attrName, "saAmfAppType")) { - LOG_NO("Modified saAmfAppType from '%s' to '%s' for '%s'", app->saAmfAppType.value, - (*((SaNameT*)attribute->attrValues[0])).value, app->name.value); + LOG_NO("Modified saAmfAppType from '%s' to '%s' for '%s'", app->saAmfAppType.c_str(), + (*((SaNameT*)attribute->attrValues[0])).value, app->name.c_str()); avd_apptype_remove_app(app); - app->saAmfAppType = *((SaNameT*)attribute->attrValues[0]); - app->app_type = avd_apptype_get(&app->saAmfAppType); + app->saAmfAppType = Amf::to_string((SaNameT*)attribute->attrValues[0]); + app->app_type = avd_apptype_get(app->saAmfAppType); avd_apptype_add_app(app); } else { @@ -398,14 +399,15 @@ AVD_APP *app = app_db->find(Amf::to_string(objectName)); SaImmAttrNameT attributeName; int i = 0; + const std::string obj(Amf::to_string(objectName)); - TRACE_ENTER2("%s", objectName->value); + TRACE_ENTER2("%s", obj.c_str()); osafassert(app != nullptr); while ((attributeName = attributeNames[i++]) != nullptr) { TRACE("Attribute %s", attributeName); if (!strcmp(attributeName, "saAmfApplicationCurrNumSGs")) { - avd_saImmOiRtObjectUpdate_sync(objectName, attributeName, + avd_saImmOiRtObjectUpdate_sync(obj, attributeName, SA_IMM_ATTR_SAUINT32T, &app->saAmfApplicationCurrNumSGs); } else { LOG_ER("Ignoring unknown attribute '%s'", attributeName); @@ -447,15 +449,15 @@ while ((rc = immutil_saImmOmSearchNext_2(searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { - if (!is_config_valid(&dn, attributes, nullptr)) + if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr)) goto done2; - if ((app = avd_app_create(&dn, (const SaImmAttrValuesT_2 **)attributes)) == nullptr) + if ((app = avd_app_create(Amf::to_string(&dn), (const SaImmAttrValuesT_2 **)attributes)) == nullptr) goto done2; app_add_to_model(app); - if (avd_sg_config_get(&dn, app) != SA_AIS_OK) + if (avd_sg_config_get(Amf::to_string(&dn), app) != SA_AIS_OK) goto done2; if (avd_si_config_get(app) != SA_AIS_OK) diff --git a/osaf/services/saf/amf/amfd/apptype.cc b/osaf/services/saf/amf/amfd/apptype.cc --- a/osaf/services/saf/amf/amfd/apptype.cc +++ b/osaf/services/saf/amf/amfd/apptype.cc @@ -27,23 +27,23 @@ AmfDb<std::string, AVD_APP_TYPE> *app_type_db = 0; // -AVD_APP_TYPE::AVD_APP_TYPE(const SaNameT* dn) { - memcpy(name.value, dn->value, dn->length); - name.length = dn->length; +AVD_APP_TYPE::AVD_APP_TYPE(const std::string& dn) : + name(dn) +{ } // AVD_APP_TYPE::~AVD_APP_TYPE() { } -AVD_APP_TYPE *avd_apptype_get(const SaNameT *dn) +AVD_APP_TYPE *avd_apptype_get(const std::string& dn) { - return app_type_db->find(Amf::to_string(dn)); + return app_type_db->find(dn); } static void apptype_delete(AVD_APP_TYPE **apptype) { - app_type_db->erase(Amf::to_string(&(*apptype)->name)); + app_type_db->erase((*apptype)->name); (*apptype)->sgAmfApptSGTypes.clear(); delete *apptype; @@ -54,29 +54,30 @@ { unsigned int rc; osafassert(app_type != nullptr); - TRACE("'%s'", app_type->name.value); + TRACE("'%s'", app_type->name.c_str()); - rc = app_type_db->insert(Amf::to_string(&app_type->name), app_type); + rc = app_type_db->insert(app_type->name, app_type); osafassert(rc == NCSCC_RC_SUCCESS); } -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes, +static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2 **attributes, const CcbUtilOperationData_t *opdata) { int i = 0; unsigned j; - char *parent; + std::string::size_type parent; AVD_AMF_SG_TYPE *sg_type; const SaImmAttrValuesT_2 *attr; - if ((parent = strchr((char*)dn->value, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + parent = dn.find(','); + if (parent == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); return 0; } /* AppType should be children to AppBaseType */ - if (strncmp(++parent, "safAppType=", 11) != 0) { - report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s' ", parent, dn->value); + if (dn.compare(parent + 1, 11, "safAppType=") != 0) { + report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s' ", dn.substr(0, parent).c_str(), dn.c_str()); return 0; } @@ -108,7 +109,7 @@ return 1; } -static AVD_APP_TYPE *apptype_create(SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_APP_TYPE *apptype_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { int i = 0; unsigned int j; @@ -116,7 +117,7 @@ AVD_APP_TYPE *app_type; const SaImmAttrValuesT_2 *attr; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); app_type = new AVD_APP_TYPE(dn); @@ -128,7 +129,7 @@ osafassert(attr->attrValuesNumber > 0); for (j = 0; j < attr->attrValuesNumber; j++) { - app_type->sgAmfApptSGTypes.push_back(*((SaNameT *)attr->attrValues[j])); + app_type->sgAmfApptSGTypes.push_back(Amf::to_string((SaNameT *)attr->attrValues[j])); } rc = 0; @@ -148,26 +149,28 @@ AVD_APP *app; bool app_exist = false; CcbUtilOperationData_t *t_opData; + const std::string object_name(Amf::to_string(&opdata->objectName)); - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata->objectName.value); + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, object_name.c_str()); switch (opdata->operationType) { case CCBUTIL_CREATE: - if (is_config_valid(&opdata->objectName, opdata->param.create.attrValues, opdata)) + if (is_config_valid(object_name, opdata->param.create.attrValues, opdata)) rc = SA_AIS_OK; break; case CCBUTIL_MODIFY: report_ccb_validation_error(opdata, "Modification of SaAmfAppType not supported"); break; case CCBUTIL_DELETE: - app_type = avd_apptype_get(&opdata->objectName); + app_type = avd_apptype_get(object_name); if (nullptr != app_type->list_of_app) { /* check whether there exists a delete operation for * each of the App in the app_type list in the current CCB */ app = app_type->list_of_app; while (app != nullptr) { - t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, &app->name); + const SaNameTWrapper app_name(app->name); + t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, app_name); if ((t_opData == nullptr) || (t_opData->operationType != CCBUTIL_DELETE)) { app_exist = true; break; @@ -175,7 +178,7 @@ app = app->app_type_list_app_next; } if (app_exist == true) { - report_ccb_validation_error(opdata, "SaAmfAppType '%s' is in use", app_type->name.value); + report_ccb_validation_error(opdata, "SaAmfAppType '%s' is in use", app_type->name.c_str()); goto done; } } @@ -198,7 +201,8 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - app_type = apptype_create(&opdata->objectName, opdata->param.create.attrValues); + app_type = apptype_create(Amf::to_string(&opdata->objectName), + opdata->param.create.attrValues); osafassert(app_type); apptype_add_to_model(app_type); break; @@ -217,7 +221,7 @@ SaAisErrorT rc = SA_AIS_ERR_INVALID_PARAM, error; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; - SaNameT dn; + SaNameT dn_name; const SaImmAttrValuesT_2 **attributes; const char *className = "SaAmfAppType"; AVD_APP_TYPE *app_type; @@ -237,12 +241,13 @@ goto done1; } - while (immutil_saImmOmSearchNext_2(searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { - if (!is_config_valid(&dn, attributes, nullptr)) + while (immutil_saImmOmSearchNext_2(searchHandle, &dn_name, (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { + std::string dn(Amf::to_string(&dn_name)); + if (!is_config_valid(dn, attributes, nullptr)) goto done2; - if ((app_type = avd_apptype_get(&dn)) == nullptr ) { - if ((app_type = apptype_create(&dn, attributes)) == nullptr) + if ((app_type = avd_apptype_get(dn)) == nullptr ) { + if ((app_type = apptype_create(dn, attributes)) == nullptr) goto done2; apptype_add_to_model(app_type); diff --git a/osaf/services/saf/amf/amfd/clm.cc b/osaf/services/saf/amf/amfd/clm.cc --- a/osaf/services/saf/amf/amfd/clm.cc +++ b/osaf/services/saf/amf/amfd/clm.cc @@ -228,13 +228,14 @@ for (i = 0; i < notificationBuffer->numberOfItems; i++) { notifItem = ¬ificationBuffer->notification[i]; + const std::string node_name(Amf::to_string(¬ifItem->clusterNode.nodeName)); switch(step) { case SA_CLM_CHANGE_VALIDATE: if(notifItem->clusterChange == SA_CLM_NODE_LEFT) { node = avd_node_find_nodeid(notifItem->clusterNode.nodeId); if (node == nullptr) { LOG_IN("%s: CLM node '%s' is not an AMF cluster member", - __FUNCTION__, notifItem->clusterNode.nodeName.value); + __FUNCTION__, node_name.c_str()); goto done; } /* store the invocation for clm response */ @@ -251,7 +252,7 @@ node = avd_node_find_nodeid(notifItem->clusterNode.nodeId); if (node == nullptr) { LOG_IN("%s: CLM node '%s' is not an AMF cluster member", - __FUNCTION__, notifItem->clusterNode.nodeName.value); + __FUNCTION__, node_name.c_str()); goto done; } if ( notifItem->clusterChange == SA_CLM_NODE_LEFT || @@ -274,7 +275,7 @@ node = avd_node_find_nodeid(notifItem->clusterNode.nodeId); if (node == nullptr) { LOG_IN("%s: CLM node '%s' is not an AMF cluster member", - __FUNCTION__, notifItem->clusterNode.nodeName.value); + __FUNCTION__, node_name.c_str()); goto done; } TRACE(" Node Left: rootCauseEntity %s for node %u", rootCauseEntity->value, @@ -336,10 +337,9 @@ for (std::map<std::string, AVD_AVND *>::const_iterator it = node_name_db->begin(); it != node_name_db->end(); it++) { node = it->second; - if (0 == strncmp((char*)node->saAmfNodeClmNode.value, - (char*)notifItem->clusterNode.nodeName.value, - notifItem->clusterNode.nodeName.length)) - break; + if (node->saAmfNodeClmNode.compare(node_name) == 0) { + break; + } } if ( node != nullptr ) { memcpy(&(node->node_info), &(notifItem->clusterNode), diff --git a/osaf/services/saf/amf/amfd/cluster.cc b/osaf/services/saf/amf/amfd/cluster.cc --- a/osaf/services/saf/amf/amfd/cluster.cc +++ b/osaf/services/saf/amf/amfd/cluster.cc @@ -218,7 +218,7 @@ goto done; } - avd_cluster->saAmfCluster = dn; + avd_cluster->saAmfCluster = Amf::to_string(&dn); /* Cluster should be root object */ if (strchr((char *)dn.value, ',') != nullptr) { diff --git a/osaf/services/saf/amf/amfd/comp.cc b/osaf/services/saf/amf/amfd/comp.cc --- a/osaf/services/saf/amf/amfd/comp.cc +++ b/osaf/services/saf/amf/amfd/comp.cc @@ -45,9 +45,10 @@ void avd_comp_db_add(AVD_COMP *comp) { unsigned int rc; + const std::string comp_name(Amf::to_string(&comp->comp_info.name)); - if (comp_db->find(Amf::to_string(&comp->comp_info.name)) == nullptr) { - rc = comp_db->insert(Amf::to_string(&comp->comp_info.name), comp); + if (comp_db->find(comp_name) == nullptr) { + rc = comp_db->insert(comp_name, comp); osafassert(rc == NCSCC_RC_SUCCESS); } } @@ -89,15 +90,15 @@ } // -AVD_COMP::AVD_COMP(const SaNameT *dn) { +AVD_COMP::AVD_COMP(const std::string& dn) { initialize(); - - memcpy(&comp_info.name.value, dn->value, dn->length); - comp_info.name.length = dn->length; + memset(&comp_info.name, 0, sizeof(comp_info.name)); + memcpy(&comp_info.name.value, dn.c_str(), dn.length()); + comp_info.name.length = dn.length(); } // -AVD_COMP *avd_comp_new(const SaNameT *dn) +AVD_COMP *avd_comp_new(const std::string& dn) { AVD_COMP *comp; @@ -125,26 +126,26 @@ if ((comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) && (pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){ - avd_alarm_clear(&comp->comp_info.name, + avd_alarm_clear(Amf::to_string(&comp->comp_info.name), SA_AMF_NTFID_COMP_CLEANUP_FAILED, SA_NTF_SOFTWARE_ERROR); } if ((comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) && (pres_state == SA_AMF_PRESENCE_UNINSTANTIATED)){ - avd_alarm_clear(&comp->comp_info.name, + avd_alarm_clear(Amf::to_string(&comp->comp_info.name), SA_AMF_NTFID_COMP_INSTANTIATION_FAILED, SA_NTF_SOFTWARE_ERROR); } comp->saAmfCompPresenceState = pres_state; - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompPresenceState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompPresenceState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState); m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_PRES_STATE); if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATION_FAILED) - avd_send_comp_inst_failed_alarm(&comp->comp_info.name, &node->name); + avd_send_comp_inst_failed_alarm(Amf::to_string(&comp->comp_info.name), node->name); else if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_TERMINATION_FAILED) - avd_send_comp_clean_failed_alarm(&comp->comp_info.name, &node->name); + avd_send_comp_clean_failed_alarm(Amf::to_string(&comp->comp_info.name), node->name); if ((comp->su->sg_of_su->saAmfSGAutoRepair == true) && (node->saAmfNodeAutoRepair == true) && @@ -158,9 +159,9 @@ avd_pres_state_name[pres_state]); saflog(LOG_NOTICE, amfSvcUsrName, "Ordering reboot of '%s' as repair action", - node->name.value); + node->name.c_str()); LOG_NO("Node Failfast for '%s' as '%s' enters Term/Inst Failed state", - node->name.value,comp->comp_info.name.value); + node->name.c_str(),comp->comp_info.name.value); avd_d2n_reboot_snd(node); } TRACE_LEAVE(); @@ -173,7 +174,7 @@ comp->comp_info.name.value, avd_oper_state_name[comp->saAmfCompOperState], avd_oper_state_name[oper_state]); comp->saAmfCompOperState = oper_state; - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompOperState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompOperState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompOperState); m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_OPER_STATE); TRACE_LEAVE(); @@ -190,7 +191,7 @@ avd_readiness_state_name[comp->saAmfCompReadinessState], avd_readiness_state_name[readiness_state]); comp->saAmfCompReadinessState = readiness_state; if (comp->su->get_surestart() == false) - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompReadinessState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompReadinessState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompReadinessState); m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, comp, AVSV_CKPT_COMP_READINESS_STATE); TRACE_LEAVE(); @@ -205,9 +206,9 @@ /* alarm & notifications */ if(proxy_status == SA_AMF_PROXY_STATUS_UNPROXIED) - avd_send_comp_proxy_status_unproxied_alarm(&comp->comp_info.name); + avd_send_comp_proxy_status_unproxied_alarm(Amf::to_string(&comp->comp_info.name)); else if(proxy_status == SA_AMF_PROXY_STATUS_PROXIED) - avd_send_comp_proxy_status_proxied_ntf(&comp->comp_info.name, + avd_send_comp_proxy_status_proxied_ntf(Amf::to_string(&comp->comp_info.name), SA_AMF_PROXY_STATUS_UNPROXIED, SA_AMF_PROXY_STATUS_PROXIED); @@ -229,7 +230,7 @@ */ static void comp_add_to_model(AVD_COMP *comp) { - SaNameT dn; + std::string dn; AVD_SU *su = comp->su; TRACE_ENTER2("%s", comp->comp_info.name.value); @@ -240,11 +241,11 @@ goto done; } - avsv_sanamet_init(&comp->comp_info.name, &dn, "safSu"); - su = comp->su = su_db->find(Amf::to_string(&dn)); + avsv_sanamet_init(Amf::to_string(&comp->comp_info.name), dn, "safSu"); + su = comp->su = su_db->find(dn); avd_comp_db_add(comp); - comp->comp_type = comptype_db->find(Amf::to_string(&comp->saAmfCompType)); + comp->comp_type = comptype_db->find(comp->saAmfCompType); osafassert(comp->comp_type); avd_comptype_add_comp(comp); su->add_comp(comp); @@ -290,7 +291,7 @@ (node->node_state == AVD_AVND_STATE_NCS_INIT)) { if (avd_snd_su_msg(avd_cb, su) != NCSCC_RC_SUCCESS) { LOG_ER("SU '%s', Comp '%s': avd_snd_su_msg failed %s", __FUNCTION__, - su->name.value, comp->comp_info.name.value); + su->name.c_str(), comp->comp_info.name.value); goto done; } } @@ -302,13 +303,13 @@ avd_comp_oper_state_set(comp, SA_AMF_OPERATIONAL_ENABLED); /* Set runtime cached attributes. */ - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompReadinessState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompReadinessState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompReadinessState); - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompOperState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompOperState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompOperState); - avd_saImmOiRtObjectUpdate(&comp->comp_info.name, "saAmfCompPresenceState", + avd_saImmOiRtObjectUpdate(Amf::to_string(&comp->comp_info.name), "saAmfCompPresenceState", SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompPresenceState); m_AVSV_SEND_CKPT_UPDT_ASYNC_ADD(avd_cb, comp, AVSV_CKPT_AVD_COMP_CONFIG); @@ -323,20 +324,20 @@ * * @return int */ -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) +static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) { SaAisErrorT rc; SaNameT aname; - char *parent; + std::string::size_type pos; SaUint32T value; - if ((parent = strchr((char*)dn->value, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + if ((pos = dn.find(',')) == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); return 0; } - if (strncmp(++parent, "safSu=", 6) != 0) { - report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s' ", parent, dn->value); + if (dn.compare(pos + 1, 6, "safSu=") != 0) { + report_ccb_validation_error(opdata, "Wrong parent '%s' to '%s' ", dn.substr(pos +1).c_str(), dn.c_str()); return 0; } @@ -360,19 +361,19 @@ if (rc == SA_AIS_OK) { if ((value < SA_AMF_NO_RECOMMENDATION) || (value > SA_AMF_NODE_FAILFAST)) { report_ccb_validation_error(opdata, "Illegal/unsupported saAmfCompRecoveryOnError value %u for '%s'", - value, dn->value); + value, dn.c_str()); return 0; } if (value == SA_AMF_NO_RECOMMENDATION) LOG_NO("Invalid configuration, saAmfCompRecoveryOnError=NO_RECOMMENDATION(%u) for '%s'", - value, dn->value); + value, dn.c_str()); } rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompDisableRestart"), attributes, 0, &value); if ((rc == SA_AIS_OK) && (value > SA_TRUE)) { report_ccb_validation_error(opdata, "Illegal saAmfCompDisableRestart value %u for '%s'", - value, dn->value); + value, dn.c_str()); return 0; } @@ -486,40 +487,42 @@ return 1; } -static AVD_COMP *comp_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_COMP *comp_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { int rc = -1; AVD_COMP *comp; char *cmd_argv; const char *str; const AVD_COMP_TYPE *comptype; + SaNameT comp_type; SaAisErrorT error; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); /* ** If called at new active at failover, the object is found in the DB ** but needs to get configuration attributes initialized. */ - if (nullptr == (comp = comp_db->find(Amf::to_string(dn)))) { + if (nullptr == (comp = comp_db->find(dn))) { if ((comp = avd_comp_new(dn)) == nullptr) goto done; } else TRACE("already created, refreshing config..."); - error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"), attributes, 0, &comp->saAmfCompType); + error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompType"), attributes, 0, &comp_type); osafassert(error == SA_AIS_OK); + comp->saAmfCompType = Amf::to_string(&comp_type); - if ((comptype = comptype_db->find(Amf::to_string(&comp->saAmfCompType))) == nullptr) { - LOG_ER("saAmfCompType '%s' does not exist", comp->saAmfCompType.value); + if ((comptype = comptype_db->find(comp->saAmfCompType)) == nullptr) { + LOG_ER("saAmfCompType '%s' does not exist", comp->saAmfCompType.c_str()); goto done; } /* TODO clean this up! */ comp->comp_info.category = avsv_amfcompcategory_to_avsvcomptype(comptype->saAmfCtCompCategory); if (comp->comp_info.category == AVSV_COMP_TYPE_INVALID) { - LOG_ER("Comp category %x invalid for '%s'", comp->comp_info.category, comp->saAmfCompType.value); + LOG_ER("Comp category %x invalid for '%s'", comp->comp_info.category, comp->saAmfCompType.c_str()); goto done; } @@ -679,7 +682,7 @@ * * @return int */ -SaAisErrorT avd_comp_config_get(const SaNameT *su_name, AVD_SU *su) +SaAisErrorT avd_comp_config_get(const std::string& su_name, AVD_SU *su) { SaAisErrorT rc, error = SA_AIS_ERR_FAILED_OPERATION; SaImmSearchHandleT searchHandle; @@ -722,7 +725,7 @@ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if ((rc = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, su_name, + if ((rc = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle, su_name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, configAttributes, &searchHandle)) != SA_AIS_OK) { @@ -733,22 +736,22 @@ while ((rc = immutil_saImmOmSearchNext_2(searchHandle, &comp_name, (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { - if (!is_config_valid(&comp_name, attributes, nullptr)) + if (!is_config_valid(Amf::to_string(&comp_name), attributes, nullptr)) goto done2; - if ((comp = comp_create(&comp_name, attributes)) == nullptr) + if ((comp = comp_create(Amf::to_string(&comp_name), attributes)) == nullptr) goto done2; num_of_comp_in_su ++; comp_add_to_model(comp); - if (avd_compcstype_config_get(&comp_name, comp) != SA_AIS_OK) + if (avd_compcstype_config_get(Amf::to_string(&comp_name), comp) != SA_AIS_OK) goto done2; } /* If there are no component in the SU, we treat it as invalid configuration. */ if (0 == num_of_comp_in_su) { - LOG_ER("There is no component configured for SU '%s'", su_name->value); + LOG_ER("There is no component configured for SU '%s'", su_name.c_str()); goto done2; } @@ -775,9 +778,10 @@ const SaNameT *objectName, SaImmAdminOperationIdT opId, const SaImmAdminOperationParamsT_2 **params) { - TRACE_ENTER2("%llu, '%s', %llu", invocation, objectName->value, opId); + const std::string object_name(Amf::to_string(objectName)); + TRACE_ENTER2("%llu, '%s', %llu", invocation, object_name.c_str(), opId); - AVD_COMP *comp = comp_db->find(Amf::to_string(objectName)); + AVD_COMP *comp = comp_db->find(object_name); osafassert(comp != nullptr); switch (opId) { @@ -785,28 +789,28 @@ case SA_AMF_ADMIN_RESTART: if (comp->admin_pend_cbk.invocation != 0) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_TRY_AGAIN, nullptr, - "Component undergoing admin operation '%s'", objectName->value); + "Component undergoing admin operation '%s'", object_name.c_str()); } else if ((comp->su->sg_of_su->sg_ncs_spec == true) && (comp->su->sg_of_su->sg_redundancy_model == SA_AMF_2N_REDUNDANCY_MODEL)) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_BAD_OPERATION, nullptr, "Not allowed on comp of middleware 2N SU : %s, op_id: %llu", - objectName->value, opId); + object_name.c_str(), opId); } else if (comp->su->pend_cbk.invocation != 0) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_TRY_AGAIN, nullptr, - "SU undergoing admin operation '%s'", objectName->value); + "SU undergoing admin operation '%s'", object_name.c_str()); } else if (comp->su->su_on_node->admin_node_pend_cbk.invocation != 0) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_TRY_AGAIN, nullptr, - "Node undergoing admin operation '%s'", objectName->value); + "Node undergoing admin operation '%s'", object_name.c_str()); } else if (comp->saAmfCompPresenceState != SA_AMF_PRESENCE_INSTANTIATED) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_BAD_OPERATION, nullptr, - "Component not instantiated '%s'", objectName->value); + "Component not instantiated '%s'", object_name.c_str()); } else if (comp->saAmfCompOperState == SA_AMF_OPERATIONAL_DISABLED) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_BAD_OPERATION, nullptr, - "Component disabled, first repair su or check node status'%s'", objectName->value); + "Component disabled, first repair su or check node status'%s'", object_name.c_str()); } else { comp->admin_pend_cbk.admin_oper = static_cast<SaAmfAdminOperationIdT>(opId); comp->admin_pend_cbk.invocation = invocation; @@ -830,11 +834,11 @@ AMFND will take care of reassignment.*/ /* prepare the admin op req message and queue it */ - if (avd_admin_op_msg_snd(&comp->comp_info.name, AVSV_SA_AMF_COMP, + if (avd_admin_op_msg_snd(Amf::to_string(&comp->comp_info.name), AVSV_SA_AMF_COMP, static_cast<SaAmfAdminOperationIdT>(opId), comp->su->su_on_node) != NCSCC_RC_SUCCESS) { report_admin_op_error(immOiHandle, invocation, SA_AIS_ERR_TIMEOUT, nullptr, - "Admin op request send failed '%s'", objectName->value); + "Admin op request send failed '%s'", object_name.c_str()); comp->admin_pend_cbk.admin_oper = static_cast<SaAmfAdminOperationIdT>(0); comp->admin_pend_cbk.invocation = 0; } @@ -856,19 +860,20 @@ static SaAisErrorT comp_rt_attr_cb(SaImmOiHandleT immOiHandle, const SaNameT *objectName, const SaImmAttrNameT *attributeNames) { - AVD_COMP *comp = comp_db->find(Amf::to_string(objectName)); + const std::string object_name(Amf::to_string(objectName)); + AVD_COMP *comp = comp_db->find(object_name); SaImmAttrNameT attributeName; int i = 0; - TRACE_ENTER2("'%s'", objectName->value); + TRACE_ENTER2("'%s'", object_name.c_str()); osafassert(comp != nullptr); while ((attributeName = attributeNames[i++]) != nullptr) { if (!strcmp("saAmfCompRestartCount", attributeName)) { - avd_saImmOiRtObjectUpdate_sync(objectName, attributeName, + avd_saImmOiRtObjectUpdate_sync(object_name, attributeName, SA_IMM_ATTR_SAUINT32T, &comp->saAmfCompRestartCount); } else if (!strcmp("saAmfCompCurrProxyName", attributeName)) { - avd_saImmOiRtObjectUpdate_sync(objectName, attributeName, + avd_saImmOiRtObjectUpdate_sync(object_name, attributeName, SA_IMM_ATTR_SANAMET, &comp->saAmfCompCurrProxyName); /* TODO */ } else if (!strcmp("saAmfCompCurrProxiedNames", attributeName)) { @@ -928,18 +933,18 @@ it != compcstype_db->end(); it++) { AVD_COMPCS_TYPE *compcstype = it->second; if (compcstype->comp == comp) { - SaNameT cstype_name; + std::string cstype_name; AVD_CTCS_TYPE *ctcstype = nullptr; AVD_CS_TYPE *cst = nullptr; - get_child_dn_from_ass_dn(&compcstype->name, &cstype_name); + get_child_dn_from_ass_dn(compcstype->name, cstype_name); //First check if this cstype exists in the sustem. - if ((cst = cstype_db->find(Amf::to_string(&cstype_name))) == nullptr) { + if ((cst = cstype_db->find(cstype_name)) == nullptr) { LOG_WA("cstype of '%s' is not preseint in AMF database", - compcstype->name.value); + compcstype->name.c_str()); continue; } //ctcstype relationship should exists with all the cstypes. - if ((ctcstype = get_ctcstype(&dn, &cstype_name)) == nullptr) { + if ((ctcstype = get_ctcstype(Amf::to_string(&dn), cstype_name)) == nullptr) { report_ccb_validation_error(opdata, "ctcstype relationship " "between new comptype and cstype from" "component's compcstype(s) does not exist"); @@ -1215,7 +1220,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - if (is_config_valid(&opdata->objectName, opdata->param.create.attrValues, opdata)) + if (is_config_valid(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues, opdata)) rc = SA_AIS_OK; break; case CCBUTIL_MODIFY: @@ -1252,7 +1257,7 @@ comp = comp_db->find(Amf::to_string(&opdata->objectName)); param.name = comp->comp_info.name; - comp_type = comptype_db->find(Amf::to_string(&comp->saAmfCompType)); + comp_type = comptype_db->find(comp->saAmfCompType); su_node_ptr = comp->su->get_node_ptr(); @@ -1280,18 +1285,18 @@ if (!strcmp(attribute->attrName, "saAmfCompType")) { SaNameT *dn = (SaNameT*) value; - const std::string oldType(Amf::to_string(&comp->saAmfCompType)); + const std::string oldType(comp->saAmfCompType); if (oldType.compare(Amf::to_string(dn)) == 0) { // ignore 'change' if it's being set to the same value - TRACE("saAmfCompType '%s' unchanged for '%s'", comp->saAmfCompType.value, + TRACE("saAmfCompType '%s' unchanged for '%s'", comp->saAmfCompType.c_str(), opdata->objectName.value); continue; } - TRACE("saAmfCompType modified from '%s' to '%s' for '%s'", comp->saAmfCompType.value, dn->value, + TRACE("saAmfCompType modified from '%s' to '%s' for '%s'", comp->saAmfCompType.c_str(), dn->value, opdata->objectName.value); avd_comptype_remove_comp(comp); - comp->saAmfCompType = *dn; + comp->saAmfCompType = Amf::to_string(dn); comp->comp_type = comptype_db->find(Amf::to_string(dn)); avd_comptype_add_comp(comp); param.attr_id = saAmfCompType_ID; @@ -1616,14 +1621,14 @@ } else if (!strcmp(attribute->attrName, "saAmfCompProxyCsi")) { if (value_is_deleted) - memset(&comp->comp_proxy_csi, 0, sizeof(comp->comp_proxy_csi)); + comp->comp_proxy_csi = ""; else - comp->comp_proxy_csi = *((SaNameT *)value); + comp->comp_proxy_csi = Amf::to_string((SaNameT *)value); } else if (!strcmp(attribute->attrName, "saAmfCompContainerCsi")) { if (value_is_deleted) - memset(&comp->comp_proxy_csi, 0, sizeof(comp->comp_container_csi)); + comp->comp_proxy_csi = ""; else - comp->comp_container_csi = *((SaNameT *)value); + comp->comp_container_csi = Amf::to_string((SaNameT *)value); } else { osafassert(0); } @@ -1674,7 +1679,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - comp = comp_create(&opdata->objectName, opdata->param.create.attrValues); + comp = comp_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(comp); comp_add_to_model(comp); break; @@ -1699,12 +1704,12 @@ * * @return AVD_COMP* */ -AVD_COMP *avd_comp_get_or_create(const SaNameT *dn) +AVD_COMP *avd_comp_get_or_create(const std::string& dn) { - AVD_COMP *comp = comp_db->find(Amf::to_string(dn)); + AVD_COMP *comp = comp_db->find(dn); if (!comp) { - TRACE("'%s' does not exist, creating it", dn->value); + TRACE("'%s' does not exist, creating it", dn.c_str()); comp = avd_comp_new(dn); osafassert(comp != nullptr); avd_comp_db_add(comp); @@ -1775,7 +1780,7 @@ */ bool AVD_COMP::saaware() const { - AVD_COMP_TYPE *comptype = comptype_db->find(Amf::to_string(&saAmfCompType)); + AVD_COMP_TYPE *comptype = comptype_db->find(saAmfCompType); return (IS_COMP_SAAWARE(comptype->saAmfCtCompCategory)); } diff --git a/osaf/services/saf/amf/amfd/compcstype.cc b/osaf/services/saf/amf/amfd/compcstype.cc --- a/osaf/services/saf/amf/amfd/compcstype.cc +++ b/osaf/services/saf/amf/amfd/compcstype.cc @@ -32,37 +32,26 @@ AmfDb<std::string, AVD_COMPCS_TYPE> *compcstype_db = nullptr;; // -// TODO(HANO) Temporary use this function instead of strdup which uses malloc. -// Later on remove this function and use std::string instead -#include <cstring> -static char *StrDup(const char *s) -{ - char *c = new char[strlen(s) + 1]; - std::strcpy(c,s); - return c; -} - -// AVD_COMPCS_TYPE::AVD_COMPCS_TYPE() { } // -AVD_COMPCS_TYPE::AVD_COMPCS_TYPE(const SaNameT *dn) { - memcpy(name.value, dn->value, dn->length); - name.length = dn->length; +AVD_COMPCS_TYPE::AVD_COMPCS_TYPE(const std::string& dn) : + name(dn) +{ } void avd_compcstype_db_add(AVD_COMPCS_TYPE *cst) { unsigned int rc; - if (compcstype_db->find(Amf::to_string(&cst->name)) == nullptr) { - rc = compcstype_db->insert(Amf::to_string(&cst->name),cst); + if (compcstype_db->find(cst->name) == nullptr) { + rc = compcstype_db->insert(cst->name, cst); osafassert(rc == NCSCC_RC_SUCCESS); } } -AVD_COMPCS_TYPE *avd_compcstype_new(const SaNameT *dn) +AVD_COMPCS_TYPE *avd_compcstype_new(const std::string& dn) { AVD_COMPCS_TYPE *compcstype; @@ -75,10 +64,10 @@ { /* Check comp link to see if it has been added already */ if (cst->comp == nullptr) { - SaNameT dn; + std::string dn; avd_compcstype_db_add(cst); - avsv_sanamet_init(&cst->name, &dn, "safComp="); - cst->comp = comp_db->find(Amf::to_string(&dn)); + avsv_sanamet_init(cst->name, dn, "safComp="); + cst->comp = comp_db->find(dn); } } @@ -98,13 +87,14 @@ * row status is active. **************************************************************************/ -AVD_COMPCS_TYPE * avd_compcstype_find_match(const SaNameT *cstype_name, const AVD_COMP *comp) +AVD_COMPCS_TYPE * avd_compcstype_find_match(const std::string& cstype_name, const AVD_COMP *comp) { AVD_COMPCS_TYPE *cst = nullptr; SaNameT dn; + const SaNameTWrapper cstype(cstype_name); TRACE_ENTER(); - avsv_create_association_class_dn(cstype_name, &comp->comp_info.name, "safSupportedCsType", &dn); + avsv_create_association_class_dn(cstype, &comp->comp_info.name, "safSupportedCsType", &dn); TRACE("'%s'", dn.value); cst = compcstype_db->find(Amf::to_string(&dn)); TRACE_LEAVE(); @@ -117,35 +107,33 @@ * * @return int */ -static int is_config_valid(const SaNameT *dn, CcbUtilOperationData_t *opdata) +static int is_config_valid(const std::string& dn, CcbUtilOperationData_t *opdata) { - SaNameT comp_name; - const SaNameT *comptype_name; - SaNameT ctcstype_name = {0}; - char *parent; + std::string comp_name; + std::string comptype_name; + std::string ctcstype_name; + std::string::size_type parent; AVD_COMP *comp; - char *cstype_name = StrDup((char*)dn->value); - char *p; + std::string cstype_name; + std::string::size_type comma; + TRACE_ENTER2("%s", dn.c_str()); + /* This is an association class, the parent (SaAmfComp) should come after the second comma */ - if ((parent = strchr((char*)dn->value, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + if ((parent = dn.find(',')) == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); goto free_cstype_name; } - parent++; - /* Second comma should be the parent */ - if ((parent = strchr(parent, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + if ((parent = dn.find(',', parent + 1)) == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); goto free_cstype_name; } - parent++; - /* Should be children to SaAmfComp */ - if (strncmp(parent, "safComp=", 8) != 0) { - report_ccb_validation_error(opdata, "Wrong parent '%s'", parent); + if (dn.compare(parent + 1, 8, "safComp=") != 0) { + report_ccb_validation_error(opdata, "Wrong parent '%s'", dn.c_str()); goto free_cstype_name; } @@ -154,88 +142,100 @@ ** to create the SaAmfCompCsType instance later. */ - avsv_sanamet_init(dn, &comp_name, "safComp="); - comp = comp_db->find(Amf::to_string(&comp_name)); + avsv_sanamet_init(dn, comp_name, "safComp="); + comp = comp_db->find(comp_name); + + TRACE("find %s", comp_name.c_str()); if (comp != nullptr) - comptype_name = &comp->saAmfCompType; + comptype_name = comp->saAmfCompType; else { CcbUtilOperationData_t *tmp; if (opdata == nullptr) { - report_ccb_validation_error(opdata, "'%s' does not exist in model", comp_name.value); + report_ccb_validation_error(opdata, "'%s' does not exist in model", comp_name.c_str()); goto free_cstype_name; } - if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, &comp_name)) == nullptr) { - LOG_ER("'%s'does not exist in existing model or in CCB", comp_name.value); + const SaNameTWrapper name(comp_name); + if ((tmp = ccbutil_getCcbOpDataByDN(opdata->ccbId, name)) == nullptr) { + LOG_ER("'%s'does not exist in existing model or in CCB", comp_name.c_str()); osafassert(0); goto free_cstype_name; } - comptype_name = immutil_getNameAttr(tmp->param.create.attrValues, "saAmfCompType", 0); + const SaNameT* comptype = immutil_getNameAttr(tmp->param.create.attrValues, "saAmfCompType", 0); + comptype_name = Amf::to_string(comptype); } - osafassert(comptype_name); + osafassert(comptype_name.empty() == false); + + comma = dn.find(','); + osafassert(comma != std::string::npos); + comma = dn.find(',', comma + 1); + osafassert(comma != std::string::npos); + + cstype_name = dn.substr(0, comma); - p = strchr(cstype_name, ',') + 1; - p = strchr(p, ','); - *p = '\0'; + ctcstype_name = cstype_name + "," + comptype_name; - ctcstype_name.length = sprintf((char*)ctcstype_name.value, "%s,%s", cstype_name, comptype_name->value); - - if (ctcstype_db->find(Amf::to_string(&ctcstype_name)) == nullptr) { + // ctcstype_name looks like: + // safSupportedCsType=safVersion=4.0.0\,safCSType=AMFWDOG-OpenSAF,safVersion=4.0.0,safCompType=OpenSafCompTypeAMFWDOG + if (ctcstype_db->find(ctcstype_name) == nullptr) { if (opdata == nullptr) { - report_ccb_validation_error(opdata, "'%s' does not exist in model", ctcstype_name.value); + report_ccb_validation_error(opdata, "'%s' does not exist in model", ctcstype_name.c_str()); goto free_cstype_name; } - if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &ctcstype_name) == nullptr) { + const SaNameTWrapper ctcstype(ctcstype_name); + if (ccbutil_getCcbOpDataByDN(opdata->ccbId, ctcstype) == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in existing model or in CCB", - ctcstype_name.value); + ctcstype_name.c_str()); goto free_cstype_name; } } - delete [] cstype_name; + TRACE_LEAVE(); return 1; free_cstype_name: - delete [] cstype_name; + TRACE_LEAVE(); return 0; } -static AVD_COMPCS_TYPE *compcstype_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_COMPCS_TYPE *compcstype_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { int rc = -1; AVD_COMPCS_TYPE *compcstype; AVD_CTCS_TYPE *ctcstype; - SaNameT ctcstype_name = {0}; - char *cstype_name = StrDup((char*)dn->value); - char *p; - SaNameT comp_name; + std::string ctcstype_name; + std::string cstype_name(dn); + std::string::size_type pos; + std::string comp_name; AVD_COMP *comp; SaUint32T num_max_act_csi, num_max_std_csi; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); /* ** If called at new active at failover, the object is found in the DB ** but needs to get configuration attributes initialized. */ - if ((nullptr == (compcstype = compcstype_db->find(Amf::to_string(dn)))) && + if ((nullptr == (compcstype = compcstype_db->find(dn))) && ((compcstype = avd_compcstype_new(dn)) == nullptr)) goto done; - avsv_sanamet_init(dn, &comp_name, "safComp="); - comp = comp_db->find(Amf::to_string(&comp_name)); + avsv_sanamet_init(dn, comp_name, "safComp="); + comp = comp_db->find(comp_name); - p = strchr(cstype_name, ',') + 1; - p = strchr(p, ','); - *p = '\0'; - ctcstype_name.length = sprintf((char*)ctcstype_name.value, - "%s,%s", cstype_name, comp->comp_type->name.value); + pos = cstype_name.find(','); + osafassert(pos != std::string::npos); + pos = dn.find(',', pos + 1); + osafassert(pos != std::string::npos); + cstype_name = cstype_name.substr(0, pos); - ctcstype = ctcstype_db->find(Amf::to_string(&ctcstype_name)); + ctcstype_name = cstype_name + "," + comp->comp_type->name; + + ctcstype = ctcstype_db->find(ctcstype_name); if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCompNumMaxActiveCSIs"), attributes, 0, &num_max_act_csi) != SA_AIS_OK) { @@ -261,8 +261,7 @@ done: if (rc != 0) - compcstype_db->erase(Amf::to_string(&compcstype->name)); - delete [] cstype_name; + compcstype_db->erase(compcstype->name); TRACE_LEAVE(); return compcstype; @@ -277,7 +276,7 @@ * * @return int */ -SaAisErrorT avd_compcstype_config_get(SaNameT *comp_name, AVD_COMP *comp) +SaAisErrorT avd_compcstype_config_get(const std::string& name, AVD_COMP *comp) { SaAisErrorT error; SaImmSearchHandleT searchHandle; @@ -288,14 +287,13 @@ AVD_COMPCS_TYPE *compcstype; SaImmAttrNameT attributeNames[] = {const_cast<SaImmAttrNameT>("saAmfCompNumMaxActiveCSIs"), const_cast<SaImmAttrNameT>("saAmfCompNumMaxStandbyCSIs"), nullptr}; - TRACE_ENTER(); searchParam.searchOneAttr.attrName = const_cast<SaImmAttrNameT>("SaImmAttrClassName"); searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - error = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, comp_name, SA_IMM_SUBTREE, + error = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle, name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_SOME_ATTR, &searchParam, attributeNames, &searchHandle); @@ -307,12 +305,12 @@ while ((error = immutil_saImmOmSearchNext_2(searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes)) == SA_AIS_OK) { - if (!is_config_valid(&dn, nullptr)) { + if (!is_config_valid(Amf::to_string(&dn), nullptr)) { error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } - if ((compcstype = compcstype_create(&dn, attributes)) == nullptr) { + if ((compcstype = compcstype_create(Amf::to_string(&dn), attributes)) == nullptr) { error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } @@ -332,12 +330,13 @@ { SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION; AVD_COMPCS_TYPE *cst; + std::string comp_name; TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata->objectName.value); switch (opdata->operationType) { case CCBUTIL_CREATE: { - if (is_config_valid(&opdata->objectName, opdata)) + if (is_config_valid(Amf::to_string(&opdata->objectName), opdata)) rc = SA_AIS_OK; break; } @@ -346,14 +345,13 @@ break; case CCBUTIL_DELETE: AVD_COMP *comp; - SaNameT comp_name; AVD_SU_SI_REL *curr_susi; AVD_COMP_CSI_REL *compcsi; cst = compcstype_db->find(Amf::to_string(&opdata->objectName)); osafassert(cst); - avsv_sanamet_init(&opdata->objectName, &comp_name, "safComp="); - comp = comp_db->find(Amf::to_string(&comp_name)); + avsv_sanamet_init(Amf::to_string(&opdata->objectName), comp_name, "safComp="); + comp = comp_db->find(comp_name); for (curr_susi = comp->su->list_of_susi; curr_susi != nullptr; curr_susi = curr_susi->su_next) for (compcsi = curr_susi->list_of_csicomp; compcsi; compcsi = compcsi->susi_csicomp_next) { if (compcsi->comp == comp) { @@ -380,14 +378,14 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - cst = compcstype_create(&opdata->objectName, opdata->param.create.attrValues); + cst = compcstype_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(cst); compcstype_add_to_model(cst); break; case CCBUTIL_DELETE: cst = compcstype_db->find(Amf::to_string(&opdata->objectName)); if (cst != nullptr) { - compcstype_db->erase(Amf::to_string(&cst->name)); + compcstype_db->erase(cst->name); delete cst; } break; @@ -410,10 +408,10 @@ while ((attributeName = attributeNames[i++]) != nullptr) { if (!strcmp("saAmfCompNumCurrActiveCSIs", attributeName)) { - rc = avd_saImmOiRtObjectUpdate_sync(objectName, attributeName, + rc = avd_saImmOiRtObjectUpdate_sync(Amf::to_string(objectName), attributeName, SA_IMM_ATTR_SAUINT32T, &cst->saAmfCompNumCurrActiveCSIs); } else if (!strcmp("saAmfCompNumCurrStandbyCSIs", attributeName)) { - avd_saImmOiRtObjectUpdate(objectName, attributeName, + avd_saImmOiRtObjectUpdate(Amf::to_string(objectName), attributeName, SA_IMM_ATTR_SAUINT32T, &cst->saAmfCompNumCurrStandbyCSIs); } else if (!strcmp("saAmfCompAssignedCsi", attributeName)) { /* TODO */ diff --git a/osaf/services/saf/amf/amfd/comptype.cc b/osaf/services/saf/amf/amfd/comptype.cc --- a/osaf/services/saf/amf/amfd/comptype.cc +++ b/osaf/services/saf/amf/amfd/comptype.cc @@ -34,14 +34,14 @@ static void comptype_db_add(AVD_COMP_TYPE *compt) { - unsigned int rc = comptype_db->insert(Amf::to_string(&compt->name),compt); + unsigned int rc = comptype_db->insert(compt->name,compt); osafassert (rc == NCSCC_RC_SUCCESS); } static void comptype_delete(AVD_COMP_TYPE *avd_comp_type) { osafassert(nullptr == avd_comp_type->list_of_comp); - comptype_db->erase(Amf::to_string(&avd_comp_type->name)); + comptype_db->erase(avd_comp_type->name); delete avd_comp_type; } @@ -78,26 +78,27 @@ } // -AVD_COMP_TYPE::AVD_COMP_TYPE(const SaNameT *dn) { - memcpy(&name.value, dn->value, dn->length); - name.length = dn->length; +AVD_COMP_TYPE::AVD_COMP_TYPE(const std::string& dn) : + name(dn) +{ } -static AVD_COMP_TYPE *comptype_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_COMP_TYPE *comptype_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { AVD_COMP_TYPE *compt; const char *str; SaAisErrorT error; + SaNameT ct_sw_bundle; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); compt = new AVD_COMP_TYPE(dn); error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCategory"), attributes, 0, &compt->saAmfCtCompCategory); osafassert(error == SA_AIS_OK); - (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"), attributes, 0, &compt->saAmfCtSwBundle); - + (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"), attributes, 0, &ct_sw_bundle); + compt->saAmfCtSwBundle = Amf::to_string(&ct_sw_bundle); if ((str = immutil_getStringAttr(attributes, "saAmfCtDefCmdEnv", 0)) != nullptr) strcpy(compt->saAmfCtDefCmdEnv, str); (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefClcCliTimeout"), attributes, 0, &compt->saAmfCtDefClcCliTimeout); @@ -139,7 +140,7 @@ if (compt->saAmfCtDefRecoveryOnError == SA_AMF_NO_RECOMMENDATION) { compt->saAmfCtDefRecoveryOnError = SA_AMF_COMPONENT_FAILOVER; LOG_NO("COMPONENT_FAILOVER(%u) used instead of NO_RECOMMENDATION(%u) for '%s'", - SA_AMF_COMPONENT_FAILOVER, SA_AMF_NO_RECOMMENDATION, dn->value); + SA_AMF_COMPONENT_FAILOVER, SA_AMF_NO_RECOMMENDATION, dn.c_str()); } (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefDisableRestart"), attributes, 0, &compt->saAmfCtDefDisableRestart); @@ -390,13 +391,13 @@ if (config_is_valid(&dn, attributes, nullptr) == false) goto done2; if ((comp_type = comptype_db->find(Amf::to_string(&dn))) == nullptr) { - if ((comp_type = comptype_create(&dn, attributes)) == nullptr) + if ((comp_type = comptype_create(Amf::to_string(&dn), attributes)) == nullptr) goto done2; comptype_db_add(comp_type); } - if (avd_ctcstype_config_get(&dn, comp_type) != SA_AIS_OK) + if (avd_ctcstype_config_get(Amf::to_string(&dn), comp_type) != SA_AIS_OK) goto done2; } @@ -434,7 +435,7 @@ AVD_COMP *comp = comp_type->list_of_comp; while (comp != nullptr) { node_set.insert(comp->su->su_on_node); - TRACE("comp name %s on node %s", comp->comp_info.name.value, comp->su->su_on_node->name.value); + TRACE("comp name %s on node %s", comp->comp_info.name.value, comp->su->su_on_node->name.c_str()); comp = comp->comp_type_list_comp_next; } @@ -452,7 +453,7 @@ if (!strcmp(attribute->attrName, "saAmfCtDefCallbackTimeout")) { SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0]; TRACE("saAmfCtDefCallbackTimeout to '%llu' for compType '%s' on node '%s'", *param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(*param_val); memcpy(param.value, param_val, param.value_len); param.attr_id = saAmfCtDefCallbackTimeout_ID; @@ -460,7 +461,7 @@ } else if (!strcmp(attribute->attrName, "saAmfCtDefClcCliTimeout")) { SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0]; TRACE("saAmfCtDefClcCliTimeout to '%llu' for compType '%s' on node '%s'", *param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(*param_val); memcpy(param.value, param_val, param.value_len); param.attr_id = saAmfCtDefClcCliTimeout_ID; @@ -468,7 +469,7 @@ } else if (!strcmp(attribute->attrName, "saAmfCtDefQuiescingCompleteTimeout")) { SaTimeT *param_val = (SaTimeT *)attribute->attrValues[0]; TRACE("saAmfCtDefQuiescingCompleteTimeout to '%llu' for compType '%s' on node '%s'", *param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(*param_val); memcpy(param.value, param_val, param.value_len); param.attr_id = saAmfCtDefQuiescingCompleteTimeout_ID; @@ -483,7 +484,7 @@ param_val = *(SaUint32T *)attribute->attrValues[0]; } TRACE("saAmfCtDefInstantiationLevel to '%u' for compType '%s' on node '%s'", param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(param_val); memcpy(param.value, ¶m_val, param.value_len); param.attr_id = saAmfCtDefInstantiationLevel_ID; @@ -493,7 +494,7 @@ } else if (!strcmp(attribute->attrName, "saAmfCtDefRecoveryOnError")) { SaAmfRecommendedRecoveryT *param_val = (SaAmfRecommendedRecoveryT *)attribute->attrValues[0]; TRACE("saAmfCtDefRecoveryOnError to '%u' for compType '%s' on node '%s'", *param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(*param_val); memcpy(param.value, param_val, param.value_len); param.attr_id = saAmfCtDefRecoveryOnError_ID; @@ -508,7 +509,7 @@ param_val = *(SaBoolT *)attribute->attrValues[0]; } TRACE("saAmfCtDefDisableRestart to '%u' for compType '%s' on node '%s'", param_val, - opdata->objectName.value, (*it)->name.value); + opdata->objectName.value, (*it)->name.c_str()); param.value_len = sizeof(param_val); memcpy(param.value, ¶m_val, param.value_len); param.attr_id = saAmfCtDefDisableRestart_ID; @@ -529,7 +530,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - comp_type = comptype_create(&opdata->objectName, + comp_type = comptype_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(comp_type); comptype_db_add(comp_type); @@ -710,7 +711,7 @@ comp = comp->comp_type_list_comp_next; } if (comp_exist == true) { - report_ccb_validation_error(opdata, "SaAmfCompType '%s' is in use",comp_type->name.value); + report_ccb_validation_error(opdata, "SaAmfCompType '%s' is in use",comp_type->name.c_str()); goto done; } } diff --git a/osaf/services/saf/amf/amfd/csi.cc b/osaf/services/saf/amf/amfd/csi.cc --- a/osaf/services/saf/amf/amfd/csi.cc +++ b/osaf/services/saf/amf/amfd/csi.cc @@ -27,7 +27,7 @@ AmfDb<std::string, AVD_CSI> *csi_db = nullptr; // -AVD_COMP* AVD_CSI::find_assigned_comp(const SaNameT *cstype, +AVD_COMP* AVD_CSI::find_assigned_comp(const std::string& cstype, const AVD_SU_SI_REL *sisu, const std::vector<AVD_COMP*> &list_of_comp) { auto iter = list_of_comp.begin(); @@ -61,7 +61,7 @@ void avd_csi_delete(AVD_CSI *csi) { AVD_CSI_ATTR *temp; - TRACE_ENTER2("%s", csi->name.value); + TRACE_ENTER2("%s", csi->name.c_str()); /* Delete CSI attributes */ temp = csi->list_attributes; @@ -73,8 +73,8 @@ avd_cstype_remove_csi(csi); csi->si->remove_csi(csi); - csi_db->erase(Amf::to_string(&csi->name)); - + csi_db->erase(csi->name); + if (csi->saAmfCSIDependencies != nullptr) { AVD_CSI_DEPS *csi_dep; AVD_CSI_DEPS *next_csi_dep; @@ -94,12 +94,12 @@ void csi_cmplt_delete(AVD_CSI *csi, bool ckpt) { AVD_PG_CSI_NODE *curr; - TRACE_ENTER2("%s", csi->name.value); + TRACE_ENTER2("%s", csi->name.c_str()); if (!ckpt) { /* inform the avnds that track this csi */ for (curr = (AVD_PG_CSI_NODE *)m_NCS_DBLIST_FIND_FIRST(&csi->pg_node_list); curr != nullptr; curr = (AVD_PG_CSI_NODE *)m_NCS_DBLIST_FIND_NEXT(&curr->csi_dll_node)) { - avd_snd_pg_upd_msg(avd_cb, curr->node, 0, static_cast<SaAmfProtectionGroupChangesT>(0), &csi->name); + avd_snd_pg_upd_msg(avd_cb, curr->node, 0, static_cast<SaAmfProtectionGroupChangesT>(0), csi->name); } } @@ -117,20 +117,25 @@ * * @return int */ -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) +static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) { SaAisErrorT rc; SaNameT aname; - const char *parent; + std::string parent; unsigned int values_number; - if ((parent = avd_getparent((const char*)dn->value)) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + TRACE_ENTER2("%s", dn.c_str()); + + parent = avd_getparent(dn); + if (parent.empty() == true ) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); + TRACE_LEAVE(); return 0; } - if (strncmp(parent, "safSi=", 6) != 0) { - LOG_ER("Wrong parent '%s' to '%s' ", parent, dn->value); + if (parent.compare(0, 6, "safSi=") != 0) { + LOG_ER("Wrong parent '%s' to '%s' ", parent.c_str(), dn.c_str()); + TRACE_LEAVE(); return 0; } @@ -141,11 +146,13 @@ /* CS type does not exist in current model, check CCB if passed as param */ if (opdata == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in model", aname.value); + TRACE_LEAVE(); return 0; } if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &aname) == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in existing model or in CCB", aname.value); + TRACE_LEAVE(); return 0; } } @@ -155,46 +162,54 @@ (values_number > 0)) { unsigned int i; - SaNameT saAmfCSIDependency; - const char *dep_parent; + std::string csi_dependency; + std::string dep_parent; for (i = 0; i < values_number; i++) { - rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes, i, &saAmfCSIDependency); + SaNameT tmp_dependency; + rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes, i, &tmp_dependency); osafassert(rc == SA_AIS_OK); + csi_dependency = Amf::to_string(&tmp_dependency); - if (strncmp((char*)dn->value, (char*)saAmfCSIDependency.value, sizeof(dn->value)) == 0) { + if (dn.compare(csi_dependency) == 0) { report_ccb_validation_error(opdata, "'%s' validation failed - dependency configured to" - " itself!", dn->value); + " itself!", dn.c_str()); + TRACE_LEAVE(); return 0; } - if (csi_db->find(Amf::to_string(&saAmfCSIDependency)) == nullptr) { + if (csi_db->find(csi_dependency) == nullptr) { /* CSI does not exist in current model, check CCB if passed as param */ if (opdata == nullptr) { /* initial loading, check IMM */ - if (!object_exist_in_imm(&saAmfCSIDependency)) { + if (object_exist_in_imm(csi_dependency) == false) { report_ccb_validation_error(opdata, "'%s' validation failed - '%s' does not" " exist", - dn->value, saAmfCSIDependency.value); + dn.c_str(), csi_dependency.c_str()); + TRACE_LEAVE(); return 0; } - } else if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &saAmfCSIDependency) == nullptr) { + } else if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &tmp_dependency) == nullptr) { report_ccb_validation_error(opdata, "'%s' validation failed - '%s' does not exist" " in existing model or in CCB", - dn->value, saAmfCSIDependency.value); + dn.c_str(), csi_dependency.c_str()); + TRACE_LEAVE(); return 0; } } - if ((dep_parent = avd_getparent((const char*)saAmfCSIDependency.value)) == nullptr) { + dep_parent = avd_getparent(csi_dependency); + if (dep_parent.empty() == true) { report_ccb_validation_error(opdata, "'%s' validation failed - invalid " - "saAmfCSIDependency '%s'", dn->value, saAmfCSIDependency.value); + "saAmfCSIDependency '%s'", dn.c_str(), csi_dependency.c_str()); + TRACE_LEAVE(); return 0; } - if (strncmp(parent, dep_parent, sizeof(dn->value)) != 0) { + if (parent.compare(dep_parent) != 0) { report_ccb_validation_error(opdata, "'%s' validation failed - dependency to CSI in other" - " SI is not allowed", dn->value); + " SI is not allowed", dn.c_str()); + TRACE_LEAVE(); return 0; } } @@ -203,27 +218,31 @@ /* Verify that the SI can contain this CSI */ { AVD_SI *avd_si; - SaNameT si_name; + std::string si_name; - avsv_sanamet_init(dn, &si_name, "safSi"); + avsv_sanamet_init(dn, si_name, "safSi"); - if (nullptr != (avd_si = avd_si_get(&si_name))) { + if (nullptr != (avd_si = avd_si_get(si_name))) { /* Check for any admin operations undergoing. This is valid during dyn add*/ if((opdata != nullptr) && (AVD_SG_FSM_STABLE != avd_si->sg_of_si->sg_fsm_state)) { report_ccb_validation_error(opdata, "SG('%s') fsm state('%u') is not in " "AVD_SG_FSM_STABLE(0)", - avd_si->sg_of_si->name.value, avd_si->sg_of_si->sg_fsm_state); + avd_si->sg_of_si->name.c_str(), avd_si->sg_of_si->sg_fsm_state); + TRACE_LEAVE(); return 0; } } else { if (opdata == nullptr) { - report_ccb_validation_error(opdata, "'%s' does not exist in model", si_name.value); + report_ccb_validation_error(opdata, "'%s' does not exist in model", si_name.c_str()); + TRACE_LEAVE(); return 0; } - if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &si_name) == nullptr) { + const SaNameTWrapper si(si_name); + if (ccbutil_getCcbOpDataByDN(opdata->ccbId, si) == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in existing model or in CCB", - si_name.value); + si_name.c_str()); + TRACE_LEAVE(); return 0; } } @@ -241,6 +260,7 @@ } #endif } + TRACE_LEAVE(); return 1; } /** @@ -262,8 +282,7 @@ */ for (temp_csi_dep = csi->saAmfCSIDependencies; temp_csi_dep != nullptr; temp_csi_dep = temp_csi_dep->csi_dep_next) { - if (0 == memcmp(&new_csi_dep->csi_dep_name_value, - &temp_csi_dep->csi_dep_name_value, sizeof(SaNameT))) { + if (new_csi_dep->csi_dep_name_value.compare(temp_csi_dep->csi_dep_name_value) == 0) { csi_added = true; } } @@ -279,13 +298,13 @@ /** * Removes a CSI dep from the saAmfCSIDependencies list and free the memory */ -static void csi_remove_csidep(AVD_CSI *csi, const SaNameT *required_dn) +static void csi_remove_csidep(AVD_CSI *csi, const std::string& required_dn) { AVD_CSI_DEPS *prev = nullptr; AVD_CSI_DEPS *curr; for (curr = csi->saAmfCSIDependencies; curr != nullptr; curr = curr->csi_dep_next) { - if (memcmp(required_dn, &curr->csi_dep_name_value, sizeof(SaNameT)) == 0) { + if (required_dn.compare(curr->csi_dep_name_value) == 0) { break; } prev = curr; @@ -303,9 +322,8 @@ } // -AVD_CSI::AVD_CSI(const SaNameT* csi_name) { - memcpy(&name.value, csi_name->value, csi_name->length); - name.length = csi_name->length; +AVD_CSI::AVD_CSI(const std::string& csi_name) : + name(csi_name) { } /** * @brief creates new csi and adds csi node to the csi_db @@ -314,15 +332,15 @@ * * @return pointer to AVD_CSI */ -AVD_CSI *csi_create(const SaNameT *csi_name) +AVD_CSI *csi_create(const std::string& csi_name) { AVD_CSI *csi; - TRACE_ENTER2("'%s'", csi_name->value); + TRACE_ENTER2("'%s'", csi_name.c_str()); csi = new AVD_CSI(csi_name); - if (csi_db->insert(Amf::to_string(&csi->name), csi) != NCSCC_RC_SUCCESS) + if (csi_db->insert(csi->name, csi) != NCSCC_RC_SUCCESS) osafassert(0); TRACE_LEAVE(); @@ -335,21 +353,24 @@ * * @return pointer to AVD_CSI */ -static void csi_get_attr_and_add_to_model(AVD_CSI *csi, const SaImmAttrValuesT_2 **attributes, const SaNameT *si_name) +static void csi_get_attr_and_add_to_model(AVD_CSI *csi, const SaImmAttrValuesT_2 **attributes, const std::string& si_name) { int rc = -1; unsigned int values_number = 0; SaAisErrorT error; + SaNameT cs_type; - TRACE_ENTER2("'%s'", csi->name.value); + TRACE_ENTER2("'%s'", csi->name.c_str()); /* initialize the pg node-list */ csi->pg_node_list.order = NCS_DBLIST_ANY_ORDER; csi->pg_node_list.cmp_cookie = avsv_dblist_uns32_cmp; csi->pg_node_list.free_cookie = 0; - error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"), attributes, 0, &csi->saAmfCSType); + error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"), attributes, 0, &cs_type); osafassert(error == SA_AIS_OK); + csi->saAmfCSType = Amf::to_string(&cs_type); + if ((immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes, &values_number) == SA_AIS_OK)) { if (values_number == 0) { @@ -360,17 +381,22 @@ unsigned int i; bool found; AVD_CSI_DEPS *new_csi_dep = nullptr; + + TRACE("checking dependencies"); for (i = 0; i < values_number; i++) { + TRACE("i %u", i); new_csi_dep = new AVD_CSI_DEPS(); + SaNameT temp_name; if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), attributes, i, - &new_csi_dep->csi_dep_name_value) != SA_AIS_OK) { - LOG_ER("Get saAmfCSIDependencies FAILED for '%s'", csi->name.value); + &temp_name) != SA_AIS_OK) { + LOG_ER("Get saAmfCSIDependencies FAILED for '%s'", csi->name.c_str()); // make sure we don't leak any memory if // saAmfCSIDependencies can't be read delete new_csi_dep; goto done; } + new_csi_dep->csi_dep_name_value = Amf::to_string(&temp_name); found = csi_add_csidep(csi,new_csi_dep); if (found == true) delete new_csi_dep; @@ -378,10 +404,11 @@ } } else { csi->rank = 1; - TRACE_ENTER2("DEP not configured, marking rank 1. Csi'%s', Rank'%u'",csi->name.value,csi->rank); + TRACE_ENTER2("DEP not configured, marking rank 1. Csi'%s', Rank'%u'",csi->name.c_str(),csi->rank); } - csi->cstype = cstype_db->find(Amf::to_string(&csi->saAmfCSType)); + TRACE("find %s", csi->saAmfCSType.c_str()); + csi->cstype = cstype_db->find(csi->saAmfCSType); csi->si = avd_si_get(si_name); avd_cstype_add_csi(csi); @@ -406,12 +433,12 @@ * * @return int */ -SaAisErrorT avd_csi_config_get(const SaNameT *si_name, AVD_SI *si) +SaAisErrorT avd_csi_config_get(const std::string& si_name, AVD_SI *si) { SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION; SaImmSearchHandleT searchHandle; SaImmSearchParametersT_2 searchParam; - SaNameT csi_name; + char* temp_csi_name; const SaImmAttrValuesT_2 **attributes; const char *className = "SaAmfCSI"; AVD_CSI *csi; @@ -420,7 +447,7 @@ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if (immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, si_name, SA_IMM_SUBTREE, + if (immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle, si_name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR, &searchParam, nullptr, &searchHandle) != SA_AIS_OK) { @@ -428,18 +455,19 @@ goto done1; } - while (immutil_saImmOmSearchNext_2(searchHandle, &csi_name, (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { - if (!is_config_valid(&csi_name, attributes, nullptr)) + while (immutil_saImmOmSearchNext_o2(searchHandle, &temp_csi_name, (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { + const std::string csi_name(temp_csi_name); + if (!is_config_valid(csi_name, attributes, nullptr)) goto done2; - if ((csi = csi_db->find(Amf::to_string(&csi_name))) == nullptr) + if ((csi = csi_db->find(csi_name)) == nullptr) { - csi = csi_create(&csi_name); + csi = csi_create(csi_name); csi_get_attr_and_add_to_model(csi, attributes, si_name); } - if (avd_csiattr_config_get(&csi_name, csi) != SA_AIS_OK) { + if (avd_csiattr_config_get(csi_name, csi) != SA_AIS_OK) { error = SA_AIS_ERR_FAILED_OPERATION; goto done2; } @@ -471,7 +499,7 @@ static SaAisErrorT csi_ccb_completed_create_hdlr(CcbUtilOperationData_t *opdata) { SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION; - SaNameT si_name; + std::string si_name; AVD_SI *avd_si; AVD_COMP *t_comp; AVD_SU_SI_REL *t_sisu; @@ -480,14 +508,14 @@ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata->objectName.value); - if (!is_config_valid(&opdata->objectName, opdata->param.create.attrValues, opdata)) + if (!is_config_valid(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues, opdata)) goto done; rc = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSType"), opdata->param.create.attrValues, 0, &cstype_name); osafassert(rc == SA_AIS_OK); - avsv_sanamet_init(&opdata->objectName, &si_name, "safSi"); - avd_si = avd_si_get(&si_name); + avsv_sanamet_init(Amf::to_string(&opdata->objectName), si_name, "safSi"); + avd_si = avd_si_get(si_name); if (nullptr != avd_si) { /* Check whether si has been assigned to any SU. */ @@ -497,7 +525,7 @@ if (t_sisu->csi_add_rem == true) { LOG_NO("CSI create of '%s' in queue: pending assignment" " for '%s'", - opdata->objectName.value, t_sisu->su->name.value); + opdata->objectName.value, t_sisu->su->name.c_str()); } t_sisu = t_sisu->si_next; }/* while(t_sisu) */ @@ -515,13 +543,13 @@ compcsi = compcsi->susi_csicomp_next; } - t_comp = su->find_unassigned_comp_that_provides_cstype(&cstype_name); + t_comp = su->find_unassigned_comp_that_provides_cstype(Amf::to_string(&cstype_name)); /* Component not found.*/ if (nullptr == t_comp) { /* This means that all the components are assigned, let us assigned it to assigned component.*/ - t_comp = AVD_CSI::find_assigned_comp(&cstype_name, t_sisu, su->list_of_comp); + t_comp = AVD_CSI::find_assigned_comp(Amf::to_string(&cstype_name), t_sisu, su->list_of_comp); } if (nullptr == t_comp) { report_ccb_validation_error(opdata, "Compcsi doesn't exist or " @@ -587,22 +615,23 @@ goto done; } - const SaNameT *required_dn = (SaNameT*) attr_mod->modAttr.attrValues[0]; - const AVD_CSI *required_csi = csi_db->find(Amf::to_string(required_dn)); + const SaNameT *tmp_required_dn = (SaNameT*) attr_mod->modAttr.attrValues[0]; + const std::string required_dn(Amf::to_string(tmp_required_dn)); + const AVD_CSI *required_csi = csi_db->find(required_dn); // Required CSI must exist in current model if (required_csi == nullptr) { report_ccb_validation_error(opdata, - "CSI '%s' does not exist", required_dn->value); + "CSI '%s' does not exist", required_dn.c_str()); goto done; } // Required CSI must be contained in the same SI - const char *si_dn = strchr((char*)required_dn->value, ',') + 1; + const char *si_dn = strchr((char*)required_dn.c_str(), ',') + 1; if (strstr((char*)opdata->objectName.value, si_dn) == nullptr) { report_ccb_validation_error(opdata, "'%s' is not in the same SI as '%s'", - opdata->objectName.value, required_dn->value); + opdata->objectName.value, required_dn.c_str()); goto done; } @@ -616,32 +645,30 @@ // check cyclic dependencies by scanning the deps of the required CSI for (csi_dep = required_csi->saAmfCSIDependencies; csi_dep; csi_dep = csi_dep->csi_dep_next) { - if (strcmp((char*)csi_dep->csi_dep_name_value.value, - (char*)opdata->objectName.value) == 0) { + if (csi_dep->csi_dep_name_value.compare((char*)opdata->objectName.value) == 0) { // the required CSI requires this CSI report_ccb_validation_error(opdata, "cyclic dependency between '%s' and '%s'", - opdata->objectName.value, required_dn->value); + opdata->objectName.value, required_dn.c_str()); goto done; } } // don't allow adding the same dep again for (csi_dep = csi->saAmfCSIDependencies; csi_dep; csi_dep = csi_dep->csi_dep_next) { - if (strcmp((char*)csi_dep->csi_dep_name_value.value, - (char*)required_dn->value) == 0) { + if (csi_dep->csi_dep_name_value.compare((char*)required_dn.c_str()) == 0) { // dep already exist, should we return OK instead? report_ccb_validation_error(opdata, "dependency between '%s' and '%s' already exist", - opdata->objectName.value, required_dn->value); + opdata->objectName.value, required_dn.c_str()); goto done; } } // disallow dep between same CSIs - if (strcmp((char*)csi->name.value, (char*)required_dn->value) == 0) { + if (csi->name.compare((char*)required_dn.c_str()) == 0) { report_ccb_validation_error(opdata, - "dependency for '%s' to itself", csi->name.value); + "dependency for '%s' to itself", csi->name.c_str()); goto done; } } else if (attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) { @@ -700,7 +727,7 @@ if(AVD_SG_FSM_STABLE != csi->si->sg_of_si->sg_fsm_state) { report_ccb_validation_error(opdata, "SG('%s') fsm state('%u') is not in AVD_SG_FSM_STABLE(0)", - csi->si->sg_of_si->name.value, csi->si->sg_of_si->sg_fsm_state); + csi->si->sg_of_si->name.c_str(), csi->si->sg_of_si->sg_fsm_state); rc = SA_AIS_ERR_BAD_OPERATION; goto done; } @@ -712,7 +739,7 @@ /* SI is unlocked and this is the last csi to be deleted, then donot allow it. */ if (csi->si->list_of_csi->si_list_of_csi_next == nullptr) { report_ccb_validation_error(opdata, " csi('%s') is the last csi in si('%s'). Lock SI and" - " then delete csi.", csi->name.value, csi->si->name.value); + " then delete csi.", csi->name.c_str(), csi->si->name.c_str()); rc = SA_AIS_ERR_BAD_OPERATION; goto done; } @@ -721,7 +748,7 @@ if (t_sisu->csi_add_rem == true) { LOG_NO("CSI remove of '%s' rejected: pending " "assignment for '%s'", - csi->name.value, t_sisu->su->name.value); + csi->name.c_str(), t_sisu->su->name.c_str()); if (avd_cb->avail_state_avd == SA_AMF_HA_ACTIVE) { rc = SA_AIS_ERR_BAD_OPERATION; goto done; @@ -732,7 +759,7 @@ } } else { if (csi->list_compcsi != nullptr) { - report_ccb_validation_error(opdata, "SaAmfCSI '%s' is in use", csi->name.value); + report_ccb_validation_error(opdata, "SaAmfCSI '%s' is in use", csi->name.c_str()); rc = SA_AIS_ERR_BAD_OPERATION; goto done; } @@ -799,7 +826,7 @@ goto done; } - TRACE_ENTER2("'%s'", csi ? csi->name.value : nullptr); + TRACE_ENTER2("'%s'", csi ? csi->name.c_str() : nullptr); /* Check whether si has been assigned to any SU. */ if ((nullptr != csi->si->list_of_sisu) && @@ -825,13 +852,13 @@ if ((SA_AMF_HA_ACTIVE == t_sisu->state) && (true == first_sisu)) { first_sisu = false; if (avd_snd_susi_msg(avd_cb, t_sisu->su, t_sisu, AVSV_SUSI_ACT_DEL, true, t_csicomp) != NCSCC_RC_SUCCESS) { - LOG_ER("susi send failure for su'%s' and si'%s'", t_sisu->su->name.value, t_sisu->si->name.value); + LOG_ER("susi send failure for su'%s' and si'%s'", t_sisu->su->name.c_str(), t_sisu->si->name.c_str()); goto done; } } t_sisu->csi_add_rem = static_cast<SaBoolT>(true); - t_sisu->comp_name = t_csicomp->comp->comp_info.name; + t_sisu->comp_name = Amf::to_string(&t_csicomp->comp->comp_info.name); t_sisu->csi_name = t_csicomp->csi->name; m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, t_sisu, AVSV_CKPT_AVD_SI_ASS); t_sisu = t_sisu->si_next; @@ -878,11 +905,11 @@ if (!strcmp(attr_mod->modAttr.attrName, "saAmfCSType")) { AVD_CS_TYPE *csi_type; SaNameT cstype_name = *(SaNameT*) attr_mod->modAttr.attrValues[0]; - TRACE("saAmfCSType modified from '%s' to '%s' for Csi'%s'", csi->saAmfCSType.value, - cstype_name.value, csi->name.value); + TRACE("saAmfCSType modified from '%s' to '%s' for Csi'%s'", csi->saAmfCSType.c_str(), + cstype_name.value, csi->name.c_str()); csi_type = cstype_db->find(Amf::to_string(&cstype_name)); avd_cstype_remove_csi(csi); - csi->saAmfCSType = cstype_name; + csi->saAmfCSType = Amf::to_string(&cstype_name); csi->cstype = csi_type; avd_cstype_add_csi(csi); } else if (!strcmp(attr_mod->modAttr.attrName, "saAmfCSIDependencies")) { @@ -890,7 +917,7 @@ assert(attr_mod->modAttr.attrValuesNumber == 1); si->remove_csi(csi); AVD_CSI_DEPS *new_csi_dep = new AVD_CSI_DEPS(); - new_csi_dep->csi_dep_name_value = *((SaNameT*) attr_mod->modAttr.attrValues[0]); + new_csi_dep->csi_dep_name_value = Amf::to_string((SaNameT*) attr_mod->modAttr.attrValues[0]); bool already_exist = csi_add_csidep(csi, new_csi_dep); if (already_exist) delete new_csi_dep; @@ -899,7 +926,7 @@ } else if (attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) { assert(attr_mod->modAttr.attrValuesNumber == 1); const SaNameT *required_dn = (SaNameT*) attr_mod->modAttr.attrValues[0]; - csi_remove_csidep(csi, required_dn); + csi_remove_csidep(csi, Amf::to_string(required_dn)); //Mark rank of all the CSIs to 0. for (AVD_CSI *tmp_csi = csi->si->list_of_csi; tmp_csi; @@ -942,10 +969,10 @@ possibility that before getting ccb apply callback we might get compcsi create checkpoint and csi will be created as part of checkpoint processing */ - csi = csi_create(&opdata->objectName); + csi = csi_create(Amf::to_string(&opdata->objectName)); } csi_get_attr_and_add_to_model(csi, opdata->param.create.attrValues, - opdata->param.create.parentName); + Amf::to_string(opdata->param.create.parentName)); if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) goto done; @@ -977,7 +1004,7 @@ for(t_sisu = csi->si->list_of_sisu; t_sisu != nullptr; t_sisu = t_sisu->si_next) { if (t_sisu->csi_add_rem == true) { LOG_NO("CSI create '%s' delayed: pending assignment for '%s'", - csi->name.value, t_sisu->su->name.value); + csi->name.c_str(), t_sisu->su->name.c_str()); goto done; } } @@ -997,17 +1024,17 @@ compcsi = compcsi->susi_csicomp_next; } - t_comp = t_sisu->su->find_unassigned_comp_that_provides_cstype(&csi->saAmfCSType); + t_comp = t_sisu->su->find_unassigned_comp_that_provides_cstype(csi->saAmfCSType); /* Component not found.*/ if (nullptr == t_comp) { /* This means that all the components are assigned, let us assigned it to assigned component.*/ - t_comp = AVD_CSI::find_assigned_comp(&csi->saAmfCSType, t_sisu, t_sisu->su->list_of_comp); + t_comp = AVD_CSI::find_assigned_comp(csi->saAmfCSType, t_sisu, t_sisu->su->list_of_comp); } if (nullptr == t_comp) { LOG_ER("Compcsi doesn't exist or MaxActiveCSI/MaxStandbyCSI have reached for csi '%s'", - csi->name.value); + csi->name.c_str()); goto done; } @@ -1032,7 +1059,7 @@ } t_sisu->csi_add_rem = static_cast<SaBoolT>(true); - t_sisu->comp_name = compcsi->comp->comp_info.name; + t_sisu->comp_name = Amf::to_string(&compcsi->comp->comp_info.name); t_sisu->csi_name = compcsi->csi->name; m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(avd_cb, t_sisu, AVSV_CKPT_AVD_SI_ASS); t_sisu = t_sisu->si_next; @@ -1078,7 +1105,7 @@ * @param comp_dn */ static void avd_create_csiassignment_in_imm(SaAmfHAStateT ha_state, - const SaNameT *csi_dn, const SaNameT *comp_dn) + const std::string& csi_dn, const std::string& _comp_dn) { SaNameT dn; SaAmfHAReadinessStateT saAmfCSICompHAReadinessState = SA_AMF_HARS_READY_FOR_ASSIGNMENT; @@ -1104,6 +1131,7 @@ nullptr }; + const SaNameTWrapper comp_dn(_comp_dn); avsv_create_association_class_dn(comp_dn, nullptr, "safCSIComp", &dn); TRACE("Adding %s", dn.value); @@ -1120,7 +1148,7 @@ return nullptr; } - TRACE_ENTER2("Comp'%s' and Csi'%s'", comp->comp_info.name.value, csi->name.value); + TRACE_ENTER2("Comp'%s' and Csi'%s'", comp->comp_info.name.value, csi->name.c_str()); /* do not add if already in there */ for (compcsi = susi->list_of_csicomp; compcsi; compcsi = compcsi->susi_csicomp_next) { @@ -1151,7 +1179,7 @@ susi->list_of_csicomp = compcsi; } if (create_in_imm) - avd_create_csiassignment_in_imm(susi->state, &csi->name, &comp->comp_info.name); + avd_create_csiassignment_in_imm(susi->state, csi->name, Amf::to_string(&comp->comp_info.name)); done: TRACE_LEAVE(); return compcsi; @@ -1162,14 +1190,16 @@ * @param comp_dn * @param csi_dn */ -static void avd_delete_csiassignment_from_imm(const SaNameT *comp_dn, const SaNameT *csi_dn) +static void avd_delete_csiassignment_from_imm(const std::string& comp_dn, const std::string& csi_dn) { - SaNameT dn; + SaNameT dn; + const SaNameTWrapper comp(comp_dn); + const SaNameTWrapper csi(csi_dn); - avsv_create_association_class_dn(comp_dn, csi_dn, "safCSIComp", &dn); + avsv_create_association_class_dn(comp, csi, "safCSIComp", &dn); TRACE("Deleting %s", dn.value); - avd_saImmOiRtObjectDelete(&dn); + avd_saImmOiRtObjectDelete(Amf::to_string(&dn)); } /***************************************************************************** @@ -1224,7 +1254,7 @@ susi->list_of_csicomp = lcomp_csi->susi_csicomp_next; lcomp_csi->susi_csicomp_next = nullptr; prev_compcsi = nullptr; - avd_delete_csiassignment_from_imm(&lcomp_csi->comp->comp_info.name, &lcomp_csi->csi->name); + avd_delete_csiassignment_from_imm(Amf::to_string(&lcomp_csi->comp->comp_info.name), lcomp_csi->csi->name); delete lcomp_csi; } @@ -1252,7 +1282,7 @@ { AVD_COMP_CSI_REL *t_compcsi, *t_compcsi_susi, *prev_compcsi = nullptr; - TRACE_ENTER2("Csi'%s', compcsi_cnt'%u'", comp_csi->csi->name.value, comp_csi->csi->compcsi_cnt); + TRACE_ENTER2("Csi'%s', compcsi_cnt'%u'", comp_csi->csi->name.c_str(), comp_csi->csi->compcsi_cnt); /* Find the comp-csi in susi. */ t_compcsi_susi = susi->list_of_csicomp; @@ -1293,8 +1323,8 @@ comp_csi->csi->compcsi_cnt--; if (!ckpt) - avd_snd_pg_upd_msg(avd_cb, comp_csi->comp->su->su_on_node, comp_csi, SA_AMF_PROTECTION_GROUP_REMOVED, 0); - avd_delete_csiassignment_from_imm(&comp_csi->comp->comp_info.name, &comp_csi->csi->name); + avd_snd_pg_upd_msg(avd_cb, comp_csi->comp->su->su_on_node, comp_csi, SA_AMF_PROTECTION_GROUP_REMOVED, std::string("")); + avd_delete_csiassignment_from_imm(Amf::to_string(&comp_csi->comp->comp_info.name), comp_csi->csi->name); delete comp_csi; TRACE_LEAVE(); @@ -1394,7 +1424,7 @@ spons_csi = spons_csi->csi_dep_next) { bool is_sponsor_assigned = false; - AVD_CSI *tmp_csi = csi_db->find(Amf::to_string(&spons_csi->csi_dep_name_value)); + AVD_CSI *tmp_csi = csi_db->find(spons_csi->csi_dep_name_value); //Check if this sponsor csi is assigned to any comp in this su. for (AVD_COMP_CSI_REL *compcsi = tmp_csi->list_compcsi; compcsi; diff --git a/osaf/services/saf/amf/amfd/csiattr.cc b/osaf/services/saf/amf/amfd/csiattr.cc --- a/osaf/services/saf/amf/amfd/csiattr.cc +++ b/osaf/services/saf/amf/amfd/csiattr.cc @@ -227,7 +227,7 @@ * * @return int */ -SaAisErrorT avd_csiattr_config_get(const SaNameT *csi_name, AVD_CSI *csi) +SaAisErrorT avd_csiattr_config_get(const std::string& csi_name, AVD_CSI *csi) { SaAisErrorT error; SaImmSearchHandleT searchHandle; @@ -242,7 +242,7 @@ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if ((error = immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, csi_name, + if ((error = immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle, csi_name.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR, &searchParam, nullptr, &searchHandle)) != SA_AIS_OK) { diff --git a/osaf/services/saf/amf/amfd/cstype.cc b/osaf/services/saf/amf/amfd/cstype.cc --- a/osaf/services/saf/amf/amfd/cstype.cc +++ b/osaf/services/saf/amf/amfd/cstype.cc @@ -24,35 +24,24 @@ AmfDb<std::string, AVD_CS_TYPE> *cstype_db = nullptr; -// -// TODO(HANO) Temporary use this function instead of strdup which uses malloc. -// Later on remove this function and use std::string instead -#include <cstring> -static char *StrDup(const char *s) -{ - char *c = new char[strlen(s) + 1]; - std::strcpy(c,s); - return c; -} - static void cstype_add_to_model(AVD_CS_TYPE *cst) { - uint32_t rc = cstype_db->insert(Amf::to_string(&cst->name),cst); + uint32_t rc = cstype_db->insert(cst->name,cst); osafassert(rc == NCSCC_RC_SUCCESS); } // -AVD_CS_TYPE::AVD_CS_TYPE(const SaNameT *dn) { - memcpy(&name.value, dn->value, dn->length); - name.length = dn->length; +AVD_CS_TYPE::AVD_CS_TYPE(const std::string& dn) : + name(dn) +{ } -static AVD_CS_TYPE *cstype_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_CS_TYPE *cstype_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { AVD_CS_TYPE *cst; SaUint32T values_number; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); cst = new AVD_CS_TYPE(dn); @@ -60,9 +49,9 @@ (values_number > 0)) { unsigned int i; - cst->saAmfCSAttrName = new SaStringT[values_number + 1](); - for (i = 0; i < values_number; i++) - cst->saAmfCSAttrName[i] = StrDup(immutil_getStringAttr(attributes, "saAmfCSAttrName", i)); + for (i = 0; i < values_number; i++) { + cst->saAmfCSAttrName.push_back(immutil_getStringAttr(attributes, "saAmfCSAttrName", i)); + } } TRACE_LEAVE(); @@ -75,24 +64,17 @@ */ static void cstype_delete(AVD_CS_TYPE *cst) { - char *p; - int i = 0; - - cstype_db->erase(Amf::to_string(&cst->name)); - - if (cst->saAmfCSAttrName != nullptr) { - while ((p = cst->saAmfCSAttrName[i++]) != nullptr) { - delete [] p; - } - } - delete [] cst->saAmfCSAttrName; + cstype_db->erase(cst->name); + cst->saAmfCSAttrName.clear(); delete cst; } void avd_cstype_add_csi(AVD_CSI *csi) { + TRACE_ENTER(); csi->csi_list_cs_type_next = csi->cstype->list_of_csi; csi->cstype->list_of_csi = csi; + TRACE_LEAVE(); } void avd_cstype_remove_csi(AVD_CSI *csi) @@ -175,7 +157,7 @@ goto done2; if ((cst = cstype_db->find(Amf::to_string(&dn))) == nullptr){ - if ((cst = cstype_create(&dn, attributes)) == nullptr) + if ((cst = cstype_create(Amf::to_string(&dn), attributes)) == nullptr) goto done2; cstype_add_to_model(cst); @@ -222,8 +204,9 @@ * each of the CSI in the cs_type list in the current CCB */ csi = cst->list_of_csi; - while (csi != nullptr) { - t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, &csi->name); + while (csi != nullptr) { + const SaNameTWrapper csi_name(csi->name); + t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId, csi_name); if ((t_opData == nullptr) || (t_opData->operationType != CCBUTIL_DELETE)) { csi_exist = true; break; @@ -231,7 +214,7 @@ csi = csi->csi_list_cs_type_next; } if (csi_exist == true) { - report_ccb_validation_error(opdata, "SaAmfCSType '%s' is in use", cst->name.value); + report_ccb_validation_error(opdata, "SaAmfCSType '%s' is in use", cst->name.c_str()); goto done; } } @@ -255,7 +238,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - cst = cstype_create(&opdata->objectName, opdata->param.create.attrValues); + cst = cstype_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(cst); cstype_add_to_model(cst); break; diff --git a/osaf/services/saf/amf/amfd/ctcstype.cc b/osaf/services/saf/amf/amfd/ctcstype.cc --- a/osaf/services/saf/amf/amfd/ctcstype.cc +++ b/osaf/services/saf/amf/amfd/ctcstype.cc @@ -29,57 +29,58 @@ static void ctcstype_db_add(AVD_CTCS_TYPE *ctcstype) { - unsigned int rc = ctcstype_db->insert(Amf::to_string(&ctcstype->name),ctcstype); + unsigned int rc = ctcstype_db->insert(ctcstype->name,ctcstype); osafassert(rc == NCSCC_RC_SUCCESS); } -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) +static int is_config_valid(const std::string& dn, const SaImmAttrValuesT_2 **attributes, CcbUtilOperationData_t *opdata) { SaUint32T uint32; - char *parent; - SaNameT cstype_dn; + std::string::size_type parent; + std::string cstype_dn; - if (get_child_dn_from_ass_dn(dn, &cstype_dn) != 0) { - report_ccb_validation_error(opdata, "malformed DN '%s'", dn->value); + if (get_child_dn_from_ass_dn(dn, cstype_dn) != 0) { + report_ccb_validation_error(opdata, "malformed DN '%s'", dn.c_str()); return 0; } - if (cstype_db->find(Amf::to_string(&cstype_dn)) == nullptr) { + if (cstype_db->find(cstype_dn) == nullptr) { if (opdata == nullptr) { report_ccb_validation_error(opdata, "SaAmfCSType object '%s' does not exist in model", - cstype_dn.value); + cstype_dn.c_str()); return 0; } - if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &cstype_dn) == nullptr) { + const SaNameTWrapper cstype(cstype_dn); + if (ccbutil_getCcbOpDataByDN(opdata->ccbId, cstype) == nullptr) { report_ccb_validation_error(opdata, "SaAmfCSType object '%s' does not exist in model or CCB", - cstype_dn.value); + cstype_dn.c_str()); return 0; } } /* Second comma should be parent */ - if ((parent = strchr((char*)dn->value, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + if ((parent = dn.find(',')) == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); return 0; } - if ((parent = strchr(++parent, ',')) == nullptr) { - report_ccb_validation_error(opdata, "No parent to '%s' ", dn->value); + if ((parent = dn.find(',', parent + 1)) == std::string::npos) { + report_ccb_validation_error(opdata, "No parent to '%s' ", dn.c_str()); return 0; } /* Should be children to SaAmfCompType */ - if (strncmp(++parent, "safVersion=", 11) != 0) { - report_ccb_validation_error(opdata, "Wrong parent '%s'", parent); + if (dn.compare(parent + 1, 11, "safVersion=") != 0) { + report_ccb_validation_error(opdata, "Wrong parent '%s'", dn.c_str()); return 0; } if ((immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCapability"), attributes, 0, &uint32) == SA_AIS_OK) && (uint32 > SA_AMF_COMP_NON_PRE_INSTANTIABLE)) { - report_ccb_validation_error(opdata, "Invalid saAmfCtCompCapability %u for '%s'", uint32, dn->value); + report_ccb_validation_error(opdata, "Invalid saAmfCtCompCapability %u for '%s'", uint32, dn.c_str()); return 0; } @@ -87,24 +88,22 @@ } // -AVD_CTCS_TYPE::AVD_CTCS_TYPE(const SaNameT *dn) { - memcpy(&name.value, dn->value, dn->length); - name.length = dn->length; +AVD_CTCS_TYPE::AVD_CTCS_TYPE(const std::string& dn) : + name(dn) +{ } // -static AVD_CTCS_TYPE *ctcstype_create(const SaNameT *dn, const SaImmAttrValuesT_2 **attributes) +static AVD_CTCS_TYPE *ctcstype_create(const std::string& dn, const SaImmAttrValuesT_2 **attributes) { AVD_CTCS_TYPE *ctcstype; int rc = -1; SaAisErrorT error; - TRACE_ENTER2("'%s'", dn->value); + TRACE_ENTER2("'%s'", dn.c_str()); ctcstype = new AVD_CTCS_TYPE(dn); - - error = immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCapability"), attributes, 0, &ctcstype->saAmfCtCompCapability); osafassert(error == SA_AIS_OK); @@ -126,7 +125,7 @@ return ctcstype; } -SaAisErrorT avd_ctcstype_config_get(const SaNameT *comp_type_dn, AVD_COMP_TYPE *comp_type) +SaAisErrorT avd_ctcstype_config_get(const std::string& comp_type_dn, AVD_COMP_TYPE *comp_type) { SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION; SaImmSearchHandleT searchHandle; @@ -142,7 +141,7 @@ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &className; - if (immutil_saImmOmSearchInitialize_2(avd_cb->immOmHandle, comp_type_dn, + if (immutil_saImmOmSearchInitialize_o2(avd_cb->immOmHandle, comp_type_dn.c_str(), SA_IMM_SUBTREE, SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR, &searchParam, nullptr, &searchHandle) != SA_AIS_OK) { @@ -151,11 +150,11 @@ } while (immutil_saImmOmSearchNext_2(searchHandle, &dn, (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { - if (!is_config_valid(&dn, attributes, nullptr)) + if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr)) goto done2; if ((ctcstype = ctcstype_db->find(Amf::to_string(&dn))) == nullptr ) { - if ((ctcstype = ctcstype_create(&dn, attributes)) == nullptr) + if ((ctcstype = ctcstype_create(Amf::to_string(&dn), attributes)) == nullptr) goto done2; ctcstype_db_add(ctcstype); @@ -179,7 +178,7 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - if (is_config_valid(&opdata->objectName, opdata->param.create.attrValues, opdata)) + if (is_config_valid(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues, opdata)) rc = SA_AIS_OK; break; case CCBUTIL_MODIFY: @@ -205,14 +204,14 @@ switch (opdata->operationType) { case CCBUTIL_CREATE: - ctcstype = ctcstype_create(&opdata->objectName, opdata->param.create.attrValues); + ctcstype = ctcstype_create(Amf::to_string(&opdata->objectName), opdata->param.create.attrValues); osafassert(ctcstype); ctcstype_db_add(ctcstype); break; case CCBUTIL_DELETE: ctcstype = ctcstype_db->find(Amf::to_string(&opdata->objectName)); if (ctcstype != nullptr) { - ctcstype_db->erase(Amf::to_string(&ctcstype->name)); + ctcstype_db->erase(ctcstype->name); delete ctcstype; } break; @@ -224,11 +223,13 @@ TRACE_LEAVE(); } -AVD_CTCS_TYPE *get_ctcstype(const SaNameT *comptype_name, const SaNameT *cstype_name) +AVD_CTCS_TYPE *get_ctcstype(const std::string& comptype_name, const std::string& cstype_name) { SaNameT dn; + const SaNameTWrapper comptype(comptype_name); + const SaNameTWrapper cstype(cstype_name); AVD_CTCS_TYPE *ctcs_type = nullptr; - avsv_create_association_class_dn(cstype_name, comptype_name, + avsv_create_association_class_dn(cstype, comptype, "safSupportedCsType", &dn); ctcs_type = ctcstype_db->find(Amf::to_string(&dn)); return ctcs_type; ------------------------------------------------------------------------------ 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel