osaf/services/saf/amf/amfd/ckpt_dec.cc                |  51 ++++++---------
 osaf/services/saf/amf/amfd/ckpt_edu.cc                |  54 -----------------
 osaf/services/saf/amf/amfd/ckpt_enc.cc                |  38 +++++------
 osaf/services/saf/amf/amfd/include/ckpt.h             |   2 +
 osaf/services/saf/amf/amfd/include/ckpt_edu.h         |   3 -
 osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc |  60 +++++++++++++++++++
 6 files changed, 98 insertions(+), 110 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
@@ -195,6 +195,16 @@
        dec_cs_async_updt_cnt
 };
 
+void decode_cb(NCS_UBAID *ub,
+       AVD_CL_CB *cb,
+       const uint16_t peer_version)
+{
+       osaf_decode_uint32(ub, reinterpret_cast<uint32_t*>(&cb->init_state));
+       osaf_decode_satimet(ub, &cb->cluster_init_time);
+       osaf_decode_uint32(ub, &cb->nodes_exit_cnt);
+}
+
+
 /****************************************************************************\
  * Function: dec_cb_config
  *
@@ -209,32 +219,18 @@
  *
  * 
 \**************************************************************************/
-static uint32_t dec_cb_config(AVD_CL_CB *cb_ptr, NCS_MBCSV_CB_DEC *dec)
+static uint32_t dec_cb_config(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_CL_CB *cb;
-
-       cb = cb_ptr;
-
        TRACE_ENTER();
-       /* 
-        * For updating CB, action is always to do update. We don't have add 
and remove
-        * action on CB. So call EDU to decode CB data.
-        */
-       status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_cb, 
&dec->i_uba,
-                                   EDP_OP_TYPE_DEC, (AVD_CL_CB **)&cb, 
&ederror, dec->i_peer_version);
-
-       if (status != NCSCC_RC_SUCCESS) {
-               LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, ederror);
-               return status;
-       }
+
+       osafassert(dec->i_action == NCS_MBCSV_ACT_UPDATE);
+       decode_cb(&dec->i_uba, cb, dec->i_peer_version);
 
        /* Since update is successful, update async update count */
        cb->async_updt_cnt.cb_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE();
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
@@ -2122,22 +2118,15 @@
 \**************************************************************************/
 static uint32_t dec_cs_cb_config(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec, 
uint32_t num_of_obj)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_CL_CB *cb_ptr;
-
        TRACE_ENTER();
 
-       cb_ptr = cb;
        /* 
         * Send the CB data.
         */
-       status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_cb, 
&dec->i_uba,
-                                   EDP_OP_TYPE_DEC, (AVD_CL_CB **)&cb_ptr, 
&ederror, dec->i_peer_version);
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       decode_cb(&dec->i_uba, cb, dec->i_peer_version);
+
+       TRACE_LEAVE();
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
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
@@ -53,10 +53,6 @@
 
        m_NCS_EDU_HDL_INIT(&cb->edu_hdl);
 
-       rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl, avsv_edp_ckpt_msg_cb, &err);
-       if (rc != NCSCC_RC_SUCCESS)
-               goto error;
-
        rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl, avsv_edp_ckpt_msg_node, &err);
        if (rc != NCSCC_RC_SUCCESS)
                goto error;
