osaf/services/saf/amf/amfd/util.cc | 205 ++++++++++++++++++++++--------------
1 files changed, 126 insertions(+), 79 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/util.cc
b/osaf/services/saf/amf/amfd/util.cc
--- a/osaf/services/saf/amf/amfd/util.cc
+++ b/osaf/services/saf/amf/amfd/util.cc
@@ -24,6 +24,7 @@
******************************************************************************
*/
+#include <algorithm>
#include <vector>
#include <string.h>
@@ -361,16 +362,18 @@
AVD_AVND *node = su->get_node_ptr();
TRACE_ENTER2("%s '%s'", (term_state == true) ? "Terminate" :
"Instantiate",
- su->name.value);
+ su->name.c_str());
/* prepare the node update message. */
d2n_msg = new AVSV_DND_MSG();
+
+ const SaNameTWrapper su_name(su->name);
/* prepare the SU presence state change notification message */
d2n_msg->msg_type = AVSV_D2N_PRESENCE_SU_MSG;
d2n_msg->msg_info.d2n_prsc_su.msg_id = ++(node->snd_msg_id);
d2n_msg->msg_info.d2n_prsc_su.node_id = node->node_info.nodeId;
- d2n_msg->msg_info.d2n_prsc_su.su_name = su->name;
+ d2n_msg->msg_info.d2n_prsc_su.su_name = su_name;
d2n_msg->msg_info.d2n_prsc_su.term_state = term_state;
TRACE("Sending %u to %x", AVSV_D2N_PRESENCE_SU_MSG,
node->node_info.nodeId);
@@ -472,8 +475,9 @@
static void reg_su_msg_init_su_info(AVD_DND_MSG *su_msg, const AVD_SU *su)
{
AVSV_SU_INFO_MSG *su_info = new AVSV_SU_INFO_MSG();
+ const SaNameTWrapper su_name(su->name);
- su_info->name = su->name;
+ su_info->name = su_name;
su_info->comp_restart_max = su->sg_of_su->saAmfSGCompRestartMax;
su_info->comp_restart_prob = su->sg_of_su->saAmfSGCompRestartProb;
su_info->su_restart_max = su->sg_of_su->saAmfSGSuRestartMax;
@@ -508,7 +512,7 @@
AVD_SU *su = nullptr;
uint32_t rc = NCSCC_RC_SUCCESS;
- TRACE_ENTER2("%s", avnd->node_name);
+ TRACE_ENTER2("%s", avnd->node_name.c_str());
AVD_DND_MSG *su_msg = new AVSV_DND_MSG();
su_msg->msg_type = AVSV_D2N_REG_SU_MSG;
@@ -557,11 +561,11 @@
* free messages and return error.
*/
- TRACE("Sending AVSV_D2N_REG_SU_MSG to %s", avnd->node_name);
+ TRACE("Sending AVSV_D2N_REG_SU_MSG to %s", avnd->node_name.c_str());
if (avd_d2n_msg_snd(cb, avnd, su_msg) == NCSCC_RC_FAILURE) {
--(avnd->snd_msg_id);
- LOG_ER("%s: snd to %s failed", __FUNCTION__, avnd->node_name);
+ LOG_ER("%s: snd to %s failed", __FUNCTION__,
avnd->node_name.c_str());
d2n_msg_free(su_msg);
rc = NCSCC_RC_FAILURE;
goto done;
@@ -680,8 +684,10 @@
const AVD_COMP *comp)
{
SaNameT dn;
- avsv_create_association_class_dn(&csi->cstype->name,
- &comp->comp_type->name, "safSupportedCsType", &dn);
+ const SaNameTWrapper cstype_name(csi->cstype->name);
+ const SaNameTWrapper comp_type_name(comp->comp_type->name);
+ avsv_create_association_class_dn(cstype_name,
+ comp_type_name, "safSupportedCsType", &dn);
AVD_CTCS_TYPE *ctcs_type = ctcstype_db->find(Amf::to_string(&dn));
return ctcs_type->saAmfCtCompCapability;
}
@@ -733,10 +739,17 @@
/* prepare the SU SI message. */
susi_msg = new AVSV_DND_MSG();
+ const SaNameTWrapper su_name(su->name);
+ SaNameTWrapper csi_name("");
+ SaNameTWrapper si_name("");
+
+ if (susi != AVD_SU_SI_REL_NULL) {
+ si_name.set(susi->si->name);
+ }
susi_msg->msg_type = AVSV_D2N_INFO_SU_SI_ASSIGN_MSG;
susi_msg->msg_info.d2n_su_si_assign.node_id = avnd->node_info.nodeId;
- susi_msg->msg_info.d2n_su_si_assign.su_name = su->name;
+ susi_msg->msg_info.d2n_su_si_assign.su_name = su_name;
susi_msg->msg_info.d2n_su_si_assign.msg_act = actn;
if (true == single_csi) {
@@ -748,7 +761,7 @@
/* Means we need to delete only this SU SI assignment
for
* this SU.
*/
- susi_msg->msg_info.d2n_su_si_assign.si_name =
susi->si->name;
+ susi_msg->msg_info.d2n_su_si_assign.si_name = si_name;
/* For only these options fill the comp CSI values. */
if (true == single_csi) {
@@ -758,7 +771,8 @@
compcsi_info = new AVSV_SUSI_ASGN();
compcsi_info->comp_name =
l_compcsi->comp->comp_info.name;
- compcsi_info->csi_name = l_compcsi->csi->name;
+ csi_name.set(l_compcsi->csi->name);
+ compcsi_info->csi_name = csi_name;
susi_msg->msg_info.d2n_su_si_assign.num_assigns
= 1;
susi_msg->msg_info.d2n_su_si_assign.list =
compcsi_info;
}
@@ -813,7 +827,7 @@
/* for modifications of a SU SI fill the SI name.
*/
- susi_msg->msg_info.d2n_su_si_assign.si_name =
susi->si->name;
+ susi_msg->msg_info.d2n_su_si_assign.si_name = si_name;
susi_msg->msg_info.d2n_su_si_assign.ha_state =
susi->state;
l_susi = susi;
@@ -837,7 +851,7 @@
/* for new assignments of a SU SI fill the SI name.
*/
- susi_msg->msg_info.d2n_su_si_assign.si_name = susi->si->name;
+ susi_msg->msg_info.d2n_su_si_assign.si_name = si_name;
susi_msg->msg_info.d2n_su_si_assign.ha_state = susi->state;
susi_msg->msg_info.d2n_su_si_assign.si_rank =
susi->si->saAmfSIRank;
@@ -902,7 +916,8 @@
compcsi_info = new AVSV_SUSI_ASGN();
compcsi_info->comp_name =
l_compcsi->comp->comp_info.name;
- compcsi_info->csi_name = l_compcsi->csi->name;
+ csi_name.set(l_compcsi->csi->name);
+ compcsi_info->csi_name = csi_name;
compcsi_info->csi_rank = l_compcsi->csi->rank;
compcsi_info->active_comp_dsc = trans_dsc;
compcsi_info->capability =
@@ -1108,12 +1123,12 @@
**************************************************************************/
uint32_t avd_snd_pg_upd_msg(AVD_CL_CB *cb,
AVD_AVND *node,
- AVD_COMP_CSI_REL *comp_csi,
SaAmfProtectionGroupChangesT change, SaNameT *csi_name)
+ AVD_COMP_CSI_REL *comp_csi,
SaAmfProtectionGroupChangesT change, const std::string& csi_name)
{
AVD_DND_MSG *pg_msg = 0;
uint32_t rc = NCSCC_RC_SUCCESS;
AVSV_D2N_PG_UPD_MSG_INFO *pg_msg_info = 0;
-
+ SaNameTWrapper temp_csi_name("");
TRACE_ENTER();
/* alloc the update msg */
@@ -1124,16 +1139,18 @@
/* populate the msg */
pg_msg->msg_type = AVSV_D2N_PG_UPD_MSG;
pg_msg_info->node_id = node->node_info.nodeId;
- pg_msg_info->is_csi_del = (csi_name) ? true : false;
+ pg_msg_info->is_csi_del = (csi_name.empty() == false) ? true : false;
if (false == pg_msg_info->is_csi_del) {
- pg_msg_info->csi_name = comp_csi->csi->name;
+ temp_csi_name.set(comp_csi->csi->name);
+ pg_msg_info->csi_name = temp_csi_name;
pg_msg_info->mem.member.compName =
comp_csi->comp->comp_info.name;
pg_msg_info->mem.member.haState = comp_csi->susi->state;
pg_msg_info->mem.member.rank = comp_csi->comp->su->saAmfSURank;
pg_msg_info->mem.change = change;
- } else
- pg_msg_info->csi_name = *csi_name;
-
+ } else {
+ temp_csi_name.set(csi_name);
+ pg_msg_info->csi_name = temp_csi_name;
+ }
/* send the msg to avnd */
TRACE("Sending %u to %x", AVSV_D2N_PG_UPD_MSG, node->node_info.nodeId);
@@ -1425,7 +1442,7 @@
for (std::map<uint32_t, AVD_AVND *>::const_iterator it =
node_id_db->begin();
it != node_id_db->end(); it++) {
AVD_AVND *node = it->second;
- fprintf(f, " dn: %s\n", node->name.value);
+ fprintf(f, " dn: %s\n", node->name.c_str());
fprintf(f, " saAmfNodeAdminState: %s\n",
avd_adm_state_name[node->saAmfNodeAdminState]);
fprintf(f, " saAmfNodeOperState: %s\n",
@@ -1442,7 +1459,7 @@
for (std::map<std::string, AVD_APP*>::const_iterator it =
app_db->begin();
it != app_db->end(); it++) {
const AVD_APP *app = it->second;
- fprintf(f, " dn: %s\n", app->name.value);
+ fprintf(f, " dn: %s\n", app->name.c_str());
fprintf(f, " saAmfApplicationAdminState: %s\n",
avd_adm_state_name[app->saAmfApplicationAdminState]);
fprintf(f, " saAmfApplicationCurrNumSGs: %u\n",
@@ -1453,9 +1470,9 @@
for (std::map<std::string, AVD_SI*>::const_iterator it = si_db->begin();
it != si_db->end(); it++) {
si = it->second;
- fprintf(f, " dn: %s\n", si->name.value);
+ fprintf(f, " dn: %s\n", si->name.c_str());
fprintf(f, " saAmfSIProtectedbySG: %s\n",
- si->saAmfSIProtectedbySG.value);
+ si->saAmfSIProtectedbySG.c_str());
fprintf(f, " saAmfSIAdminState: %s\n",
avd_adm_state_name[si->saAmfSIAdminState]);
fprintf(f, " saAmfSIAssignmentState: %s\n",
@@ -1470,7 +1487,7 @@
fprintf(f, " alarm_sent: %u\n", si->alarm_sent);
fprintf(f, " assigned_to_sus:\n");
for (susi = si->list_of_sisu; susi; susi = susi->si_next) {
- fprintf(f, " dn: %s\n", susi->su->name.value);
+ fprintf(f, " dn: %s\n", susi->su->name.c_str());
fprintf(f, " hastate: %s\n",
avd_ha_state[susi->state]);
fprintf(f, " fsm: %u\n", susi->fsm);
}
@@ -1480,12 +1497,12 @@
for (std::map<std::string, AVD_CSI*>::const_iterator it =
csi_db->begin();
it != csi_db->end(); it++) {
csi = it->second;
- fprintf(f, " dn: %s\n", csi->name.value);
+ fprintf(f, " dn: %s\n", csi->name.c_str());
fprintf(f, " rank: %u\n", csi->rank);
fprintf(f, " depends:\n");
AVD_CSI_DEPS *dep;
for (dep = csi->saAmfCSIDependencies; dep; dep =
dep->csi_dep_next)
- fprintf(f, " %s", dep->csi_dep_name_value.value);
+ fprintf(f, " %s", dep->csi_dep_name_value.c_str());
if (csi->saAmfCSIDependencies)
fprintf(f, "\n");
fprintf(f, " assigned_to_components:\n");
@@ -1499,7 +1516,7 @@
for (std::map<std::string, AVD_SG*>::const_iterator it = sg_db->begin();
it != sg_db->end(); it++) {
const AVD_SG *sg = it->second;
- fprintf(f, " dn: %s\n", sg->name.value);
+ fprintf(f, " dn: %s\n", sg->name.c_str());
fprintf(f, " saAmfSGAdminState: %s\n",
avd_adm_state_name[sg->saAmfSGAdminState]);
fprintf(f, " saAmfSGNumCurrAssignedSUs: %u\n",
@@ -1516,7 +1533,7 @@
for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin();
it != su_db->end(); it++) {
const AVD_SU *su = it->second;
- fprintf(f, " dn: %s\n", su->name.value);
+ fprintf(f, " dn: %s\n", su->name.c_str());
fprintf(f, " saAmfSUPreInstantiable: %u\n",
su->saAmfSUPreInstantiable);
fprintf(f, " saAmfSUOperState: %s\n",
avd_oper_state_name[su->saAmfSUOperState]);
@@ -1526,7 +1543,7 @@
avd_readiness_state_name[su->saAmfSuReadinessState]);
fprintf(f, " saAmfSUPresenceState: %s\n",
avd_pres_state_name[su->saAmfSUPresenceState]);
- fprintf(f, " saAmfSUHostedByNode: %s\n",
su->saAmfSUHostedByNode.value);
+ fprintf(f, " saAmfSUHostedByNode: %s\n",
su->saAmfSUHostedByNode.c_str());
fprintf(f, " saAmfSUNumCurrActiveSIs: %u\n",
su->saAmfSUNumCurrActiveSIs);
fprintf(f, " saAmfSUNumCurrStandbySIs: %u\n",
su->saAmfSUNumCurrStandbySIs);
fprintf(f, " saAmfSURestartCount: %u\n",
su->saAmfSURestartCount);
@@ -1534,7 +1551,7 @@
fprintf(f, " su_switch: %u\n", su->su_switch);
fprintf(f, " assigned_SIs:\n");
for (susi = su->list_of_susi; susi != nullptr; susi =
susi->su_next) {
- fprintf(f, " dn: %s\n", susi->si->name.value);
+ fprintf(f, " dn: %s\n", susi->si->name.c_str());
fprintf(f, " hastate: %s\n",
avd_ha_state[susi->state]);
fprintf(f, " fsm: %u\n", susi->fsm);
}
@@ -1552,15 +1569,15 @@
fprintf(f, " saAmfCompPresenceState: %s\n",
avd_pres_state_name[comp->saAmfCompPresenceState]);
fprintf(f, " saAmfCompRestartCount: %u\n",
comp->saAmfCompRestartCount);
- if (comp->saAmfCompCurrProxyName.length)
- fprintf(f, " saAmfCompCurrProxyName: %s\n",
comp->saAmfCompCurrProxyName.value);
+ if (comp->saAmfCompCurrProxyName.empty() == false)
+ fprintf(f, " saAmfCompCurrProxyName: %s\n",
comp->saAmfCompCurrProxyName.c_str());
}
fprintf(f, "Node Groups:\n");
for (std::map<std::string, AVD_AMF_NG*>::const_iterator it =
nodegroup_db->begin();
it != nodegroup_db->end(); it++) {
AVD_AMF_NG *ng = it->second;
- fprintf(f, " dn: %s\n", ng->name.value);
+ fprintf(f, " dn: %s\n", ng->name.c_str());
fprintf(f, " saAmfNGAdminState:
%s\n",avd_adm_state_name[ng->saAmfNGAdminState]);
}
@@ -1577,20 +1594,21 @@
*
* @return int
*/
-int avd_admin_op_msg_snd(const SaNameT *dn, AVSV_AMF_CLASS_ID class_id,
+int avd_admin_op_msg_snd(const std::string& dn, AVSV_AMF_CLASS_ID class_id,
SaAmfAdminOperationIdT opId, AVD_AVND *node)
{
AVD_CL_CB *cb = (AVD_CL_CB *)avd_cb;
AVD_DND_MSG *d2n_msg;
unsigned int rc = NCSCC_RC_SUCCESS;
+ const SaNameTWrapper temp_dn(dn);
- TRACE_ENTER2(" '%s' %u", dn->value, opId);
+ TRACE_ENTER2(" '%s' %u", dn.c_str(), opId);
d2n_msg = new AVSV_DND_MSG();
d2n_msg->msg_type = AVSV_D2N_ADMIN_OP_REQ_MSG;
d2n_msg->msg_info.d2n_admin_op_req_info.msg_id = ++(node->snd_msg_id);
- d2n_msg->msg_info.d2n_admin_op_req_info.dn = *dn;
+ d2n_msg->msg_info.d2n_admin_op_req_info.dn = temp_dn;
d2n_msg->msg_info.d2n_admin_op_req_info.class_id = class_id;
d2n_msg->msg_info.d2n_admin_op_req_info.oper_id = opId;
@@ -1612,22 +1630,24 @@
*
* @param dn
*/
-const char* avd_getparent(const char* dn)
+std::string avd_getparent(const std::string& dn)
{
- const char* parent = dn;
- const char* tmp_parent;
+ std::string::size_type start_pos;
+ std::string::size_type parent_pos;
/* Check if there exist any escaped RDN in the DN */
- tmp_parent = strrchr(dn, '\\');
- if (tmp_parent != nullptr) {
- parent = tmp_parent + 2;
+ start_pos = dn.find_last_of('\\');
+ if (start_pos == std::string::npos) {
+ start_pos = 0;
+ } else {
+ ++start_pos;
+ if (dn[start_pos] == ',') {
+ ++start_pos;
+ }
}
-
- if ((parent = strchr((char*)parent, ',')) != nullptr) {
- parent++;
- }
-
- return parent;
+
+ parent_pos = dn.find(',', start_pos);
+ return dn.substr(parent_pos + 1);
}
/**
@@ -1636,17 +1656,18 @@
*
* @return bool
*/
-bool object_exist_in_imm(const SaNameT *dn)
+bool object_exist_in_imm(const std::string& dn)
{
bool rc = false;
+ const SaNameTWrapper temp_dn(dn);
SaImmAccessorHandleT accessorHandle;
const SaImmAttrValuesT_2 **attributes;
SaImmAttrNameT attributeNames[] =
{const_cast<SaImmAttrNameT>("SaImmAttrClassName"), nullptr};
immutil_saImmOmAccessorInitialize(avd_cb->immOmHandle, &accessorHandle);
- if (immutil_saImmOmAccessorGet_2(accessorHandle, dn, attributeNames,
-
(SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK)
+ if (immutil_saImmOmAccessorGet_2(accessorHandle, temp_dn,
attributeNames,
+ (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK)
rc = true;
immutil_saImmOmAccessorFinalize(accessorHandle);
@@ -1874,45 +1895,71 @@
/**
* Gets child DN from an association DN
- * "safDepend=safSi=SC2-NoRed\,safApp=OpenSAF,safSi=SC-2N,safApp=OpenSAF"
+ * "safDepend=safSi=SC2-NoRed\\,safApp=OpenSAF,safSi=SC-2N,safApp=OpenSAF"
+ * child DN is "safSi=SC2-NoRed,safApp=OpenSAF"
* @param ass_dn association DN [in]
* @param child_dn [out]
* @return 0 at success
*/
- int get_child_dn_from_ass_dn(const SaNameT *ass_dn, SaNameT *child_dn)
+ int get_child_dn_from_ass_dn(const std::string& ass_dn, std::string& child_dn)
{
- SaNameT _ass_dn = *ass_dn;
-
+ std::string::size_type comma_pos;
+ std::string::size_type equal_pos;
+
/* find first comma and step past it */
- char *p = strchr((char *)_ass_dn.value, ',');
- if (p == nullptr)
+ comma_pos = ass_dn.find(',');
+ if (comma_pos == std::string::npos)
return -1;
- p++;
-
/* find second comma, an error if not found */
- p = strchr(p, ',');
- if (p == nullptr)
+ comma_pos = ass_dn.find(',', comma_pos + 1);
+ if (comma_pos == std::string::npos)
return -1;
- *p = '\0'; /* null terminate at comma before parent */
-
/* Skip past the RDN tag */
- p = strchr((char *)_ass_dn.value, '=');
- if (p == nullptr)
+ equal_pos = ass_dn.find('=');
+ if (equal_pos == std::string::npos)
return -1;
- p++;
-
/* copy and skip back slash */
- int i = 0;
- while (*p) {
- if (*p != '\\')
- child_dn->value[i++] = *p;
- p++;
- }
-
- child_dn->value[i] = '\0';
- child_dn->length = i;
- return 0;
+ child_dn = ass_dn.substr(equal_pos + 1, comma_pos - equal_pos - 1);
+ child_dn.erase(std::remove(child_dn.begin(), child_dn.end(), '\\'),
child_dn.end());
+
+ return 0;
}
+
+int get_parent_dn_from_ass_dn(const std::string& ass_dn, std::string&
parent_dn)
+{
+ std::string::size_type comma_pos;
+
+ /* find first comma and step past it */
+ comma_pos = ass_dn.find(',');
+ if (comma_pos == std::string::npos)
+ return -1;
+
+ /* find second comma and step past it */
+ comma_pos = ass_dn.find(',', comma_pos + 1);
+ if (comma_pos == std::string::npos)
+ return -1;
+
+ parent_dn = ass_dn.substr(comma_pos + 1);
+
+ return 0;
+}
+
+/**
+ * Initialize a DN by searching for needle in haystack
+ * @param haystack
+ * @param dn
+ * @param needle
+ */
+void avsv_sanamet_init(const std::string& haystack, std::string& dn, const
char *needle)
+{
+ TRACE_ENTER();
+
+ std::string::size_type pos = haystack.find(needle);
+ dn = haystack.substr(pos);
+ TRACE("dn %s", dn.c_str());
+
+ TRACE_LEAVE();
+}
------------------------------------------------------------------------------
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