osaf/services/saf/amf/amfd/ckpt_dec.cc         |  473 +++++++-----------------
 osaf/services/saf/amf/amfd/ckpt_updt.cc        |   12 +-
 osaf/services/saf/amf/amfd/include/ckpt_updt.h |    2 +-
 osaf/services/saf/amf/amfd/include/su.h        |    2 +-
 4 files changed, 140 insertions(+), 349 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
@@ -462,8 +462,27 @@ static uint32_t dec_sg_config(AVD_CL_CB 
        return status;
 }
 
+static void decode_su(NCS_UBAID *ub, AVD_SU *su, uint16_t peer_version)
+{
+       osaf_decode_sanamet(ub, &su->name);
+       osaf_decode_bool(ub, (bool*)&su->saAmfSUPreInstantiable);
+       osaf_decode_uint32(ub, (uint32_t*)&su->saAmfSUOperState);
+       osaf_decode_uint32(ub, (uint32_t*)&su->saAmfSUAdminState);
+       osaf_decode_uint32(ub, (uint32_t*)&su->saAmfSuReadinessState);
+       osaf_decode_uint32(ub, (uint32_t*)&su->saAmfSUPresenceState);
+       osaf_decode_sanamet(ub, &su->saAmfSUHostedByNode);
+       osaf_decode_uint32(ub, &su->saAmfSUNumCurrActiveSIs);
+       osaf_decode_uint32(ub, &su->saAmfSUNumCurrStandbySIs);
+       osaf_decode_uint32(ub, &su->saAmfSURestartCount);
+       osaf_decode_bool(ub, &su->term_state);
+       osaf_decode_uint32(ub, (uint32_t*)&su->su_switch);
+       osaf_decode_uint32(ub, (uint32_t*)&su->su_act_state);
+
+       if (peer_version >= AVD_MBCSV_SUB_PART_VERSION_2)
+               osaf_decode_bool(ub, &su->su_is_external);
+}
+
 /****************************************************************************\
- * Function: dec_su_config
  *
  * Purpose:  Decode entire AVD_SU data..
  *
@@ -478,49 +497,18 @@ static uint32_t dec_sg_config(AVD_CL_CB 
 \**************************************************************************/
 static uint32_t dec_su_config(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
+       AVD_SU su;
 
        TRACE_ENTER2("i_action '%u'", dec->i_action);
 
-       su_ptr = &dec_su;
-
-       /* 
-        * 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
-        * request then just update data structure, and if it is remove then 
-        * remove entry from the list.
-        */
-       switch (dec->i_action) {
-       case NCS_MBCSV_ACT_ADD:
-       case NCS_MBCSV_ACT_UPDATE:
-               /* Send entire data */
-               status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-                       &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, 
&ederror,
-                       dec->i_peer_version);
-               break;
-       case NCS_MBCSV_ACT_RMV:
-               status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-                       &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, 
&ederror, 1, 1);
-               break;
-       default:
-               osafassert(0);
-       }
-
-       if (status != NCSCC_RC_SUCCESS) {
-               LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, ederror);
-               return status;
-       }
-
-       status = avd_ckpt_su(cb, su_ptr, dec->i_action);
-
-       /* If update is successful, update async update count */
-       if (NCSCC_RC_SUCCESS == status)
+       osafassert(dec->i_action == NCS_MBCSV_ACT_UPDATE);
+       decode_su(&dec->i_uba, &su, dec->i_peer_version);
+       uint32_t status = avd_ckpt_su(cb, &su, dec->i_action);
+
+       if (status == NCSCC_RC_SUCCESS)
                cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
+       TRACE_LEAVE2("status:%u, su_updt:%d", status, 
cb->async_updt_cnt.su_updt);
        return status;
 }
 
@@ -795,7 +783,6 @@ static uint32_t dec_comp_config(AVD_CL_C
 }
 
 /****************************************************************************\
- * Function: dec_oper_su
  *
  * Purpose:  Decode Operation SU name.
  *
@@ -811,43 +798,27 @@ static uint32_t dec_comp_config(AVD_CL_C
 static uint32_t dec_oper_su(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
        uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
+       SaNameT name;
 
        TRACE_ENTER2("i_action '%u'", dec->i_action);
 
-       su_ptr = &dec_su;
-
-       /* 
-        * In case of both Add and remove request send the operation SU name. 
-        * We don't have update for this reo_type.
-        */
        switch (dec->i_action) {
        case NCS_MBCSV_ACT_ADD:
        case NCS_MBCSV_ACT_RMV:
-               /* Send entire data */
-               status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su, 
&dec->i_uba,
-                                     EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, 
&ederror, 1, 1);
+               osaf_decode_sanamet(&dec->i_uba, &name);
                break;
-
        case NCS_MBCSV_ACT_UPDATE:
        default:
                osafassert(0);
        }
 
-       if (status != NCSCC_RC_SUCCESS) {
-               LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, ederror);
-               return status;
-       }
-
-       status = avd_ckpt_su_oper_list(cb, su_ptr, dec->i_action);
-
-       /* If update is successful, update async update count */
+       status = avd_ckpt_su_oper_list(&name, dec->i_action);
+
        if (NCSCC_RC_SUCCESS == status)
                cb->async_updt_cnt.sg_su_oprlist_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
+       TRACE_LEAVE2("'%s', status '%u', updt %d",
+               name.value, status, cb->async_updt_cnt.sg_su_oprlist_updt);
        return status;
 }
 
@@ -1420,7 +1391,6 @@ static uint32_t dec_sg_fsm_state(AVD_CL_
 }
 
 /****************************************************************************\
- * Function: dec_su_preinstan
  *
  * Purpose:  Decode SU preinstatible object.
  *
@@ -1435,38 +1405,24 @@ static uint32_t dec_sg_fsm_state(AVD_CL_
 \**************************************************************************/
 static uint32_t dec_su_preinstan(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
2);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUPreInstantiable = su_ptr->saAmfSUPreInstantiable;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->saAmfSUPreInstantiable);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSUPreInstantiable=%u, su_updt:%d",
+               name.value, su->saAmfSUPreInstantiable, 
cb->async_updt_cnt.su_updt);
+
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_oper_state
  *
  * Purpose:  Decode SU Operation state.
  *
@@ -1481,38 +1437,23 @@ static uint32_t dec_su_preinstan(AVD_CL_
 \**************************************************************************/
 static uint32_t dec_su_oper_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
3);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       su_struct = avd_su_get_or_create(&su_ptr->name);
-       osafassert(su_struct != NULL);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUOperState = su_ptr->saAmfSUOperState;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->saAmfSUOperState);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSUOperState=%u, su_updt:%d",
+               name.value, su->saAmfSUOperState, cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_admin_state
  *
  * Purpose:  Decode SU Admin state.
  *
@@ -1527,38 +1468,23 @@ static uint32_t dec_su_oper_state(AVD_CL
 \**************************************************************************/
 static uint32_t dec_su_admin_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
4);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUAdminState = su_ptr->saAmfSUAdminState;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->saAmfSUAdminState);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSUAdminState=%u, su_updt:%d",
+               name.value, su->saAmfSUAdminState, cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_rediness_state
  *
  * Purpose:  Decode SU Rediness state.
  *
@@ -1573,40 +1499,25 @@ static uint32_t dec_su_admin_state(AVD_C
 \**************************************************************************/
 static uint32_t dec_su_readiness_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
5);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSuReadinessState = su_ptr->saAmfSuReadinessState;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->saAmfSuReadinessState);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSuReadinessState=%u, su_updt:%d",
+               name.value, su->saAmfSuReadinessState, 
cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_pres_state
- *
- * Purpose:  Decode SU Presdece state.
+ *
+ * Purpose:  Decode SU Presence state.
  *
  * Input: cb - CB pointer.
  *        dec - Decode arguments passed by MBCSV.
@@ -1619,38 +1530,23 @@ static uint32_t dec_su_readiness_state(A
 \**************************************************************************/
 static uint32_t dec_su_pres_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
6);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUPresenceState = su_ptr->saAmfSUPresenceState;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->saAmfSUPresenceState);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSUPresenceState=%u, su_updt:%d",
+               name.value, su->saAmfSUPresenceState, 
cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_si_curr_active
  *
  * Purpose:  Decode SU Current number of Active SI.
  *
@@ -1665,37 +1561,23 @@ static uint32_t dec_su_pres_state(AVD_CL
 \**************************************************************************/
 static uint32_t dec_su_si_curr_active(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
8);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUNumCurrActiveSIs = su_ptr->saAmfSUNumCurrActiveSIs;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, &su->saAmfSUNumCurrActiveSIs);
 
        cb->async_updt_cnt.su_updt++;
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+
+       TRACE_LEAVE2("'%s', saAmfSUNumCurrActiveSIs=%u, su_updt:%d",
+               name.value, su->saAmfSUNumCurrActiveSIs, 
cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_si_curr_stby
  *
  * Purpose:  Decode SU Current number of Standby SI.
  *
@@ -1710,40 +1592,25 @@ static uint32_t dec_su_si_curr_active(AV
 \**************************************************************************/
 static uint32_t dec_su_si_curr_stby(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
9);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSUNumCurrStandbySIs = su_ptr->saAmfSUNumCurrStandbySIs;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, &su->saAmfSUNumCurrStandbySIs);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSUNumCurrStandbySIs=%u, su_updt:%d",
+               name.value, su->saAmfSUNumCurrStandbySIs, 
cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_term_state
- *
- * Purpose:  Decode SU Admin state to terminate service.
+ *
+ * Purpose:  Decode SU term state
  *
  * Input: cb - CB pointer.
  *        dec - Decode arguments passed by MBCSV.
@@ -1756,37 +1623,23 @@ static uint32_t dec_su_si_curr_stby(AVD_
 \**************************************************************************/
 static uint32_t dec_su_term_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-          &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
11);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->term_state = su_ptr->term_state;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->term_state);
 
        cb->async_updt_cnt.su_updt++;
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+
+       TRACE_LEAVE2("'%s', term_state=%u, su_updt:%d",
+               name.value, su->term_state, cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_switch
  *
  * Purpose:  Decode SU toggle SI.
  *
@@ -1801,38 +1654,23 @@ static uint32_t dec_su_term_state(AVD_CL
 \**************************************************************************/
 static uint32_t dec_su_switch(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
12);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->su_switch = su_ptr->su_switch;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, (uint32_t*)&su->su_switch);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', su_switch=%u, su_updt:%d",
+               name.value, su->su_switch, cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_act_state
  *
  * Purpose:  Decode SU action state.
  *
@@ -1849,12 +1687,11 @@ static uint32_t dec_su_act_state(AVD_CL_
 {
        TRACE_ENTER();
        cb->async_updt_cnt.su_updt++;
-       TRACE_LEAVE();
+       TRACE_LEAVE2("su_updt=%u", cb->async_updt_cnt.su_updt);
        return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
- * Function: dec_su_restart_count
  *
  * Purpose:  Decode SU Restart count.
  *
@@ -1869,34 +1706,20 @@ static uint32_t dec_su_act_state(AVD_CL_
 \**************************************************************************/
 static uint32_t dec_su_restart_count(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
 {
-       uint32_t status = NCSCC_RC_SUCCESS;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU *su_struct;
+       SaNameT name;
 
        TRACE_ENTER();
 
-       su_ptr = &dec_su;
-
-       /* 
-        * Action in this case is just to update.
-        */
-       status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-             &dec->i_uba, EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, &ederror, 2, 1, 
10);
-
-       osafassert(status == NCSCC_RC_SUCCESS);
-
-       if (NULL == (su_struct = su_db->find(&su_ptr->name)))
-               osafassert(0);
-
-       /* Update the fields received in this checkpoint message */
-       su_struct->saAmfSURestartCount = su_ptr->saAmfSURestartCount;
+       osaf_decode_sanamet(&dec->i_uba, &name);
+       AVD_SU *su = su_db->find(&name);
+       osafassert(su != NULL);
+       osaf_decode_uint32(&dec->i_uba, &su->saAmfSURestartCount);
 
        cb->async_updt_cnt.su_updt++;
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("'%s', saAmfSURestartCount=%u, su_updt:%d",
+               name.value, su->saAmfSURestartCount, 
cb->async_updt_cnt.su_updt);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
@@ -2826,24 +2649,13 @@ static uint32_t dec_cs_sg_config(AVD_CL_
 static uint32_t dec_cs_su_config(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec, 
uint32_t num_of_obj)
 {
        uint32_t status = NCSCC_RC_SUCCESS;
-       uint32_t count = 0;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
-       AVD_SU dec_su;
-       AVD_SU *su_ptr;
-
-       su_ptr = &dec_su;
+       AVD_SU su;
 
        TRACE_ENTER();
 
-       /* 
-        * Walk through the entire list and send the entire list data.
-        */
-       for (count = 0; count < num_of_obj; count++) {
-               status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, avsv_edp_ckpt_msg_su,
-                                           &dec->i_uba, EDP_OP_TYPE_DEC, 
(AVD_SU **)&su_ptr, &ederror,
-                                           dec->i_peer_version);
-               osafassert(status == NCSCC_RC_SUCCESS);
-               status = avd_ckpt_su(cb, su_ptr, dec->i_action);
+       for (unsigned i = 0; i < num_of_obj; i++) {
+               decode_su(&dec->i_uba, &su, dec->i_peer_version);
+               status = avd_ckpt_su(cb, &su, dec->i_action);
                osafassert(status == NCSCC_RC_SUCCESS);
        }
 
@@ -3306,43 +3118,24 @@ static uint32_t dec_cs_oper_su(AVD_CL_CB
 {
        uint32_t status = NCSCC_RC_SUCCESS;
        uint32_t num_of_oper_su, count;
-       uint8_t *ptr;
-       AVD_SU *su_ptr;
-       AVD_SU dec_su;
-       EDU_ERR ederror = static_cast<EDU_ERR>(0);
+       SaNameT name;
 
        TRACE_ENTER();
 
-       ptr = ncs_dec_flatten_space(&dec->i_uba, (uint8_t *)&num_of_oper_su, 
sizeof(uint32_t));
-       num_of_oper_su = ncs_decode_32bit(&ptr);
-       ncs_dec_skip_space(&dec->i_uba, sizeof(uint32_t));
-
-       su_ptr = &dec_su;
-
-       /* 
-        * 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
-        * request then just update data structure, and if it is remove then 
-        * remove entry from the list.
-        */
+       osaf_decode_uint32(&dec->i_uba, &num_of_oper_su);
+
        for (count = 0; count < num_of_oper_su; count++) {
-               status = ncs_edu_exec(&cb->edu_hdl, avsv_edp_ckpt_msg_su, 
&dec->i_uba,
-                                     EDP_OP_TYPE_DEC, (AVD_SU **)&su_ptr, 
&ederror, 1, 1);
-
-               if (status != NCSCC_RC_SUCCESS) {
-                       LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, 
ederror);
-                       return status;
-               }
-
-               status = avd_ckpt_su_oper_list(cb, su_ptr, dec->i_action);
+               osaf_decode_sanamet(&dec->i_uba, &name);
+
+               status = avd_ckpt_su_oper_list(&name, dec->i_action);
                if (status != NCSCC_RC_SUCCESS) {
                        LOG_ER("%s: avd_ckpt_su_oper_list failed", 
__FUNCTION__);
                        return status;
                }
        }
 
-       TRACE_LEAVE2("status '%u'", status);
-       return status;
+       TRACE_LEAVE2("%d", status);
+       return NCSCC_RC_SUCCESS;
 }
 
 /****************************************************************************\
diff --git a/osaf/services/saf/amf/amfd/ckpt_updt.cc 
b/osaf/services/saf/amf/amfd/ckpt_updt.cc
--- a/osaf/services/saf/amf/amfd/ckpt_updt.cc
+++ b/osaf/services/saf/amf/amfd/ckpt_updt.cc
@@ -266,19 +266,17 @@ done:
  *
  * 
 \**************************************************************************/
-uint32_t avd_ckpt_su_oper_list(AVD_CL_CB *cb, AVD_SU *ckpt_su, 
NCS_MBCSV_ACT_TYPE action)
+uint32_t avd_ckpt_su_oper_list(const SaNameT *name, NCS_MBCSV_ACT_TYPE action)
 {
-       AVD_SU *su;
+       TRACE_ENTER2("'%s'", name->value);
 
-       TRACE_ENTER2("'%s'", ckpt_su->name.value);
-
-       su = su_db->find(&ckpt_su->name);
+       AVD_SU *su = su_db->find(name);
        osafassert(su);
 
        if (NCS_MBCSV_ACT_ADD == action)
-               avd_sg_su_oper_list_add(cb, su, true);
+               avd_sg_su_oper_list_add(avd_cb, su, true);
        else if (NCS_MBCSV_ACT_RMV == action)
-               avd_sg_su_oper_list_del(cb, su, true);
+               avd_sg_su_oper_list_del(avd_cb, su, true);
        else
                osafassert(0);
 
diff --git a/osaf/services/saf/amf/amfd/include/ckpt_updt.h 
b/osaf/services/saf/amf/amfd/include/ckpt_updt.h
--- a/osaf/services/saf/amf/amfd/include/ckpt_updt.h
+++ b/osaf/services/saf/amf/amfd/include/ckpt_updt.h
@@ -39,7 +39,7 @@ uint32_t avd_ckpt_app(AVD_CL_CB *cb, AVD
 uint32_t avd_ckpt_sg(AVD_CL_CB *cb, AVD_SG *sg, NCS_MBCSV_ACT_TYPE action);
 uint32_t avd_ckpt_su(AVD_CL_CB *cb, AVD_SU *su, NCS_MBCSV_ACT_TYPE action);
 uint32_t avd_ckpt_si(AVD_CL_CB *cb, AVD_SI *si, NCS_MBCSV_ACT_TYPE action);
-uint32_t avd_ckpt_su_oper_list(AVD_CL_CB *cb, AVD_SU *su_ptr, 
NCS_MBCSV_ACT_TYPE action);
+uint32_t avd_ckpt_su_oper_list(const SaNameT *name, NCS_MBCSV_ACT_TYPE action);
 uint32_t avd_ckpt_sg_admin_si(AVD_CL_CB *cb, NCS_UBAID *uba, 
NCS_MBCSV_ACT_TYPE action);
 uint32_t avd_ckpt_siass(AVD_CL_CB *cb, AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt, 
NCS_MBCSV_CB_DEC *dec);
 uint32_t avd_ckpt_si_trans(AVD_CL_CB *cb, AVSV_SI_TRANS_CKPT_MSG *si_trans, 
NCS_MBCSV_ACT_TYPE action);
diff --git a/osaf/services/saf/amf/amfd/include/su.h 
b/osaf/services/saf/amf/amfd/include/su.h
--- a/osaf/services/saf/amf/amfd/include/su.h
+++ b/osaf/services/saf/amf/amfd/include/su.h
@@ -51,7 +51,7 @@ class AVD_SU {
        SaNameT saAmfSUMaintenanceCampaign;
 
        /* runtime attributes */
-       SaBoolT saAmfSUPreInstantiable;
+       SaBoolT saAmfSUPreInstantiable;  // TODO(hafe) change to bool
        SaAmfOperationalStateT saAmfSUOperState;
        SaAmfAdminStateT saAmfSUAdminState;
        SaAmfReadinessStateT saAmfSuReadinessState;

------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to