@@ -92,56 +88,6 @@
 
 /*****************************************************************************
 
-  PROCEDURE NAME:   avsv_edp_ckpt_msg_cb
-
-  DESCRIPTION:      EDU program handler for "AVD_CL_CB" data. This 
-                    function is invoked by EDU for performing encode/decode 
-                    operation on "AVD_CL_CB" data.
-
-  RETURNS:          NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE
-
-*****************************************************************************/
-uint32_t avsv_edp_ckpt_msg_cb(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;
-       AVD_CL_CB *struct_ptr = nullptr, **d_ptr = nullptr;
-
-       EDU_INST_SET avsv_ckpt_msg_cb_rules[] = {
-               {EDU_START, avsv_edp_ckpt_msg_cb, 0, 0, 0, sizeof(AVD_CL_CB), 
0, nullptr},
-
-               /* AVD Control block information */
-               {EDU_EXEC, ncs_edp_int, 0, 0, 0,
-                (long)&((AVD_CL_CB *)0)->init_state, 0, nullptr},
-               {EDU_EXEC, m_NCS_EDP_SATIMET, 0, 0, 0,
-                (long)&((AVD_CL_CB *)0)->cluster_init_time, 0, nullptr},
-               {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
-                (long)&((AVD_CL_CB *)0)->nodes_exit_cnt, 0, nullptr},
-
-               {EDU_END, 0, 0, 0, 0, 0, 0, nullptr},
-       };
-
-       if (op == EDP_OP_TYPE_ENC) {
-               struct_ptr = (AVD_CL_CB *)ptr;
-       } else if (op == EDP_OP_TYPE_DEC) {
-               d_ptr = (AVD_CL_CB **)ptr;
-               if (*d_ptr == nullptr) {
-                       *o_err = EDU_ERR_MEM_FAIL;
-                       return NCSCC_RC_FAILURE;
-               }
-               /*memset(*d_ptr, '\0', sizeof(AVD_CL_CB)); */
-               struct_ptr = *d_ptr;
-       } else {
-          struct_ptr = static_cast<AVD_CL_CB*>(ptr);
-       }
-
-       rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_ckpt_msg_cb_rules, 
struct_ptr, ptr_data_len, buf_env, op, o_err);
-
-       return rc;
-}
-
-/*****************************************************************************
-
   PROCEDURE NAME:   avsv_edp_ckpt_msg_cluster
 
   DESCRIPTION:      EDU program handler for "AVD_CLUSTER" 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
@@ -196,6 +196,15 @@
        enc_cs_async_updt_cnt
 };
 
+void encode_cb(NCS_UBAID *ub,
+       const AVD_CL_CB *cb,
+       const uint16_t peer_version)
+{
+       osaf_encode_uint32(ub, cb->init_state);
+       osaf_encode_satimet(ub, cb->cluster_init_time);
+       osaf_encode_uint32(ub, cb->nodes_exit_cnt);
+}
+
 /****************************************************************************\
  * Function: enc_cb_config
  *
@@ -212,23 +221,17 @@
 \**************************************************************************/
 static uint32_t enc_cb_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
        TRACE_ENTER();
 
        /* 
         * For updating CB, action is always to do update. We don't have add 
and remove
         * action on CB. So call EDU to encode CB data.
         */
-       status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_cb, 
&enc->io_uba,
-                                   EDP_OP_TYPE_ENC, cb, &ederror, 
enc->i_peer_version);
+       osafassert(enc->io_action == NCS_MBCSV_ACT_UPDATE);
+       encode_cb(&enc->io_uba, cb, enc->i_peer_version);
 
-       if (status != NCSCC_RC_SUCCESS) {
-               LOG_ER("%s: encode failed, ederror=%u", __FUNCTION__, ederror);
-               return status;
-       }
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE();
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
@@ -1890,25 +1893,16 @@
 \**************************************************************************/
 static uint32_t enc_cs_cb_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, 
uint32_t *num_of_obj)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
        TRACE_ENTER();
 
        /* 
         * Send the CB data.
         */
-       status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_cb, 
&enc->io_uba,
-                                   EDP_OP_TYPE_ENC, cb, &ederror, 
enc->i_peer_version);
-
-       if (status != NCSCC_RC_SUCCESS) {
-               LOG_ER("%s: encode failed, ederror=%u", __FUNCTION__, ederror);
-               return NCSCC_RC_FAILURE;
-       }
-
+       encode_cb(&enc->io_uba, cb, enc->i_peer_version);
        *num_of_obj = 1;
 
-       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
@@ -157,5 +157,7 @@
 void decode_app(NCS_UBAID *ub, AVD_APP *app);
 void encode_comp(NCS_UBAID *ub, const AVD_COMP *comp);
 void decode_comp(NCS_UBAID *ub, AVD_COMP *comp);
