osaf/libs/common/amf/Makefile.am | 1 +
osaf/libs/common/amf/d2nmsg.c | 301 +++++++++++++++++++++-
osaf/libs/common/amf/include/Makefile.am | 1 +
osaf/libs/common/amf/include/amf.h | 2 +-
osaf/libs/common/amf/include/amf_db_template.h | 146 ++++++++++
osaf/libs/common/amf/include/amf_n2avamsg.h | 2 +
osaf/libs/common/amf/include/amf_util.h | 8 +-
osaf/libs/common/amf/n2avaedu.c | 1 +
osaf/libs/common/amf/n2avamsg.c | 332 ++++++++++++++++++++++++-
osaf/libs/common/amf/util.c | 246 +++++------------
10 files changed, 832 insertions(+), 208 deletions(-)
diff --git a/osaf/libs/common/amf/Makefile.am b/osaf/libs/common/amf/Makefile.am
--- a/osaf/libs/common/amf/Makefile.am
+++ b/osaf/libs/common/amf/Makefile.am
@@ -23,6 +23,7 @@ SUBDIRS = include
noinst_LTLIBRARIES = libamf_common.la
libamf_common_la_CPPFLAGS = \
+ -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/amf/include
diff --git a/osaf/libs/common/amf/d2nmsg.c b/osaf/libs/common/amf/d2nmsg.c
--- a/osaf/libs/common/amf/d2nmsg.c
+++ b/osaf/libs/common/amf/d2nmsg.c
@@ -25,6 +25,7 @@
#include "amf.h"
#include "amf_d2nmsg.h"
+#include "osaf_extended_name.h"
/*****************************************************************************
* Function: free_d2n_su_msg_info
@@ -47,6 +48,7 @@ static void free_d2n_su_msg_info(AVSV_DN
while (su_msg->msg_info.d2n_reg_su.su_list != NULL) {
su_info = su_msg->msg_info.d2n_reg_su.su_list;
su_msg->msg_info.d2n_reg_su.su_list = su_info->next;
+ osaf_extended_name_free(&su_info->name);
free(su_info);
}
}
@@ -70,9 +72,6 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
{
AVSV_SU_INFO_MSG *s_su_info, *d_su_info;
- memset(d_su_msg, '\0', sizeof(AVSV_DND_MSG));
-
- memcpy(d_su_msg, s_su_msg, sizeof(AVSV_DND_MSG));
d_su_msg->msg_info.d2n_reg_su.su_list = NULL;
s_su_info = s_su_msg->msg_info.d2n_reg_su.su_list;
@@ -85,6 +84,7 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
}
memcpy(d_su_info, s_su_info, sizeof(AVSV_SU_INFO_MSG));
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_su_info->name),
&d_su_info->name);
d_su_info->next = d_su_msg->msg_info.d2n_reg_su.su_list;
d_su_msg->msg_info.d2n_reg_su.su_list = d_su_info;
@@ -114,14 +114,24 @@ static uint32_t cpy_d2n_su_msg(AVSV_DND_
static void free_d2n_susi_msg_info(AVSV_DND_MSG *susi_msg)
{
AVSV_SUSI_ASGN *compcsi_info;
+ uint16_t i;
while (susi_msg->msg_info.d2n_su_si_assign.list != NULL) {
compcsi_info = susi_msg->msg_info.d2n_su_si_assign.list;
susi_msg->msg_info.d2n_su_si_assign.list = compcsi_info->next;
if (compcsi_info->attrs.list != NULL) {
+ for (i = 0; i < compcsi_info->attrs.number; i++) {
+
osaf_extended_name_free(&compcsi_info->attrs.list[i].name);
+
osaf_extended_name_free(&compcsi_info->attrs.list[i].value);
+ free(compcsi_info->attrs.list[i].string_ptr);
+ compcsi_info->attrs.list[i].string_ptr = NULL;
+ }
free(compcsi_info->attrs.list);
compcsi_info->attrs.list = NULL;
}
+ osaf_extended_name_free(&compcsi_info->active_comp_name);
+ osaf_extended_name_free(&compcsi_info->comp_name);
+ osaf_extended_name_free(&compcsi_info->csi_name);
free(compcsi_info);
}
}
@@ -144,10 +154,13 @@ static void free_d2n_susi_msg_info(AVSV_
static uint32_t cpy_d2n_susi_msg(AVSV_DND_MSG *d_susi_msg, AVSV_DND_MSG
*s_susi_msg)
{
AVSV_SUSI_ASGN *s_compcsi_info, *d_compcsi_info;
+ uint16_t i;
- memset(d_susi_msg, '\0', sizeof(AVSV_DND_MSG));
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_susi_msg->msg_info.d2n_su_si_assign.si_name),
+ &d_susi_msg->msg_info.d2n_su_si_assign.si_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_susi_msg->msg_info.d2n_su_si_assign.su_name),
+ &d_susi_msg->msg_info.d2n_su_si_assign.su_name);
- memcpy(d_susi_msg, s_susi_msg, sizeof(AVSV_DND_MSG));
d_susi_msg->msg_info.d2n_su_si_assign.list = NULL;
s_compcsi_info = s_susi_msg->msg_info.d2n_su_si_assign.list;
@@ -160,6 +173,9 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
}
memcpy(d_compcsi_info, s_compcsi_info, sizeof(AVSV_SUSI_ASGN));
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->active_comp_name),
&d_compcsi_info->active_comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->comp_name),
&d_compcsi_info->comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->csi_name),
&d_compcsi_info->csi_name);
if ((s_compcsi_info->attrs.list != NULL) &&
(s_compcsi_info->attrs.number > 0)) {
d_compcsi_info->attrs.list =
@@ -171,6 +187,17 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
}
memcpy(d_compcsi_info->attrs.list,
s_compcsi_info->attrs.list,
(s_compcsi_info->attrs.number *
sizeof(*d_compcsi_info->attrs.list)));
+ for (i = 0; i < d_compcsi_info->attrs.number; i++) {
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->attrs.list[i].name),
+ &d_compcsi_info->attrs.list[i].name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_compcsi_info->attrs.list[i].value),
+ &d_compcsi_info->attrs.list[i].value);
+ if (s_compcsi_info->attrs.list[i].string_ptr !=
NULL) {
+
strcpy(d_compcsi_info->attrs.list[i].string_ptr,
s_compcsi_info->attrs.list[i].string_ptr);
+ }
+ }
+
+
}
d_compcsi_info->next =
d_susi_msg->msg_info.d2n_su_si_assign.list;
d_susi_msg->msg_info.d2n_su_si_assign.list = d_compcsi_info;
@@ -200,9 +227,14 @@ static uint32_t cpy_d2n_susi_msg(AVSV_DN
static void free_d2n_pg_msg_info(AVSV_DND_MSG *pg_msg)
{
AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *info =
&pg_msg->msg_info.d2n_pg_track_act_rsp;
+ uint16_t i;
- if (info->mem_list.numberOfItems)
+ if (info->mem_list.numberOfItems) {
+ for (i = 0; i< info->mem_list.numberOfItems; i++) {
+
osaf_extended_name_free(&info->mem_list.notification[i].member.compName);
+ }
free(info->mem_list.notification);
+ }
info->mem_list.notification = 0;
info->mem_list.numberOfItems = 0;
@@ -228,11 +260,10 @@ static uint32_t cpy_d2n_pg_msg(AVSV_DND_
{
AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *d_info =
&d_pg_msg->msg_info.d2n_pg_track_act_rsp;
AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *s_info =
&s_pg_msg->msg_info.d2n_pg_track_act_rsp;
+ uint16_t i;
- memset(d_pg_msg, '\0', sizeof(AVSV_DND_MSG));
-
- /* copy the common contents */
- memcpy(d_pg_msg, s_pg_msg, sizeof(AVSV_DND_MSG));
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_pg_msg->msg_info.d2n_pg_track_act_rsp.csi_name),
+ &d_pg_msg->msg_info.d2n_pg_track_act_rsp.csi_name);
if (!s_info->mem_list.numberOfItems)
return NCSCC_RC_SUCCESS;
@@ -248,6 +279,13 @@ static uint32_t cpy_d2n_pg_msg(AVSV_DND_
memcpy(d_info->mem_list.notification, s_info->mem_list.notification,
sizeof(SaAmfProtectionGroupNotificationT) *
s_info->mem_list.numberOfItems);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_info->mem_list.notification->member.compName),
+ &d_info->mem_list.notification->member.compName);
+ for (i = 0; i < d_info->mem_list.numberOfItems; i++){
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_info->mem_list.notification[i].member.compName),
+
&d_info->mem_list.notification[i].member.compName);
+ }
+
return NCSCC_RC_SUCCESS;
}
@@ -273,9 +311,6 @@ static uint32_t cpy_n2d_nd_sisu_state_in
const AVSV_SU_STATE_MSG *src_su;
AVSV_SU_STATE_MSG *dst_su;
- memset(dst, '\0', sizeof(AVSV_DND_MSG));
-
- memcpy(dst, src, sizeof(AVSV_DND_MSG));
dst->msg_info.n2d_nd_sisu_state_info.sisu_list = NULL;
dst->msg_info.n2d_nd_sisu_state_info.su_list = NULL;
@@ -290,6 +325,12 @@ static uint32_t cpy_n2d_nd_sisu_state_in
dst_sisu->next = dst->msg_info.n2d_nd_sisu_state_info.sisu_list;
dst->msg_info.n2d_nd_sisu_state_info.sisu_list = dst_sisu;
+ // Copy the SaNameT
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_sisu->safSU),
+
&dst_sisu->safSU);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_sisu->safSI),
+
&dst_sisu->safSI);
+
// now go to the next sisu info in source
src_sisu = src_sisu->next;
}
@@ -305,6 +346,10 @@ static uint32_t cpy_n2d_nd_sisu_state_in
dst_su->next = dst->msg_info.n2d_nd_sisu_state_info.su_list;
dst->msg_info.n2d_nd_sisu_state_info.su_list = dst_su;
+ // Copy SaNameT
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_su->safSU),
+
&dst_su->safSU);
+
// now go to the next su info in source
src_su = src_su->next;
}
@@ -333,9 +378,6 @@ static uint32_t cpy_n2d_nd_csicomp_state
const AVSV_COMP_STATE_MSG *src_comp;
AVSV_COMP_STATE_MSG *dst_comp;
- memset(dst, '\0', sizeof(AVSV_DND_MSG));
-
- memcpy(dst, src, sizeof(AVSV_DND_MSG));
dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list = NULL;
dst->msg_info.n2d_nd_csicomp_state_info.comp_list = NULL;
@@ -350,6 +392,12 @@ static uint32_t cpy_n2d_nd_csicomp_state
dst_csicomp->next =
dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list;
dst->msg_info.n2d_nd_csicomp_state_info.csicomp_list =
dst_csicomp;
+ // Copy SaNameT
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_csicomp->safComp),
+
&dst_csicomp->safComp);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_csicomp->safCSI),
+
&dst_csicomp->safCSI);
+
// now go to the next csicomp info in source
src_csicomp = src_csicomp->next;
}
@@ -365,6 +413,10 @@ static uint32_t cpy_n2d_nd_csicomp_state
dst_comp->next =
dst->msg_info.n2d_nd_csicomp_state_info.comp_list;
dst->msg_info.n2d_nd_csicomp_state_info.comp_list = dst_comp;
+ // Copy SaNameT
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&src_comp->safComp),
+
&dst_comp->safComp);
+
// now go to the next comp info in source
src_comp = src_comp->next;
}
@@ -372,6 +424,75 @@ static uint32_t cpy_n2d_nd_csicomp_state
return NCSCC_RC_SUCCESS;
}
+/*****************************************************************************
+ * Function: free_d2n_comp_msg_info
+ *
+ * Purpose: This function frees the d2n COMP message contents.
+ *
+ * Input: comp_msg - Pointer to the COMP message contents to be freed.
+ *
+ * Returns: None
+ *
+ * NOTES: none.
+ *
+ *
+ **************************************************************************/
+
+static void free_d2n_comp_msg_info(AVSV_DND_MSG *comp_msg)
+{
+ AVSV_COMP_INFO_MSG *comp_info;
+
+ while (comp_msg->msg_info.d2n_reg_comp.list != NULL) {
+ comp_info = comp_msg->msg_info.d2n_reg_comp.list;
+ comp_msg->msg_info.d2n_reg_comp.list = comp_info->next;
+ osaf_extended_name_free(&comp_info->comp_info.name);
+ free(comp_info);
+ }
+}
+
+/*****************************************************************************
+ * Function: cpy_d2n_comp_msg
+ *
+ * Purpose: This function makes a copy of the d2n COMP message.
+ *
+ * Input: d_comp_msg - Pointer to the COMP message to be copied to.
+ * s_comp_msg - Pointer to the COMP message to be copied.
+ *
+ * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
+ *
+ * NOTES: none.
+ *
+ *
+ **************************************************************************/
+
+static uint32_t cpy_d2n_comp_msg(AVSV_DND_MSG *d_comp_msg, AVSV_DND_MSG
*s_comp_msg)
+{
+ AVSV_COMP_INFO_MSG *s_comp_info, *d_comp_info;
+
+ d_comp_msg->msg_info.d2n_reg_comp.list = NULL;
+
+ s_comp_info = s_comp_msg->msg_info.d2n_reg_comp.list;
+
+ while (s_comp_info != NULL) {
+ d_comp_info = malloc(sizeof(AVSV_COMP_INFO_MSG));
+ if (d_comp_info == NULL) {
+ free_d2n_comp_msg_info(d_comp_msg);
+ return NCSCC_RC_FAILURE;
+ }
+
+ memcpy(d_comp_info, s_comp_info, sizeof(AVSV_COMP_INFO_MSG));
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_comp_info->comp_info.name),
+
&d_comp_info->comp_info.name);
+ d_comp_info->next = d_comp_msg->msg_info.d2n_reg_comp.list;
+ d_comp_msg->msg_info.d2n_reg_comp.list = d_comp_info;
+
+ /* go to the next comp info in source */
+ s_comp_info = s_comp_info->next;
+ }
+
+ return NCSCC_RC_SUCCESS;
+}
+
/****************************************************************************
Name : avsv_dnd_msg_free
@@ -399,11 +520,34 @@ void avsv_dnd_msg_free(AVSV_DND_MSG *msg
case AVSV_D2N_REG_SU_MSG:
free_d2n_su_msg_info(msg);
break;
+ case AVSV_D2N_REG_COMP_MSG:
+ free_d2n_comp_msg_info(msg);
+ break;
case AVSV_D2N_INFO_SU_SI_ASSIGN_MSG:
free_d2n_susi_msg_info(msg);
+
osaf_extended_name_free(&msg->msg_info.d2n_su_si_assign.si_name);
+
osaf_extended_name_free(&msg->msg_info.d2n_su_si_assign.su_name);
break;
case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
free_d2n_pg_msg_info(msg);
+
osaf_extended_name_free(&msg->msg_info.d2n_pg_track_act_rsp.csi_name);
+ break;
+ case AVSV_D2N_PG_UPD_MSG:
+ osaf_extended_name_free(&msg->msg_info.d2n_pg_upd.csi_name);
+
osaf_extended_name_free(&msg->msg_info.d2n_pg_upd.mem.member.compName);
+ break;
+ case AVSV_D2N_OPERATION_REQUEST_MSG:
+
osaf_extended_name_free(&msg->msg_info.d2n_op_req.param_info.name);
+
osaf_extended_name_free(&msg->msg_info.d2n_op_req.param_info.name_sec);
+ break;
+ case AVSV_D2N_PRESENCE_SU_MSG:
+ osaf_extended_name_free(&msg->msg_info.d2n_prsc_su.su_name);
+ break;
+ case AVSV_D2N_COMP_VALIDATION_RESP_MSG:
+
osaf_extended_name_free(&msg->msg_info.d2n_comp_valid_resp_info.comp_name);
+ break;
+ case AVSV_D2N_ADMIN_OP_REQ_MSG:
+
osaf_extended_name_free(&msg->msg_info.d2n_admin_op_req_info.dn);
break;
case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
avsv_free_n2d_nd_sisu_state_info(msg);
@@ -411,6 +555,37 @@ void avsv_dnd_msg_free(AVSV_DND_MSG *msg
case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
avsv_free_n2d_nd_csicomp_state_info(msg);
break;
+ case AVSV_N2D_NODE_UP_MSG:
+ osaf_extended_name_free(&msg->msg_info.n2d_node_up.node_name);
+ break;
+ case AVSV_N2D_REG_SU_MSG:
+ osaf_extended_name_free(&msg->msg_info.n2d_reg_su.su_name);
+ break;
+ case AVSV_N2D_REG_COMP_MSG:
+ osaf_extended_name_free(&msg->msg_info.n2d_reg_comp.comp_name);
+ break;
+ case AVSV_N2D_OPERATION_STATE_MSG:
+ osaf_extended_name_free(&msg->msg_info.n2d_opr_state.su_name);
+ break;
+ case AVSV_N2D_INFO_SU_SI_ASSIGN_MSG:
+
osaf_extended_name_free(&msg->msg_info.n2d_su_si_assign.su_name);
+
osaf_extended_name_free(&msg->msg_info.n2d_su_si_assign.si_name);
+ break;
+ case AVSV_N2D_PG_TRACK_ACT_MSG:
+ osaf_extended_name_free(&msg->msg_info.n2d_pg_trk_act.csi_name);
+ break;
+ case AVSV_N2D_OPERATION_REQUEST_MSG:
+
osaf_extended_name_free(&msg->msg_info.n2d_op_req.param_info.name);
+
osaf_extended_name_free(&msg->msg_info.n2d_op_req.param_info.name_sec);
+ break;
+ case AVSV_N2D_DATA_REQUEST_MSG:
+
osaf_extended_name_free(&msg->msg_info.n2d_data_req.param_info.name);
+
osaf_extended_name_free(&msg->msg_info.n2d_data_req.param_info.name_sec);
+ break;
+ case AVSV_N2D_COMP_VALIDATION_MSG:
+
osaf_extended_name_free(&msg->msg_info.n2d_comp_valid_info.comp_name);
+
osaf_extended_name_free(&msg->msg_info.n2d_comp_valid_info.proxy_comp_name);
+ break;
default:
break;
}
@@ -441,23 +616,96 @@ uint32_t avsv_dnd_msg_copy(AVSV_DND_MSG
return NCSCC_RC_FAILURE;
}
+ // Copy the raw content
+ memset(dmsg, '\0', sizeof(AVSV_DND_MSG));
+ memcpy(dmsg, smsg, sizeof(AVSV_DND_MSG));
+
/* these messages have information list in them copy them
* along with copying the contents.
*/
switch (smsg->msg_type) {
case AVSV_D2N_REG_SU_MSG:
return cpy_d2n_su_msg(dmsg, smsg);
+ case AVSV_D2N_REG_COMP_MSG:
+ return cpy_d2n_comp_msg(dmsg, smsg);
case AVSV_D2N_INFO_SU_SI_ASSIGN_MSG:
return cpy_d2n_susi_msg(dmsg, smsg);
case AVSV_D2N_PG_TRACK_ACT_RSP_MSG:
return cpy_d2n_pg_msg(dmsg, smsg);
+ case AVSV_D2N_PG_UPD_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_pg_upd.csi_name),
+
&dmsg->msg_info.d2n_pg_upd.csi_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_pg_upd.mem.member.compName),
+
&dmsg->msg_info.d2n_pg_upd.mem.member.compName);
+ break;
+ case AVSV_D2N_OPERATION_REQUEST_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_op_req.param_info.name),
+
&dmsg->msg_info.d2n_op_req.param_info.name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_op_req.param_info.name_sec),
+
&dmsg->msg_info.d2n_op_req.param_info.name_sec);
+ break;
+ case AVSV_D2N_PRESENCE_SU_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_prsc_su.su_name),
+
&dmsg->msg_info.d2n_prsc_su.su_name);
+ break;
+ case AVSV_D2N_COMP_VALIDATION_RESP_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_comp_valid_resp_info.comp_name),
+
&dmsg->msg_info.d2n_comp_valid_resp_info.comp_name);
+ break;
+ case AVSV_D2N_ADMIN_OP_REQ_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.d2n_admin_op_req_info.dn),
+
&dmsg->msg_info.d2n_admin_op_req_info.dn);
+ break;
case AVSV_N2D_ND_SISU_STATE_INFO_MSG:
return cpy_n2d_nd_sisu_state_info(dmsg, smsg);
case AVSV_N2D_ND_CSICOMP_STATE_INFO_MSG:
return cpy_n2d_nd_csicomp_state_info(dmsg, smsg);
+ case AVSV_N2D_NODE_UP_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_node_up.node_name),
+
&dmsg->msg_info.n2d_node_up.node_name);
+ break;
+ case AVSV_N2D_REG_SU_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_reg_su.su_name),
+
&dmsg->msg_info.n2d_reg_su.su_name);
+ break;
+ case AVSV_N2D_REG_COMP_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_reg_comp.comp_name),
+
&dmsg->msg_info.n2d_reg_comp.comp_name);
+ break;
+ case AVSV_N2D_OPERATION_STATE_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_opr_state.su_name),
+
&dmsg->msg_info.n2d_opr_state.su_name);
+ break;
+ case AVSV_N2D_INFO_SU_SI_ASSIGN_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_su_si_assign.su_name),
+
&dmsg->msg_info.n2d_su_si_assign.su_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_su_si_assign.si_name),
+
&dmsg->msg_info.n2d_su_si_assign.si_name);
+ break;
+ case AVSV_N2D_PG_TRACK_ACT_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_pg_trk_act.csi_name),
+
&dmsg->msg_info.n2d_pg_trk_act.csi_name);
+ break;
+ case AVSV_N2D_OPERATION_REQUEST_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_op_req.param_info.name),
+
&dmsg->msg_info.n2d_op_req.param_info.name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_op_req.param_info.name_sec),
+
&dmsg->msg_info.n2d_op_req.param_info.name_sec);
+ break;
+ case AVSV_N2D_DATA_REQUEST_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_data_req.param_info.name),
+
&dmsg->msg_info.n2d_data_req.param_info.name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_data_req.param_info.name_sec),
+
&dmsg->msg_info.n2d_data_req.param_info.name_sec);
+ break;
+ case AVSV_N2D_COMP_VALIDATION_MSG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_comp_valid_info.comp_name),
+
&dmsg->msg_info.n2d_comp_valid_info.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->msg_info.n2d_comp_valid_info.proxy_comp_name),
+
&dmsg->msg_info.n2d_comp_valid_info.proxy_comp_name);
+ break;
default:
- /* copy only the contents */
- memcpy(dmsg, smsg, sizeof(AVSV_DND_MSG));
+ /* Already copied above */
break;
}
@@ -501,7 +749,11 @@ void avsv_free_n2d_nd_csicomp_state_info
TRACE("%u CSICOMP records to free", info->num_csicomp);
while (csicomp_ptr != NULL) {
- TRACE("freeing %s:%s", (char*)csicomp_ptr->safCSI.value,
(char*)csicomp_ptr->safComp.value);
+ TRACE("freeing %s:%s",
osaf_extended_name_borrow(&csicomp_ptr->safCSI),
+ osaf_extended_name_borrow(&csicomp_ptr->safComp));
+ // Free SaNameT
+ osaf_extended_name_free(&csicomp_ptr->safCSI);
+ osaf_extended_name_free(&csicomp_ptr->safComp);
next_csicomp_ptr = csicomp_ptr->next;
free(csicomp_ptr);
csicomp_ptr = next_csicomp_ptr;
@@ -516,7 +768,8 @@ void avsv_free_n2d_nd_csicomp_state_info
TRACE("%u COMP records to free", info->num_comp);
while (comp_ptr != NULL) {
- TRACE("freeing %s", (char*)comp_ptr->safComp.value);
+ TRACE("freeing %s",
osaf_extended_name_borrow(&comp_ptr->safComp));
+ osaf_extended_name_free(&comp_ptr->safComp);
next_comp_ptr = comp_ptr->next;
free(comp_ptr);
comp_ptr = next_comp_ptr;
@@ -569,7 +822,10 @@ void avsv_free_n2d_nd_sisu_state_info(AV
TRACE("%u SISU records to free", info->num_sisu);
while (sisu_ptr != NULL) {
- TRACE("freeing %s:%s", (char*)sisu_ptr->safSI.value,
(char*)sisu_ptr->safSU.value);
+ TRACE("freeing %s:%s",
osaf_extended_name_borrow(&sisu_ptr->safSI),
+ osaf_extended_name_borrow(&sisu_ptr->safSU));
+ osaf_extended_name_free(&sisu_ptr->safSI);
+ osaf_extended_name_free(&sisu_ptr->safSU);
next_sisu_ptr = sisu_ptr->next;
free(sisu_ptr);
sisu_ptr = next_sisu_ptr;
@@ -584,7 +840,8 @@ void avsv_free_n2d_nd_sisu_state_info(AV
TRACE("%u SU records to free", info->num_su);
while (su_ptr != NULL) {
- TRACE("freeing %s", (char*)su_ptr->safSU.value);
+ TRACE("freeing %s", osaf_extended_name_borrow(&su_ptr->safSU));
+ osaf_extended_name_free(&su_ptr->safSU);
next_su_ptr = su_ptr->next;
free(su_ptr);
su_ptr = next_su_ptr;
diff --git a/osaf/libs/common/amf/include/Makefile.am
b/osaf/libs/common/amf/include/Makefile.am
--- a/osaf/libs/common/amf/include/Makefile.am
+++ b/osaf/libs/common/amf/include/Makefile.am
@@ -26,6 +26,7 @@ noinst_HEADERS = \
amf_eduutil.h \
amf.h \
amf_n2avaedu.h \
+ amf_db_template.h \
amf_n2avamsg.h \
amf_si_assign.h \
amf_util.h \
diff --git a/osaf/libs/common/amf/include/amf.h
b/osaf/libs/common/amf/include/amf.h
--- a/osaf/libs/common/amf/include/amf.h
+++ b/osaf/libs/common/amf/include/amf.h
@@ -48,5 +48,5 @@
#include "ncs_hdl_pub.h"
#include "ncs_main_papi.h"
#include "ncssysf_def.h"
-
+#include "osaf_extended_name.h"
#endif
diff --git a/osaf/libs/common/amf/include/amf_db_template.h
b/osaf/libs/common/amf/include/amf_db_template.h
new file mode 100644
--- /dev/null
+++ b/osaf/libs/common/amf/include/amf_db_template.h
@@ -0,0 +1,146 @@
+/* -*- OpenSAF -*-
+ *
+ * (C) Copyright 2014 The OpenSAF Foundation
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ * Author(s): Ericsson AB
+ *
+ */
+#ifndef DB_TEMPLATE_H
+#define DB_TEMPLATE_H
+
+#include <osaf_extended_name.h>
+#include <map>
+#include <string>
+#include "saAis.h"
+#include "ncsgl_defs.h"
+
+//
+class Amf {
+public:
+ static std::string to_string(const SaNameT *name) {
+ return osaf_extended_name_borrow(name);
+ }
+};
+
+class SaNameTWrapper {
+public:
+ SaNameTWrapper(const std::string& str) {
+ osaf_extended_name_alloc(str.c_str(), &name);
+ };
+ ~SaNameTWrapper() {
+ clear();
+ };
+
+ // note: SaNameT* will become invalid if this SaNameTWrapper is destroyed
+ operator const SaNameT*() const {
+ return &name;
+ };
+
+ // note: SaNameT will become invalid if this SaNameTWrapper is destroyed
+ operator const SaNameT() const {
+ return name;
+ }
+
+ void set(const std::string& str) {
+ osaf_extended_name_free(&name);
+ osaf_extended_name_alloc(str.c_str(), &name);
+ };
+
+ void clear() {
+ osaf_extended_name_free(&name);
+ };
+
+ SaNameTWrapper(const SaNameTWrapper&) = delete;
+ SaNameTWrapper& operator=(const SaNameTWrapper&) = delete;
+ SaNameTWrapper() = delete;
+
+private:
+ SaNameT name{};
+};
+
+//
+template <typename Key, typename T>
+class AmfDb {
+ public:
+ unsigned int insert(const Key &key, T *obj);
+ void erase(const Key &key);
+ T *find(const Key &name);
+ T *findNext(const Key &name);
+
+ typedef std::map<Key, T*> AmfDbMap;
+ typedef typename AmfDbMap::const_iterator const_iterator;
+ typedef typename AmfDbMap::iterator iterator;
+ typedef typename AmfDbMap::const_reverse_iterator const_reverse_iterator;
+
+ const_iterator begin() const {return db.begin();}
+ const_iterator end() const {return db.end();}
+ typename AmfDbMap::size_type size() const {return db.size();}
+ const_reverse_iterator rbegin() const {return db.rbegin();}
+ const_reverse_iterator rend() const {return db.rend();}
+
+ iterator erase(const iterator &it) {return db.erase(it);}
+
+ iterator begin() {return db.begin();}
+ iterator end() {return db.end();}
+
+ const_iterator cbegin() const {return db.cbegin();}
+ const_iterator cend() const {return db.cend();}
+
+ private:
+ AmfDbMap db;
+};
+
+//
+template <typename Key, typename T>
+unsigned int AmfDb<Key, T>::insert(const Key &key, T *obj) {
+ osafassert(obj);
+
+ if (db.insert(std::make_pair(key, obj)).second) {
+ return 1; // NCSCC_RC_SUCCESS
+ }
+ else {
+ return 2; // Duplicate (NCSCC_RC_FAILURE)
+ }
+ }
+
+//
+template <typename Key, typename T>
+void AmfDb<Key, T>::erase(const Key &key) {
+ db.erase(key);
+}
+
+//
+template <typename Key, typename T>
+T *AmfDb<Key, T>::find(const Key &key) {
+ typename AmfDbMap::iterator it = db.find(key);
+ if (it == db.end())
+ return 0;
+ else
+ return it->second;
+}
+
+template <typename Key, typename T>
+T * AmfDb<Key, T>::findNext(const Key &key) {
+ typename AmfDbMap::iterator it = db.find(key);
+ if (it == db.end()) {
+ return 0;
+ }
+
+ it++;
+ if (it == db.end())
+ return 0;
+ else {
+ return it->second;
+ }
+}
+
+#endif /* DB_TEMPLATE_H */
diff --git a/osaf/libs/common/amf/include/amf_n2avamsg.h
b/osaf/libs/common/amf/include/amf_n2avamsg.h
--- a/osaf/libs/common/amf/include/amf_n2avamsg.h
+++ b/osaf/libs/common/amf/include/amf_n2avamsg.h
@@ -103,8 +103,10 @@ void avsv_nda_ava_msg_content_free(AVSV_
uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_AVA_MSG *, AVSV_NDA_AVA_MSG *);
uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_INFO **, AVSV_AMF_CBK_INFO *);
+uint32_t avsv_amf_api_copy(AVSV_AMF_API_INFO *, AVSV_AMF_API_INFO *);
uint32_t avsv_amf_csi_attr_list_copy(SaAmfCSIAttributeListT *, const
SaAmfCSIAttributeListT *);
void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO *);
+void avsv_amf_api_free(AVSV_AMF_API_INFO *);
void avsv_amf_csi_attr_list_free(SaAmfCSIAttributeListT *);
uint32_t avsv_amf_csi_attr_convert(AVSV_AMF_CBK_INFO *);
diff --git a/osaf/libs/common/amf/include/amf_util.h
b/osaf/libs/common/amf/include/amf_util.h
--- a/osaf/libs/common/amf/include/amf_util.h
+++ b/osaf/libs/common/amf/include/amf_util.h
@@ -66,22 +66,18 @@ extern "C" {
/* macro to determine if name is null */
#define m_AVSV_SA_NAME_IS_NULL(n) avsv_sa_name_is_null(&(n))
-extern unsigned int avsv_cpy_SU_DN_from_DN(SaNameT *, SaNameT *);
-extern unsigned int avsv_cpy_node_DN_from_DN(SaNameT *, SaNameT *);
-extern bool avsv_is_external_DN(SaNameT *);
-extern unsigned int avsv_cpy_SI_DN_from_DN(SaNameT *, SaNameT *);
-
+extern int avsv_cmp_horder_sanamet(const SaNameT* , const SaNameT *);
extern unsigned int avsv_dblist_uns32_cmp(unsigned char *, unsigned char *);
extern unsigned int avsv_dblist_uns64_cmp(unsigned char *, unsigned char *);
extern unsigned int avsv_dblist_saname_net_cmp(unsigned char *, unsigned char
*);
extern unsigned int avsv_dblist_saname_cmp(unsigned char *, unsigned char *);
extern unsigned int avsv_dblist_sahckey_cmp(unsigned char *, unsigned char *);
+extern unsigned int avsv_dblist_sastring_cmp(unsigned char *, unsigned char *);
extern bool avsv_sa_name_is_null(SaNameT *);
extern void avsv_create_association_class_dn(const SaNameT *child_dn, const
SaNameT *parent_dn,
const char *rdn_tag, SaNameT *dn);
-extern void avsv_sanamet_init(const SaNameT *haystack, SaNameT *dn, const char
*needle);
extern AVSV_COMP_TYPE_VAL
avsv_amfcompcategory_to_avsvcomptype(SaAmfCompCategoryT saf_comp_category);
diff --git a/osaf/libs/common/amf/n2avaedu.c b/osaf/libs/common/amf/n2avaedu.c
--- a/osaf/libs/common/amf/n2avaedu.c
+++ b/osaf/libs/common/amf/n2avaedu.c
@@ -630,6 +630,7 @@ int avsv_api_resp_info_test_type_fnc(NCS
case AVSV_AMF_SEL_OBJ_GET:
case AVSV_AMF_DISPATCH:
case AVSV_AMF_COMP_NAME_GET:
+ case AVSV_AMF_COMP_TERM_RSP:
return LCL_JMP_OFFSET_AVSV_N2A_OTHER_API_RESP_INFO;
default:
diff --git a/osaf/libs/common/amf/n2avamsg.c b/osaf/libs/common/amf/n2avamsg.c
--- a/osaf/libs/common/amf/n2avamsg.c
+++ b/osaf/libs/common/amf/n2avamsg.c
@@ -36,6 +36,7 @@
#include "amf_amfparam.h"
#include "amf_n2avamsg.h"
#include "amf_nd2ndmsg.h"
+#include "osaf_extended_name.h"
/****************************************************************************
Name : avsv_nda_ava_msg_free
@@ -78,10 +79,19 @@ void avsv_nd2nd_avnd_msg_free(AVSV_ND2ND
if (!msg)
return;
+ if (osaf_is_an_extended_name(&msg->comp_name)) {
+ osaf_extended_name_free(&msg->comp_name);
+ }
+
if (AVND_AVND_AVA_MSG == msg->type) {
/* free the message content after all these are AvA content. */
avsv_nda_ava_msg_free(msg->info.msg);
+ } else if (AVND_AVND_CBK_DEL == msg->type) {
+ if (osaf_is_an_extended_name(&msg->info.cbk_del.comp_name)) {
+ osaf_extended_name_free(&msg->info.cbk_del.comp_name);
+ }
}
+
/* free the message */
free(msg);
@@ -107,7 +117,7 @@ void avsv_nda_ava_msg_content_free(AVSV_
switch (msg->type) {
case AVSV_AVA_API_MSG:
- case AVSV_AVND_AMF_API_RESP_MSG:
+ avsv_amf_api_free(&msg->info.api_info);
break;
case AVSV_AVND_AMF_CBK_MSG:
@@ -117,6 +127,11 @@ void avsv_nda_ava_msg_content_free(AVSV_
}
break;
+ case AVSV_AVND_AMF_API_RESP_MSG:
+ if (msg->info.api_resp_info.type == AVSV_AMF_HA_STATE_GET) {
+
osaf_extended_name_free(&msg->info.api_resp_info.param.ha_get.comp_name);
+
osaf_extended_name_free(&msg->info.api_resp_info.param.ha_get.csi_name);
+ }
default:
break;
}
@@ -147,8 +162,13 @@ uint32_t avsv_ndnd_avnd_msg_copy(AVSV_ND
/* copy the common fields */
memcpy(dmsg, smsg, sizeof(AVSV_ND2ND_AVND_MSG));
- if (AVND_AVND_AVA_MSG == smsg->type)
+ osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->comp_name),
&dmsg->comp_name);
+ if (AVND_AVND_AVA_MSG == smsg->type) {
rc = avsv_nda_ava_msg_copy(dmsg->info.msg, smsg->info.msg);
+ } else if (AVND_AVND_CBK_DEL == smsg->type) {
+ if (osaf_is_an_extended_name(&smsg->info.cbk_del.comp_name))
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.cbk_del.comp_name),
&dmsg->info.cbk_del.comp_name);
+ }
done:
return rc;
@@ -180,7 +200,17 @@ uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_
switch (smsg->type) {
case AVSV_AVA_API_MSG:
+ rc = avsv_amf_api_copy(&dmsg->info.api_info,
&smsg->info.api_info);
+ break;
+
case AVSV_AVND_AMF_API_RESP_MSG:
+ if (smsg->info.api_resp_info.type == AVSV_AMF_HA_STATE_GET) {
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.api_resp_info.param.ha_get.comp_name),
+
&dmsg->info.api_resp_info.param.ha_get.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&smsg->info.api_resp_info.param.ha_get.csi_name),
+
&dmsg->info.api_resp_info.param.ha_get.csi_name);
+ }
+
break;
case AVSV_AVND_AMF_CBK_MSG:
@@ -210,6 +240,7 @@ uint32_t avsv_nda_ava_msg_copy(AVSV_NDA_
uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_INFO **o_dcbk, AVSV_AMF_CBK_INFO *scbk)
{
uint32_t rc = NCSCC_RC_SUCCESS;
+ uint16_t i;
if (!o_dcbk || !scbk)
return NCSCC_RC_FAILURE;
@@ -226,13 +257,28 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
switch (scbk->type) {
case AVSV_AMF_HC:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.hc.comp_name),
&(*o_dcbk)->param.hc.comp_name);
+ break;
+
case AVSV_AMF_COMP_TERM:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.comp_term.comp_name),
&(*o_dcbk)->param.comp_term.comp_name);
+ break;
+
case AVSV_AMF_CSI_REM:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_rem.comp_name),
&(*o_dcbk)->param.csi_rem.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_rem.csi_name),
&(*o_dcbk)->param.csi_rem.csi_name);
+ break;
+
case AVSV_AMF_PXIED_COMP_INST:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pxied_comp_inst.comp_name),
&(*o_dcbk)->param.pxied_comp_inst.comp_name);
+ break;
+
case AVSV_AMF_PXIED_COMP_CLEAN:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pxied_comp_clean.comp_name),
&(*o_dcbk)->param.pxied_comp_clean.comp_name);
break;
case AVSV_AMF_PG_TRACK:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pg_track.csi_name),
&(*o_dcbk)->param.pg_track.csi_name);
/* memset notify buffer */
memset(&(*o_dcbk)->param.pg_track.buf, 0,
sizeof(SaAmfProtectionGroupNotificationBufferT));
@@ -248,11 +294,17 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
memcpy((*o_dcbk)->param.pg_track.buf.notification,
scbk->param.pg_track.buf.notification,
sizeof(SaAmfProtectionGroupNotificationT) *
scbk->param.pg_track.buf.numberOfItems);
+ for (i = 0; i < scbk->param.pg_track.buf.numberOfItems;
i++) {
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.pg_track.buf.notification[i].member.compName),
+
&(*o_dcbk)->param.pg_track.buf.notification[i].member.compName);
+ }
(*o_dcbk)->param.pg_track.buf.numberOfItems =
scbk->param.pg_track.buf.numberOfItems;
}
break;
case AVSV_AMF_CSI_SET:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.comp_name),
&(*o_dcbk)->param.csi_set.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiName),
&(*o_dcbk)->param.csi_set.csi_desc.csiName);
/* memset avsv & amf csi attr lists */
memset(&(*o_dcbk)->param.csi_set.attrs, 0,
sizeof(AVSV_CSI_ATTRS));
memset(&(*o_dcbk)->param.csi_set.csi_desc.csiAttr, 0,
sizeof(SaAmfCSIAttributeListT));
@@ -268,9 +320,32 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
memcpy((*o_dcbk)->param.csi_set.attrs.list,
scbk->param.csi_set.attrs.list,
sizeof(AVSV_ATTR_NAME_VAL) *
scbk->param.csi_set.attrs.number);
+
+ for (i = 0; i < scbk->param.csi_set.attrs.number; i++) {
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.attrs.list[i].name),
+
&(*o_dcbk)->param.csi_set.attrs.list[i].name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.attrs.list[i].value),
+
&(*o_dcbk)->param.csi_set.attrs.list[i].value);
+ }
+
(*o_dcbk)->param.csi_set.attrs.number =
scbk->param.csi_set.attrs.number;
}
+ /* Copy csi state description */
+ if (scbk->param.csi_set.ha == SA_AMF_HA_ACTIVE) {
+ if
(osaf_is_an_extended_name(&scbk->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName))
{
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName),
+
&(*o_dcbk)->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName);
+ }
+ }
+
+ if (scbk->param.csi_set.ha == SA_AMF_HA_STANDBY) {
+ if
(osaf_is_an_extended_name(&scbk->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName))
{
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&scbk->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName),
+
&(*o_dcbk)->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName);
+ }
+ }
+
/* copy the amf csi attr list */
if (scbk->param.csi_set.csi_desc.csiAttr.number) {
rc =
avsv_amf_csi_attr_list_copy(&scbk->param.csi_set.csi_desc.csiAttr,
@@ -304,29 +379,65 @@ uint32_t avsv_amf_cbk_copy(AVSV_AMF_CBK_
******************************************************************************/
void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO *cbk_info)
{
+ uint16_t i;
+
if (!cbk_info)
return;
switch (cbk_info->type) {
case AVSV_AMF_HC:
+ osaf_extended_name_free(&cbk_info->param.hc.comp_name);
+ break;
+
case AVSV_AMF_COMP_TERM:
+ osaf_extended_name_free(&cbk_info->param.comp_term.comp_name);
+ break;
+
case AVSV_AMF_CSI_REM:
+ osaf_extended_name_free(&cbk_info->param.csi_rem.comp_name);
+ osaf_extended_name_free(&cbk_info->param.csi_rem.csi_name);
+ break;
+
case AVSV_AMF_PXIED_COMP_INST:
+
osaf_extended_name_free(&cbk_info->param.pxied_comp_inst.comp_name);
+ break;
+
case AVSV_AMF_PXIED_COMP_CLEAN:
+
osaf_extended_name_free(&cbk_info->param.pxied_comp_clean.comp_name);
break;
case AVSV_AMF_PG_TRACK:
+ osaf_extended_name_free(&cbk_info->param.pg_track.csi_name);
/* free the notify buffer */
- if (cbk_info->param.pg_track.buf.numberOfItems)
+ if (cbk_info->param.pg_track.buf.numberOfItems) {
+ for (i = 0; i <
cbk_info->param.pg_track.buf.numberOfItems; i++) {
+
osaf_extended_name_free(&cbk_info->param.pg_track.buf.notification[i].member.compName);
+ }
free(cbk_info->param.pg_track.buf.notification);
+ }
break;
case AVSV_AMF_CSI_SET:
+ osaf_extended_name_free(&cbk_info->param.csi_set.comp_name);
/* free the avsv csi attr list */
- if (cbk_info->param.csi_set.attrs.number)
+ if (cbk_info->param.csi_set.attrs.number) {
+ if (cbk_info->param.csi_set.attrs.list) {
+ for (i = 0; i <
cbk_info->param.csi_set.attrs.number; i++)
+ {
+
osaf_extended_name_free(&cbk_info->param.csi_set.attrs.list[i].name);
+
osaf_extended_name_free(&cbk_info->param.csi_set.attrs.list[i].value);
+ }
+ }
free(cbk_info->param.csi_set.attrs.list);
-
+ }
/* free the amf csi attr list */
+
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiName);
+ if (cbk_info->param.csi_set.ha == SA_AMF_HA_ACTIVE) {
+
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiStateDescriptor.activeDescriptor.activeCompName);
+ }
+ if (cbk_info->param.csi_set.ha == SA_AMF_HA_STANDBY) {
+
osaf_extended_name_free(&cbk_info->param.csi_set.csi_desc.csiStateDescriptor.standbyDescriptor.activeCompName);
+ }
avsv_amf_csi_attr_list_free(&cbk_info->param.csi_set.csi_desc.csiAttr);
break;
@@ -336,11 +447,214 @@ void avsv_amf_cbk_free(AVSV_AMF_CBK_INFO
/* free the cbk-info ptr */
free(cbk_info);
+ cbk_info = NULL;
return;
}
/****************************************************************************
+ Name : avsv_amf_api_free
+
+ Description : This routine frees api information.
+
+ Arguments : api_info - ptr to the api info
+
+ Return Values : None.
+
+ Notes : None.
+******************************************************************************/
+void avsv_amf_api_free(AVSV_AMF_API_INFO *api_info)
+{
+ if (!api_info)
+ return;
+
+ switch (api_info->type) {
+ case AVSV_AMF_FINALIZE:
+ osaf_extended_name_free(&api_info->param.finalize.comp_name);
+ break;
+
+ case AVSV_AMF_COMP_REG:
+ osaf_extended_name_free(&api_info->param.reg.comp_name);
+ osaf_extended_name_free(&api_info->param.reg.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_COMP_UNREG:
+ osaf_extended_name_free(&api_info->param.unreg.comp_name);
+ osaf_extended_name_free(&api_info->param.unreg.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_PM_START:
+ osaf_extended_name_free(&api_info->param.pm_start.comp_name);
+ break;
+
+ case AVSV_AMF_PM_STOP:
+ osaf_extended_name_free(&api_info->param.pm_stop.comp_name);
+ break;
+
+ case AVSV_AMF_HC_START:
+ osaf_extended_name_free(&api_info->param.hc_start.comp_name);
+
osaf_extended_name_free(&api_info->param.hc_start.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_HC_STOP:
+ osaf_extended_name_free(&api_info->param.hc_stop.comp_name);
+
osaf_extended_name_free(&api_info->param.hc_stop.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_HC_CONFIRM:
+ osaf_extended_name_free(&api_info->param.hc_confirm.comp_name);
+
osaf_extended_name_free(&api_info->param.hc_confirm.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_CSI_QUIESCING_COMPLETE:
+ osaf_extended_name_free(&api_info->param.csiq_compl.comp_name);
+ break;
+
+ case AVSV_AMF_HA_STATE_GET:
+ osaf_extended_name_free(&api_info->param.ha_get.comp_name);
+ osaf_extended_name_free(&api_info->param.ha_get.csi_name);
+ break;
+
+ case AVSV_AMF_PG_START:
+ osaf_extended_name_free(&api_info->param.pg_start.csi_name);
+ break;
+
+ case AVSV_AMF_PG_STOP:
+ osaf_extended_name_free(&api_info->param.pg_stop.csi_name);
+ break;
+
+ case AVSV_AMF_ERR_REP:
+ osaf_extended_name_free(&api_info->param.err_rep.err_comp);
+ break;
+
+ case AVSV_AMF_ERR_CLEAR:
+ osaf_extended_name_free(&api_info->param.err_clear.comp_name);
+ break;
+
+ case AVSV_AMF_RESP:
+ osaf_extended_name_free(&api_info->param.resp.comp_name);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/****************************************************************************
+ Name : avsv_amf_api_copy
+
+ Description : This routine copies api information.
+
+ Arguments : api_info - ptr to the api info
+
+ Return Values : None.
+
+ Notes : None.
+******************************************************************************/
+uint32_t avsv_amf_api_copy(AVSV_AMF_API_INFO *d_api_info, AVSV_AMF_API_INFO
*s_api_info)
+{
+ uint32_t rc = NCSCC_RC_SUCCESS;
+
+ if (!d_api_info || !s_api_info)
+ return NCSCC_RC_FAILURE;
+
+ switch (s_api_info->type) {
+ case AVSV_AMF_FINALIZE:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.finalize.comp_name),
+ &s_api_info->param.finalize.comp_name);
+ break;
+
+ case AVSV_AMF_COMP_REG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.reg.comp_name),
+ &d_api_info->param.reg.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.reg.proxy_comp_name),
+ &d_api_info->param.reg.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_COMP_UNREG:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.unreg.comp_name),
+ &d_api_info->param.unreg.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.unreg.proxy_comp_name),
+ &d_api_info->param.unreg.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_PM_START:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pm_start.comp_name),
+ &d_api_info->param.pm_start.comp_name);
+ break;
+
+ case AVSV_AMF_PM_STOP:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pm_stop.comp_name),
+ &d_api_info->param.pm_stop.comp_name);
+ break;
+
+ case AVSV_AMF_HC_START:
+
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_start.comp_name),
+ &d_api_info->param.ha_get.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_start.proxy_comp_name),
+ &d_api_info->param.hc_start.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_HC_STOP:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_stop.comp_name),
+ &d_api_info->param.hc_stop.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_stop.proxy_comp_name),
+ &d_api_info->param.hc_stop.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_HC_CONFIRM:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_confirm.comp_name),
+ &d_api_info->param.hc_confirm.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.hc_confirm.proxy_comp_name),
+ &d_api_info->param.hc_confirm.proxy_comp_name);
+ break;
+
+ case AVSV_AMF_CSI_QUIESCING_COMPLETE:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.csiq_compl.comp_name),
+ &d_api_info->param.csiq_compl.comp_name);
+ break;
+
+ case AVSV_AMF_HA_STATE_GET:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.ha_get.comp_name),
+ &d_api_info->param.ha_get.comp_name);
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.ha_get.csi_name),
+ &d_api_info->param.ha_get.csi_name);
+ break;
+
+ case AVSV_AMF_PG_START:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pg_start.csi_name),
+ &d_api_info->param.pg_start.csi_name);
+ break;
+
+ case AVSV_AMF_PG_STOP:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.pg_stop.csi_name),
+ &d_api_info->param.pg_stop.csi_name);
+ break;
+
+ case AVSV_AMF_ERR_REP:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.err_rep.err_comp),
+ &d_api_info->param.err_rep.err_comp);
+ break;
+
+ case AVSV_AMF_ERR_CLEAR:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.err_clear.comp_name),
+ &d_api_info->param.err_clear.comp_name);
+ break;
+
+ case AVSV_AMF_RESP:
+
osaf_extended_name_alloc(osaf_extended_name_borrow(&s_api_info->param.resp.comp_name),
+ &d_api_info->param.resp.comp_name);
+ break;
+
+ default:
+ break;
+ }
+
+ return rc;
+}
+
+/****************************************************************************
Name : avsv_amf_csi_attr_list_copy
Description : This routine copies the csi attribute list.
@@ -462,7 +776,7 @@ uint32_t avsv_amf_csi_attr_convert(AVSV_
for (cnt = 0; cnt < avsv_attrs->number; cnt++) {
/* alloc memory for attr name & value */
- amf_attrs->attr[cnt].attrName =
malloc(avsv_attrs->list[cnt].name.length + 1);
+ amf_attrs->attr[cnt].attrName =
malloc(osaf_extended_name_length(&avsv_attrs->list[cnt].name) + 1);
if (!amf_attrs->attr[cnt].attrName) {
free(amf_attrs->attr[cnt].attrName);
goto done;
@@ -476,11 +790,11 @@ uint32_t avsv_amf_csi_attr_convert(AVSV_
}
/* copy the attr name & value */
- memcpy(amf_attrs->attr[cnt].attrName,
avsv_attrs->list[cnt].name.value,
- avsv_attrs->list[cnt].name.length);
+ memcpy(amf_attrs->attr[cnt].attrName,
osaf_extended_name_borrow(&avsv_attrs->list[cnt].name),
+ osaf_extended_name_length(&avsv_attrs->list[cnt].name));
memcpy(amf_attrs->attr[cnt].attrValue,
avsv_attrs->list[cnt].string_ptr,
strlen(avsv_attrs->list[cnt].string_ptr));
- *(amf_attrs->attr[cnt].attrName +
avsv_attrs->list[cnt].name.length) = '\0';
+ *(amf_attrs->attr[cnt].attrName +
osaf_extended_name_length(&avsv_attrs->list[cnt].name)) = '\0';
*(amf_attrs->attr[cnt].attrValue +
strlen(avsv_attrs->list[cnt].string_ptr)) = '\0';
/* increment the attr name-val pair cnt that is copied */
diff --git a/osaf/libs/common/amf/util.c b/osaf/libs/common/amf/util.c
--- a/osaf/libs/common/amf/util.c
+++ b/osaf/libs/common/amf/util.c
@@ -32,149 +32,14 @@
*/
#include "amf.h"
+#include "osaf_extended_name.h"
-/*****************************************************************************
- * Function: avsv_cpy_SU_DN_from_DN
- *
- * Purpose: This function copies the SU DN from the given DN and places
- * it in the provided buffer.
- *
- * Input: d_su_dn - Pointer to the SaNameT where the SU DN should be copied.
- * s_dn_name - Pointer to the SaNameT that contains the SU DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- *
- **************************************************************************/
+int avsv_cmp_horder_sanamet(const SaNameT* sanamet1, const SaNameT *sanamet2)
+{
+ size_t len1 = osaf_extended_name_length(sanamet1);
+ size_t len2 = osaf_extended_name_length(sanamet2);
-uint32_t avsv_cpy_SU_DN_from_DN(SaNameT *d_su_dn, SaNameT *s_dn_name)
-{
- char *tmp = NULL;
-
- memset(d_su_dn, 0, sizeof(SaNameT));
-
- /* SU DN name is SU name + NODE name */
-
- /* First get the SU name */
- tmp = strstr((char*)s_dn_name->value, "safSu");
-
- /* It might be external SU. */
- if (NULL == tmp)
- tmp = strstr((char*)s_dn_name->value, "safEsu");
-
- if (!tmp)
- return NCSCC_RC_FAILURE;
-
- if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
- strcpy((char*)d_su_dn->value, tmp);
-
- /* Fill the length and return the pointer */
- d_su_dn->length = strlen((char*)d_su_dn->value);
- } else
- return NCSCC_RC_FAILURE;
-
- return NCSCC_RC_SUCCESS;
-}
-
-/*****************************************************************************
- * Function: avsv_cpy_node_DN_from_DN
- *
- * Purpose: This function copies the node DN from the given DN and places
- * it in the provided buffer.
- *
- * Input: d_node_dn - Pointer to the SaNameT where the node DN should be
copied.
- * s_dn_name - Pointer to the SaNameT that contains the node DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- *
- **************************************************************************/
-
-uint32_t avsv_cpy_node_DN_from_DN(SaNameT *d_node_dn, SaNameT *s_dn_name)
-{
- char *tmp = NULL;
-
- memset(d_node_dn, 0, sizeof(SaNameT));
-
- /* get the node name */
- tmp = strstr((char*)s_dn_name->value, "safNode");
-
- if (!tmp)
- return NCSCC_RC_FAILURE;
-
- if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
- strcpy((char*)d_node_dn->value, tmp);
-
- /* Fill the length and return the pointer */
- d_node_dn->length = strlen((char*)d_node_dn->value);
- } else
- return NCSCC_RC_FAILURE;
-
- return NCSCC_RC_SUCCESS;
-}
-
-/*****************************************************************************
- * Function: avsv_is_external_DN
- *
- * Purpose: This function verifies if the DN has externalsuname token in it.
- * If yes it returns true. This routine will be used for identifying
- * the external SUs and components.
- *
- * Input: dn_name - Pointer to the SaNameT that contains the DN.
- *
- * Returns: false/TRUE
- *
- * NOTES: none.
- *
- *
- **************************************************************************/
-
-bool avsv_is_external_DN(SaNameT *dn_name)
-{
- return false;
-}
-
-/*****************************************************************************
- * Function: avsv_cpy_SI_DN_from_DN
- *
- * Purpose: This function copies the SI DN from the given DN and places
- * it in the provided buffer.
- *
- * Input: d_si_dn - Pointer to the SaNameT where the SI DN should be copied.
- * s_dn_name - Pointer to the SaNameT that contains the SI DN.
- *
- * Returns: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
- *
- * NOTES: none.
- *
- *
- **************************************************************************/
-
-uint32_t avsv_cpy_SI_DN_from_DN(SaNameT *d_si_dn, SaNameT *s_dn_name)
-{
- char *tmp = NULL;
-
- memset(d_si_dn, 0, sizeof(SaNameT));
-
- /* get the si name */
- tmp = strstr((char*)s_dn_name->value, "safSi");
-
- if (!tmp)
- return NCSCC_RC_FAILURE;
-
- if (strlen(tmp) < SA_MAX_NAME_LENGTH) {
- strcpy((char*)d_si_dn->value, tmp);
-
- /* Fill the length and return the pointer */
- d_si_dn->length = strlen((char*)d_si_dn->value);
- } else
- return NCSCC_RC_FAILURE;
-
- return NCSCC_RC_SUCCESS;
+ return (len1 > len2 ? 1 : len1 < len2 ? -1 :
memcmp(osaf_extended_name_borrow(sanamet1),
osaf_extended_name_borrow(sanamet2), len1));
}
/****************************************************************************
@@ -250,7 +115,7 @@ uint32_t avsv_dblist_saname_cmp(uint8_t
name1_net = *((SaNameT *)key1);
name2_net = *((SaNameT *)key2);
- i = m_CMP_HORDER_SANAMET(name1_net, name2_net);
+ i = avsv_cmp_horder_sanamet(&name1_net, &name2_net);
return ((i == 0) ? 0 : ((i > 0) ? 1 : 2));
}
@@ -298,9 +163,9 @@ bool avsv_sa_name_is_null(SaNameT *name)
{
SaNameT null_name;
- memset(&null_name, 0, sizeof(SaNameT));
+ osaf_extended_name_clear(&null_name);
- if (!m_CMP_HORDER_SANAMET(*name, null_name))
+ if (!avsv_cmp_horder_sanamet(name, &null_name))
return true;
else
return false;
@@ -316,44 +181,58 @@ bool avsv_sa_name_is_null(SaNameT *name)
void avsv_create_association_class_dn(const SaNameT *child_dn, const SaNameT
*parent_dn,
const char *rdn_tag, SaNameT *dn)
{
- char *p = (char*) dn->value;
+ size_t parent_dn_len = 0;
+ size_t child_dn_len = 0;
+ size_t rdn_tag_len = 0;
+ SaConstStringT child_dn_ptr = 0;
+ SaConstStringT parent_dn_ptr = 0;
+ int num_of_commas_in_child_dn = 0;
+
+ if (child_dn) {
+ child_dn_len = osaf_extended_name_length(child_dn);
+ child_dn_ptr = osaf_extended_name_borrow(child_dn);
+
+ const char* p_tmp = child_dn_ptr;
+ while(*p_tmp) {
+ if(*p_tmp++ == ',') num_of_commas_in_child_dn++;
+ }
+
+ }
+ if (parent_dn) {
+ parent_dn_len = osaf_extended_name_length(parent_dn);
+ parent_dn_ptr = osaf_extended_name_borrow(parent_dn);
+ }
+
+ if (rdn_tag) {
+ rdn_tag_len = strlen(rdn_tag);
+ }
+
+ // The + 3 is for, 1. rdn_tag equal char 2. child parent separation
comma char and 3. terminating null char
+ size_t buf_len = child_dn_len + parent_dn_len + rdn_tag_len +
num_of_commas_in_child_dn + 3;
+ char *buf = (char*) calloc(1, buf_len);
+ char *p = buf;
int i;
- memset(dn, 0, sizeof(SaNameT));
-
- p += sprintf((char*)dn->value, "%s=", rdn_tag);
+ if (rdn_tag) {
+ p += snprintf(buf, buf_len, "%s=", rdn_tag);
+ }
/* copy child DN and escape commas */
- for (i = 0; i < child_dn->length; i++) {
- if (child_dn->value[i] == ',')
+ for (i = 0; i < child_dn_len; i++) {
+ if (child_dn_ptr[i] == ',')
*p++ = 0x5c; /* backslash */
- *p++ = child_dn->value[i];
+ *p++ = child_dn_ptr[i];
}
if (parent_dn != NULL) {
*p++ = ',';
- strcpy(p, (char*)parent_dn->value);
+ strcpy(p, parent_dn_ptr);
}
- dn->length = strlen((char*)dn->value);
-}
-
-/**
- * Initialize a DN by searching for needle in haystack
- * @param haystack
- * @param dn
- * @param needle
- */
-void avsv_sanamet_init(const SaNameT *haystack, SaNameT *dn, const char
*needle)
-{
- char *p;
-
- memset(dn, 0, sizeof(SaNameT));
- p = strstr((char*)haystack->value, needle);
- osafassert(p);
- dn->length = strlen(p);
- memcpy(dn->value, p, dn->length);
+ if (dn) {
+ osaf_extended_name_steal(buf, dn);
+ }
}
/**
@@ -416,3 +295,30 @@ AVSV_COMP_TYPE_VAL avsv_amfcompcategory_
return avsv_comp_type;
}
+/****************************************************************************
+ Name : avsv_dblist_sastring_cmp
+
+ Description : This routine compares the SaStringT keys. It is used by DLL
+ library.
+
+ Arguments : key1 - ptr to the 1st key
+ key2 - ptr to the 2nd key
+
+ Return Values : 0, if keys are equal
+ 1, if key1 is greater than key2
+ 2, if key1 is lesser than key2
+
+ Notes : None.
+******************************************************************************/
+uint32_t avsv_dblist_sastring_cmp(uint8_t *key1, uint8_t *key2)
+{
+ int i = 0;
+ SaStringT str1, str2;
+
+ str1 = (SaStringT)key1;
+ str2 = (SaStringT)key2;
+
+ i = strcmp(str1, str2);
+
+ return ((i ==0) ? 0: ((i>0) ? 1 : 2));
+}
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel