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