+void encode_cb(NCS_UBAID *ub, const struct cl_cb_tag *cb, const uint16_t 
peer_version);
+void decode_cb(NCS_UBAID *ub, struct cl_cb_tag *cb, const uint16_t 
peer_version);
 
 #endif
diff --git a/osaf/services/saf/amf/amfd/include/ckpt_edu.h 
b/osaf/services/saf/amf/amfd/include/ckpt_edu.h
--- a/osaf/services/saf/amf/amfd/include/ckpt_edu.h
+++ b/osaf/services/saf/amf/amfd/include/ckpt_edu.h
@@ -35,9 +35,6 @@
 
 /* Function Definations of avd_ckpt_edu.c */
 uint32_t avd_compile_ckpt_edp(AVD_CL_CB *cb);
-uint32_t avsv_edp_ckpt_msg_cb(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 avsv_edp_ckpt_msg_cluster(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);
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
@@ -166,3 +166,63 @@
   ASSERT_EQ(comp.saAmfCompRestartCount, static_cast<uint32_t>(0x77665544));
   ASSERT_EQ(Amf::to_string(&comp.saAmfCompCurrProxyName), "CompProxyName");
 }
+
+
+TEST_F(CkptEncDecTest, testEncDecAvdCb) {
+  int rc = 0;
+  AVD_CL_CB cb;
+
+  cb.init_state = AVD_APP_STATE;
+  cb.cluster_init_time = 0x8877665544332211;
+  cb.nodes_exit_cnt = 0x55443322;
+  
+  rc = ncs_enc_init_space(&enc.io_uba);
+  ASSERT_TRUE(rc == NCSCC_RC_SUCCESS);
+
+  enc.io_msg_type = NCS_MBCSV_MSG_ASYNC_UPDATE;
+  enc.io_action = NCS_MBCSV_ACT_UPDATE;
+  enc.io_reo_hdl = (MBCSV_REO_HDL)&cb;
+  enc.io_reo_type = AVSV_CKPT_AVD_CB_CONFIG;
+  enc.i_peer_version = AVD_MBCSV_SUB_PART_VERSION_3;
+
+  encode_cb(&enc.io_uba, &cb, enc.i_peer_version);
+  
+  // retrieve AVD_CL_CB encoded data from the USR buf
+  int32_t size = enc.io_uba.ttl;
+  char *tmpData = new char[size];
+
+  char *buf = sysf_data_at_start(enc.io_uba.ub, size, tmpData);
+  uint32_t offset = 0;
+  uint32_t *fld = reinterpret_cast<uint32_t*>(&buf[offset]);
+  
+  // verify that the encoded value is in network byte order
+  if (isLittleEndian()) {
+    // app_state
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x04000000));
+    // cluster_init_time
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x55667788));
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x11223344));
+    // nodes_exit_cnt
+    ASSERT_EQ(*fld, static_cast<uint32_t>(0x22334455));
+  } else {
+    // app_state
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x00000004));
+    // cluster_init_time
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x88776655));
+    ASSERT_EQ(*fld++, static_cast<uint32_t>(0x44332211));
+    // nodes_exit_cnt
+    ASSERT_EQ(*fld, static_cast<uint32_t>(0x55443322));
+  }
+
+  delete [] tmpData;
+
+  cb.init_state = AVD_INIT_BGN;
+  cb.cluster_init_time = 0x0;
+  cb.nodes_exit_cnt = 0x0;
+ 
+  decode_cb(&enc.io_uba, &cb, enc.i_peer_version);
+
+  ASSERT_EQ(cb.init_state, AVD_APP_STATE);
+  ASSERT_EQ(cb.cluster_init_time, static_cast<SaTimeT>(0x8877665544332211));
+  ASSERT_EQ(cb.nodes_exit_cnt, static_cast<uint32_t>(0x55443322));
+}

------------------------------------------------------------------------------
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=254741551&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to