osaf/services/saf/amf/amfd/ckpt_dec.cc | 68 +++++++---------
osaf/services/saf/amf/amfd/ckpt_edu.cc | 59 --------------
osaf/services/saf/amf/amfd/ckpt_enc.cc | 77 +++++++-----------
osaf/services/saf/amf/amfd/include/ckpt.h | 3 +
osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc | 43 ++++++++++
5 files changed, 105 insertions(+), 145 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/ckpt_dec.cc
b/osaf/services/saf/amf/amfd/ckpt_dec.cc
--- a/osaf/services/saf/amf/amfd/ckpt_dec.cc
+++ b/osaf/services/saf/amf/amfd/ckpt_dec.cc
@@ -605,6 +605,23 @@
return status;
}
+void decode_siass(NCS_UBAID *ub,
+ AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt,
+ const uint16_t peer_version)
+{
+ osaf_decode_sanamet(ub, &su_si_ckpt->su_name);
+ osaf_decode_sanamet(ub, &su_si_ckpt->si_name);
+ osaf_decode_uint32(ub, reinterpret_cast<uint32_t*>(&su_si_ckpt->state));
+ osaf_decode_uint32(ub, &su_si_ckpt->fsm);
+ if (peer_version >= AVD_MBCSV_SUB_PART_VERSION_3) {
+ bool csi_add_rem;
+ osaf_decode_bool(ub, &csi_add_rem);
+ su_si_ckpt->csi_add_rem = static_cast<SaBoolT>(csi_add_rem);
+ osaf_decode_sanamet(ub, &su_si_ckpt->comp_name);
+ osaf_decode_sanamet(ub, &su_si_ckpt->csi_name);
+ };
+}
+
/****************************************************************************\
* Function: dec_siass
*
@@ -621,14 +638,10 @@
\**************************************************************************/
static uint32_t dec_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
{
- uint32_t status = NCSCC_RC_SUCCESS;
- AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt;
- AVSV_SU_SI_REL_CKPT_MSG dec_su_si_ckpt;
- EDU_ERR ederror = static_cast<EDU_ERR>(0);
+ AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt;
TRACE_ENTER2("i_action '%u'", dec->i_action);
- su_si_ckpt = &dec_su_si_ckpt;
/*
* Check for the action type (whether it is add, rmv or update) and act
* accordingly. If it is add then create new element, if it is update
@@ -638,34 +651,23 @@
switch (dec->i_action) {
case NCS_MBCSV_ACT_ADD:
case NCS_MBCSV_ACT_UPDATE:
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &dec->i_uba, EDP_OP_TYPE_DEC, (AVSV_SU_SI_REL_CKPT_MSG
**)&su_si_ckpt,
- &ederror, dec->i_peer_version);
+ decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version);
break;
case NCS_MBCSV_ACT_RMV:
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &dec->i_uba, EDP_OP_TYPE_DEC,
(AVSV_SU_SI_REL_CKPT_MSG **)&su_si_ckpt,
- &ederror, dec->i_peer_version);
+ decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version);
break;
default:
osafassert(0);
}
- if (status != NCSCC_RC_SUCCESS) {
- LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, ederror);
- return status;
- }
-
- avd_ckpt_siass(cb, su_si_ckpt, dec);
-
- /* If update is successful, update async update count */
- if (NCSCC_RC_SUCCESS == status)
- cb->async_updt_cnt.siass_updt++;
-
- TRACE_LEAVE2("status '%u'", status);
- return status;
+ avd_ckpt_siass(cb, &su_si_ckpt, dec);
+
+ cb->async_updt_cnt.siass_updt++;
+
+ TRACE_LEAVE();
+ return NCSCC_RC_SUCCESS;
}
/****************************************************************************\
@@ -2489,14 +2491,10 @@
static uint32_t dec_cs_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec, uint32_t
num_of_obj)
{
uint32_t status = NCSCC_RC_SUCCESS;
- AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt;
- AVSV_SU_SI_REL_CKPT_MSG dec_su_si_ckpt;
- EDU_ERR ederror = static_cast<EDU_ERR>(0);
+ AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt;
uint32_t count = 0;
- TRACE_ENTER();
-
- su_si_ckpt = &dec_su_si_ckpt;
+ TRACE_ENTER2("i_action '%u'", dec->i_action);
/*
* Walk through the entire list and send the entire list data.
@@ -2505,14 +2503,8 @@
* in the same update.
*/
for (count = 0; count < num_of_obj; count++) {
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &dec->i_uba, EDP_OP_TYPE_DEC,
(AVSV_SU_SI_REL_CKPT_MSG **)&su_si_ckpt,
- &ederror, dec->i_peer_version);
- if (status != NCSCC_RC_SUCCESS) {
- LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__,
ederror);
- }
-
- status = avd_ckpt_siass(cb, su_si_ckpt, dec);
+ decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version);
+ status = avd_ckpt_siass(cb, &su_si_ckpt, dec);
if (status != NCSCC_RC_SUCCESS) {
return NCSCC_RC_FAILURE;
diff --git a/osaf/services/saf/amf/amfd/ckpt_edu.cc
b/osaf/services/saf/amf/amfd/ckpt_edu.cc
--- a/osaf/services/saf/amf/amfd/ckpt_edu.cc
+++ b/osaf/services/saf/amf/amfd/ckpt_edu.cc
@@ -61,10 +61,6 @@
if (rc != NCSCC_RC_SUCCESS)
goto error;
- rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl, avsv_edp_ckpt_msg_siass, &err);
- if (rc != NCSCC_RC_SUCCESS)
- goto error;
-
rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl,
avsv_edp_ckpt_msg_async_updt_cnt, &err);
if (rc != NCSCC_RC_SUCCESS)
goto error;
@@ -243,61 +239,6 @@
/*****************************************************************************
- PROCEDURE NAME: avsv_edp_ckpt_msg_siass
-
- DESCRIPTION: EDU program handler for "AVD_SU_SI_REL" data. This
- function is invoked by EDU for performing encode/decode
- operation on "AVD_SU_SI_REL" data.
-
- RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
-
-*****************************************************************************/
-uint32_t avsv_edp_ckpt_msg_siass(EDU_HDL *hdl, EDU_TKN *edu_tkn,
- NCSCONTEXT ptr, uint32_t *ptr_data_len,
- EDU_BUF_ENV *buf_env, EDP_OP_TYPE op, EDU_ERR
*o_err)
-{
- uint32_t rc = NCSCC_RC_SUCCESS;
- AVSV_SU_SI_REL_CKPT_MSG *struct_ptr = nullptr, **d_ptr = nullptr;
- uint16_t base_ver = AVD_MBCSV_SUB_PART_VERSION_3;
-
- EDU_INST_SET avsv_ckpt_msg_su_si_rel_rules[] = {
- {EDU_START, avsv_edp_ckpt_msg_siass, 0, 0, 0,
- sizeof(AVSV_SU_SI_REL_CKPT_MSG), 0, nullptr},
-
- {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->su_name, 0, nullptr},
- {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->si_name, 0, nullptr},
- {EDU_EXEC, m_NCS_EDP_SAAMFHASTATET, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->state, 0, nullptr},
- {EDU_EXEC, ncs_edp_int, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->fsm, 0, nullptr},
- {EDU_VER_GE, nullptr, 0, 0, 4, 0, 0,
(EDU_EXEC_RTINE)((uint16_t *)(&(base_ver)))},
- {EDU_EXEC, ncs_edp_ncs_bool, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->csi_add_rem, 0, nullptr},
- {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->comp_name, 0, nullptr},
- {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
(long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->csi_name, 0, nullptr},
-
- {EDU_END, 0, 0, 0, 0, 0, 0, nullptr},
- };
-
- if (op == EDP_OP_TYPE_ENC) {
- struct_ptr = (AVSV_SU_SI_REL_CKPT_MSG *)ptr;
- } else if (op == EDP_OP_TYPE_DEC) {
- d_ptr = (AVSV_SU_SI_REL_CKPT_MSG **)ptr;
- if (*d_ptr == nullptr) {
- *o_err = EDU_ERR_MEM_FAIL;
- return NCSCC_RC_FAILURE;
- }
- memset(*d_ptr, '\0', sizeof(AVSV_SU_SI_REL_CKPT_MSG));
- struct_ptr = *d_ptr;
- } else {
- struct_ptr = static_cast<AVSV_SU_SI_REL_CKPT_MSG*>(ptr);
- }
-
- rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_ckpt_msg_su_si_rel_rules,
struct_ptr,
- ptr_data_len, buf_env, op, o_err);
-
- return rc;
-}
-
-/*****************************************************************************
-
PROCEDURE NAME: avsv_edp_ckpt_msg_async_updt_cnt
DESCRIPTION: EDU program handler for "AVSV_ASYNC_UPDT_CNT" data. This
diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc
b/osaf/services/saf/amf/amfd/ckpt_enc.cc
--- a/osaf/services/saf/amf/amfd/ckpt_enc.cc
+++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc
@@ -638,6 +638,22 @@
return status;
}
+void encode_siass(NCS_UBAID *ub,
+ const AVD_SU_SI_REL *susi,
+ const uint16_t peer_version)
+{
+ osaf_encode_sanamet(ub, &susi->su->name);
+ osaf_encode_sanamet(ub, &susi->si->name);
+ osaf_encode_uint32(ub, susi->state);
+ osaf_encode_uint32(ub, susi->fsm);
+ if (peer_version >= AVD_MBCSV_SUB_PART_VERSION_3) {
+ osaf_encode_bool(ub, static_cast<bool>(susi->csi_add_rem));
+ osaf_encode_sanamet(ub, &susi->comp_name);
+ osaf_encode_sanamet(ub, &susi->csi_name);
+ };
+}
+
+
/****************************************************************************\
* Function: enc_siass
*
@@ -654,52 +670,31 @@
\**************************************************************************/
static uint32_t enc_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc)
{
- uint32_t status = NCSCC_RC_SUCCESS;
- AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt;
- EDU_ERR ederror = static_cast<EDU_ERR>(0);
TRACE_ENTER2("io_action '%u'", enc->io_action);
- memset(&su_si_ckpt, 0, sizeof(su_si_ckpt));
/*
* Check for the action type (whether it is add, rmv or update) and act
* accordingly. If it is update or add, encode entire data. If it is rmv
* send key information only. In this case key is SU and SI key.
*/
- su_si_ckpt.su_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->su->name;
- su_si_ckpt.si_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->si->name;
+ const AVD_SU_SI_REL *susi = (AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl));
switch (enc->io_action) {
case NCS_MBCSV_ACT_ADD:
case NCS_MBCSV_ACT_UPDATE:
- su_si_ckpt.fsm = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->fsm;
- su_si_ckpt.state = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->state;
- su_si_ckpt.csi_add_rem = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_add_rem;
- su_si_ckpt.comp_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->comp_name;
- su_si_ckpt.csi_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_name;
-
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &enc->io_uba, EDP_OP_TYPE_ENC, &su_si_ckpt, &ederror,
enc->i_peer_version);
+ encode_siass(&enc->io_uba, susi, enc->i_peer_version);
break;
case NCS_MBCSV_ACT_RMV:
- su_si_ckpt.csi_add_rem = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_add_rem;
- su_si_ckpt.comp_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->comp_name;
- su_si_ckpt.csi_name = ((AVD_SU_SI_REL
*)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_name;
-
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &enc->io_uba, EDP_OP_TYPE_ENC, &su_si_ckpt,
&ederror, enc->i_peer_version);
+ encode_siass(&enc->io_uba, susi, enc->i_peer_version);
break;
default:
osafassert(0);
}
- if (status != NCSCC_RC_SUCCESS) {
- LOG_ER("%s: encode failed, ederror=%u", __FUNCTION__, ederror);
- }
-
- TRACE_LEAVE2("status '%u'", status);
- return status;
+ TRACE_LEAVE();
+ return NCSCC_RC_SUCCESS;
}
@@ -2263,11 +2258,9 @@
\**************************************************************************/
static uint32_t enc_cs_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, uint32_t
*num_of_obj)
{
- uint32_t status = NCSCC_RC_SUCCESS;
- AVD_SU *su;
- AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt;
- AVD_SU_SI_REL *rel;
- EDU_ERR ederror = static_cast<EDU_ERR>(0);
+ const AVD_SU *su;
+ const AVD_SU_SI_REL *rel;
+ AVD_SU_SI_REL copy;
TRACE_ENTER();
/*
@@ -2276,31 +2269,19 @@
* are sent.We will send the corresponding COMP_CSI relationship for
that SU_SI
* in the same update.
*/
- memset(&su_si_ckpt, 0, sizeof(su_si_ckpt));
for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin();
it != su_db->end(); it++) {
su = it->second;
- su_si_ckpt.su_name = su->name;
for (rel = su->list_of_susi; rel != nullptr; rel =
rel->su_next) {
- su_si_ckpt.si_name = rel->si->name;
- su_si_ckpt.fsm = rel->fsm;
- su_si_ckpt.state = rel->state;
-
- status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
avsv_edp_ckpt_msg_siass,
- &enc->io_uba,
EDP_OP_TYPE_ENC, &su_si_ckpt, &ederror,
- enc->i_peer_version);
-
- if (status != NCSCC_RC_SUCCESS) {
- LOG_ER("%s: encode failed, ederror=%u",
__FUNCTION__, ederror);
- return status;
- }
-
+ memcpy(©, rel, sizeof(AVD_SU_SI_REL));
+ copy.csi_add_rem = static_cast<SaBoolT>(false);
+ encode_siass(&enc->io_uba, ©, enc->i_peer_version);
(*num_of_obj)++;
}
}
- TRACE_LEAVE2("status '%u'", status);
- return status;
+ TRACE_LEAVE();
+ return NCSCC_RC_SUCCESS;
}
/****************************************************************************\
diff --git a/osaf/services/saf/amf/amfd/include/ckpt.h
b/osaf/services/saf/amf/amfd/include/ckpt.h
--- a/osaf/services/saf/amf/amfd/include/ckpt.h
+++ b/osaf/services/saf/amf/amfd/include/ckpt.h
@@ -158,4 +158,7 @@
void encode_comp(NCS_UBAID *ub, const AVD_COMP *comp);
void decode_comp(NCS_UBAID *ub, AVD_COMP *comp);
+void encode_siass(NCS_UBAID *ub, const struct avd_su_si_rel_tag *susi, const
uint16_t peer_version);
+void decode_siass(NCS_UBAID *ub, struct avsv_su_si_rel_ckpt_msg *susi, const
uint16_t peer_version);
+
#endif
diff --git a/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc
b/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc
--- a/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc
+++ b/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc
@@ -18,6 +18,7 @@
#include "mbcsv_papi.h"
#include "cb.h"
#include "app.h"
+#include "susi.h"
#include "gtest/gtest.h"
#include "ncssysf_mem.h"
@@ -166,3 +167,45 @@
ASSERT_EQ(comp.saAmfCompRestartCount, static_cast<uint32_t>(0x77665544));
ASSERT_EQ(Amf::to_string(&comp.saAmfCompCurrProxyName), "CompProxyName");
}
+
+TEST_F(CkptEncDecTest, testEncDecAvdSiAss) {
+ int rc = 0;
+ AVD_SU_SI_REL susi;
+ AVSV_SU_SI_REL_CKPT_MSG susi_ckpt;
+ AVD_SU su;
+ AVD_SI si;
+ std::string su_name("su_name");
+ std::string si_name("si_name");
+ std::string comp_name("comp_name");
+ std::string csi_name("csi_name");
+
+ rc = ncs_enc_init_space(&enc.io_uba);
+ ASSERT_TRUE(rc == NCSCC_RC_SUCCESS);
+
+ su.name = *(asSaNameT(su_name));
+ si.name = *(asSaNameT(si_name));
+ susi.su = &su;
+ susi.si = &si;
+ susi.state = SA_AMF_HA_ACTIVE;
+ susi.fsm = AVD_SU_SI_STATE_ABSENT;
+ susi.csi_add_rem = static_cast<SaBoolT>(0);
+ susi.comp_name = *(asSaNameT(comp_name));
+ susi.csi_name = *(asSaNameT(csi_name));
+
+ enc.io_msg_type = NCS_MBCSV_MSG_ASYNC_UPDATE;
+ enc.io_action = NCS_MBCSV_ACT_UPDATE;
+ enc.io_reo_hdl = (MBCSV_REO_HDL)&susi;
+ enc.io_reo_type = AVSV_CKPT_AVD_SI_ASS;
+ enc.i_peer_version = AVD_MBCSV_SUB_PART_VERSION_4;
+
+ encode_siass(&enc.io_uba, &susi, enc.i_peer_version);
+ decode_siass(&enc.io_uba, &susi_ckpt, enc.i_peer_version);
+
+ ASSERT_EQ(Amf::to_string(&susi_ckpt.su_name), "su_name");
+ ASSERT_EQ(Amf::to_string(&susi_ckpt.si_name), "si_name");
+ ASSERT_EQ(susi_ckpt.state, SA_AMF_HA_ACTIVE);
+ ASSERT_EQ(susi_ckpt.fsm, AVD_SU_SI_STATE_ABSENT);
+ ASSERT_EQ(susi_ckpt.csi_add_rem, static_cast<SaBoolT>(0));
+ ASSERT_EQ(Amf::to_string(&susi_ckpt.comp_name), "comp_name");
+ ASSERT_EQ(Amf::to_string(&susi_ckpt.csi_name), "csi_name");
+}
\ No newline at end of file
------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel