osaf/services/saf/amf/amfd/sirankedsu.cc | 143 ++++++++++++------------------ 1 files changed, 57 insertions(+), 86 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/sirankedsu.cc b/osaf/services/saf/amf/amfd/sirankedsu.cc --- a/osaf/services/saf/amf/amfd/sirankedsu.cc +++ b/osaf/services/saf/amf/amfd/sirankedsu.cc @@ -34,20 +34,22 @@ #include <imm.h> #include <csi.h> #include <logtrace.h> +#include <algorithm> +#include <string> AmfDb<std::pair<std::string, uint32_t>, AVD_SUS_PER_SI_RANK> *sirankedsu_db= nullptr; -static void avd_susi_namet_init(const SaNameT *object_name, SaNameT *su_name, SaNameT *si_name); +static void avd_susi_namet_init(const std::string& object_name, std::string& su_name, std::string& si_name); static void avd_sirankedsu_db_add(AVD_SUS_PER_SI_RANK *sirankedsu) { AVD_SI *avd_si = nullptr; - unsigned int rc = sirankedsu_db->insert(make_pair(Amf::to_string(&(sirankedsu->indx.si_name)), + unsigned int rc = sirankedsu_db->insert(make_pair(sirankedsu->indx.si_name, sirankedsu->indx.su_rank), sirankedsu); osafassert(rc == NCSCC_RC_SUCCESS); /* Find the si name. */ - avd_si = avd_si_get(&(sirankedsu->indx.si_name)); - avd_si->add_rankedsu(&sirankedsu->su_name, sirankedsu->indx.su_rank); + avd_si = avd_si_get(sirankedsu->indx.si_name); + avd_si->add_rankedsu(sirankedsu->su_name, sirankedsu->indx.su_rank); /* Add sus_per_si_rank to si */ sirankedsu->sus_per_si_rank_on_si = avd_si; @@ -78,10 +80,7 @@ ranked_su_per_si = new AVD_SUS_PER_SI_RANK(); - ranked_su_per_si->indx.si_name.length = indx.si_name.length; - memcpy(ranked_su_per_si->indx.si_name.value, indx.si_name.value, - ranked_su_per_si->indx.si_name.length); - + ranked_su_per_si->indx.si_name = indx.si_name; ranked_su_per_si->indx.su_rank = indx.su_rank; return ranked_su_per_si; @@ -109,11 +108,10 @@ AVD_SUS_PER_SI_RANK_INDX rank_indx; memset(&rank_indx, '\0', sizeof(AVD_SUS_PER_SI_RANK_INDX)); - rank_indx.si_name.length = indx.si_name.length; - memcpy(rank_indx.si_name.value, indx.si_name.value, indx.si_name.length); + rank_indx.si_name = indx.si_name; rank_indx.su_rank = indx.su_rank; - ranked_su_per_si = sirankedsu_db->find(make_pair(Amf::to_string(&(rank_indx.si_name)), + ranked_su_per_si = sirankedsu_db->find(make_pair(rank_indx.si_name, rank_indx.su_rank)); return ranked_su_per_si; @@ -139,7 +137,7 @@ if (ranked_su_per_si == nullptr) return NCSCC_RC_FAILURE; - sirankedsu_db->erase(make_pair(Amf::to_string(&(ranked_su_per_si->indx.si_name)), + sirankedsu_db->erase(make_pair(ranked_su_per_si->indx.si_name, ranked_su_per_si->indx.su_rank)); delete ranked_su_per_si; return NCSCC_RC_SUCCESS; @@ -164,16 +162,13 @@ { uint32_t rank = 0; AVD_SUS_PER_SI_RANK *avd_sus_per_si_rank = nullptr; - SaNameT su_name; - SaNameT si_name; + std::string su_name; + std::string si_name; AVD_SUS_PER_SI_RANK_INDX indx; immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfRank"), attributes, 0, &rank); - - memset(&su_name, 0, sizeof(SaNameT)); - memset(&si_name, 0, sizeof(SaNameT)); - avd_susi_namet_init(dn, &su_name, &si_name); + avd_susi_namet_init(Amf::to_string(dn), su_name, si_name); /* Find the avd_sus_per_si_rank name. */ memset(&indx, '\0', sizeof(AVD_SUS_PER_SI_RANK_INDX)); @@ -217,7 +212,7 @@ if (i_sus_per_si_rank != sus_per_si_rank) { LOG_CR("SI '%s' having SU '%s' with rank %u, does not exist in sirankedsu link list", - sus_per_si_rank->indx.si_name.value, sus_per_si_rank->su_name.value, + sus_per_si_rank->indx.si_name.c_str(), sus_per_si_rank->su_name.c_str(), sus_per_si_rank->indx.su_rank); } else { if (prev_sus_per_si_rank == nullptr) { @@ -228,7 +223,7 @@ sus_per_si_rank->sus_per_si_rank_list_si_next; } } - sus_per_si_rank->sus_per_si_rank_on_si->remove_rankedsu(Amf::to_string(&sus_per_si_rank->su_name)); + sus_per_si_rank->sus_per_si_rank_on_si->remove_rankedsu(sus_per_si_rank->su_name); sus_per_si_rank->sus_per_si_rank_list_si_next = nullptr; sus_per_si_rank->sus_per_si_rank_on_si = nullptr; @@ -237,54 +232,54 @@ return; } -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) { AVD_SI *avd_si = nullptr; - SaNameT su_name; - SaNameT si_name; + std::string su_name; + std::string si_name; uint32_t rank = 0; AVD_SUS_PER_SI_RANK_INDX indx; AVD_SU *avd_su = nullptr; - memset(&su_name, 0, sizeof(SaNameT)); - memset(&si_name, 0, sizeof(SaNameT)); - avd_susi_namet_init(dn, &su_name, &si_name); + avd_susi_namet_init(dn, su_name, si_name); /* Find the si name. */ - avd_si = avd_si_get(&si_name); + avd_si = avd_si_get(si_name); if (avd_si == nullptr) { /* SI does not exist in current model, check CCB */ 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()); return 0; } - if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &si_name) == nullptr) { + const SaNameTWrapper tmp_si_name(si_name); + if (ccbutil_getCcbOpDataByDN(opdata->ccbId, tmp_si_name) == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in existing model or in CCB", - si_name.value); + si_name.c_str()); return 0; } } /* Find the su name. */ - avd_su = su_db->find(Amf::to_string(&su_name)); + avd_su = su_db->find(su_name); if (avd_su == nullptr) { /* SU does not exist in current model, check CCB */ if (opdata == nullptr) { - report_ccb_validation_error(opdata, "'%s' does not exist in model", su_name.value); + report_ccb_validation_error(opdata, "'%s' does not exist in model", su_name.c_str()); return 0; } - if (ccbutil_getCcbOpDataByDN(opdata->ccbId, &su_name) == nullptr) { + const SaNameTWrapper tmp_su_name(su_name); + if (ccbutil_getCcbOpDataByDN(opdata->ccbId, tmp_su_name) == nullptr) { report_ccb_validation_error(opdata, "'%s' does not exist in existing model or in CCB", - su_name.value); + su_name.c_str()); return 0; } } if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfRank"), attributes, 0, &rank) != SA_AIS_OK) { - report_ccb_validation_error(opdata, "saAmfRank not found for %s", dn->value); + report_ccb_validation_error(opdata, "saAmfRank not found for %s", dn.c_str()); return 0; } @@ -293,7 +288,7 @@ if ((avd_sirankedsu_find(avd_cb, indx)) != nullptr ) { if (opdata != nullptr) { report_ccb_validation_error(opdata, "saAmfRankedSu exists %s, si'%s', rank'%u'", - dn->value, si_name.value, rank); + dn.c_str(), si_name.c_str(), rank); return 0; } return SA_AIS_OK; @@ -302,43 +297,22 @@ return SA_AIS_OK; } -static void avd_susi_namet_init(const SaNameT *object_name, SaNameT *su_name, SaNameT *si_name) +static void avd_susi_namet_init(const std::string& object_name, std::string& su_name, std::string& si_name) { - char *p = nullptr; + std::string::size_type pos; + std::string::size_type equal_pos; - if (su_name) { - SaNameT temp_name; - int i; + // DN looks like: safRankedSu=safSu=SuName\,safSg=SgName\, + // safApp=AppName,safSi=SiName,safApp=AppName */ - /* Take out Su Name. safRankedSu=safSu=SuName\,safSg=SgName\, - safApp=AppName,safSi=SiName,safApp=AppName */ - temp_name = *object_name; - p = strstr((char *)temp_name.value, "safSi="); - *(--p) = '\0'; /* null terminate at comma before si name */ + // set si_name + pos = object_name.find("safSi="); + si_name = object_name.substr(pos); - /* Skip past the RDN tag */ - p = strchr((char *)temp_name.value, '=') + 1; - osafassert(p); - memset(su_name, 0, sizeof(SaNameT)); - /* Copy the RDN value which is a DN with escaped commas */ - i = 0; - while (*p) { - if (*p != '\\') - su_name->value[i++] = *p; - - p++; - } - /* i Points just after SU name ends, so it will give the name length - as it starts with zero. */ - su_name->length = i; - } - - if (si_name) { - memset(si_name, 0, sizeof(SaNameT)); - p = strstr((char *)object_name->value, "safSi="); - si_name->length = strlen(p); - memcpy(si_name->value, p, si_name->length); - } + // set su_name + equal_pos = object_name.find('='); + su_name = object_name.substr(equal_pos + 1, pos - equal_pos - 2); + su_name.erase(std::remove(su_name.begin(), su_name.end(), '\\'), su_name.end()); } static void sirankedsu_ccb_apply_cb(CcbUtilOperationData_t *opdata) @@ -368,25 +342,22 @@ static int avd_sirankedsu_ccb_complete_delete_hdlr(CcbUtilOperationData_t *opdata) { AVD_SI *si = nullptr; - SaNameT su_name; - SaNameT si_name; + std::string su_name; + std::string si_name; AVD_SUS_PER_SI_RANK *su_rank_rec = 0; bool found = false; TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata->objectName.value); - memset(&su_name, 0, sizeof(SaNameT)); - memset(&si_name, 0, sizeof(SaNameT)); - avd_susi_namet_init(opdata->param.deleteOp.objectName, &su_name, &si_name); + avd_susi_namet_init(Amf::to_string(opdata->param.deleteOp.objectName), su_name, si_name); /* determine if the su is ranked per si */ for (std::map<std::pair<std::string, uint32_t>, AVD_SUS_PER_SI_RANK*>::const_iterator it = sirankedsu_db->begin(); it != sirankedsu_db->end(); it++) { su_rank_rec = it->second; - if ((memcmp(&(su_rank_rec->indx.si_name), &si_name, sizeof(SaNameT)) - == 0) && - (memcmp(&su_rank_rec->su_name.value, - &su_name.value, su_name.length) == 0)) { + + if (su_rank_rec->indx.si_name.compare(si_name) == 0 && + su_rank_rec->su_name.compare(su_name) == 0) { found = true; break; } @@ -398,17 +369,17 @@ } /* Find the si name. */ - si = avd_si_get(&si_name); + si = avd_si_get(si_name); if (si == nullptr) { - LOG_ER("SI '%s' not found", si_name.value); + LOG_ER("SI '%s' not found", si_name.c_str()); goto error; } if (si != nullptr) { /* SI should not be assigned while SI ranked SU needs to be deleted */ if (si->list_of_sisu != nullptr) { - TRACE("Parent SI is in assigned state '%s'", si->name.value); + TRACE("Parent SI is in assigned state '%s'", si->name.c_str()); goto error; } } @@ -430,7 +401,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: @@ -451,7 +422,7 @@ return rc; } -SaAisErrorT avd_sirankedsu_config_get(SaNameT *si_name, AVD_SI *si) +SaAisErrorT avd_sirankedsu_config_get(const std::string& si_name, AVD_SI *si) { SaAisErrorT error = SA_AIS_ERR_FAILED_OPERATION; SaImmSearchHandleT searchHandle; @@ -468,7 +439,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) { @@ -480,13 +451,13 @@ LOG_NO("'%s'", dn.value); - indx.si_name = *si_name; + indx.si_name = si_name; if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfRank"), attributes, 0, &indx.su_rank) != SA_AIS_OK) { LOG_ER("Get saAmfRank FAILED for '%s'", dn.value); goto done1; } - if (!is_config_valid(&dn, attributes, nullptr)) + if (!is_config_valid(Amf::to_string(&dn), attributes, nullptr)) goto done2; if ((avd_sirankedsu = avd_sirankedsu_find(avd_cb, indx)) == nullptr) { ------------------------------------------------------------------------------ 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