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(&copy, rel, sizeof(AVD_SU_SI_REL));
+                       copy.csi_add_rem = static_cast<SaBoolT>(false);
+                       encode_siass(&enc->io_uba, &copy, 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

Reply via email to