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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel