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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel