osaf/libs/common/cpsv/cpsv_evt.c | 439 +++++++++++++++++++++++++++++- osaf/libs/common/cpsv/include/cpsv_evt.h | 10 + osaf/services/saf/cpsv/cpd/cpd_mds.c | 84 +++++- osaf/services/saf/cpsv/cpnd/cpnd_mds.c | 86 +++++- 4 files changed, 581 insertions(+), 38 deletions(-)
diff --git a/osaf/libs/common/cpsv/cpsv_evt.c b/osaf/libs/common/cpsv/cpsv_evt.c --- a/osaf/libs/common/cpsv/cpsv_evt.c +++ b/osaf/libs/common/cpsv/cpsv_evt.c @@ -30,11 +30,14 @@ #include "cpsv.h" #include "cpa_tmr.h" +#include "osaf_extended_name.h" FUNC_DECLARATION(CPSV_CKPT_DATA); static SaCkptSectionIdT *cpsv_evt_dec_sec_id(NCS_UBAID *i_ub, uint32_t svc_id); static uint32_t cpsv_evt_enc_sec_id(NCS_UBAID *o_ub, SaCkptSectionIdT *sec_id); static void cpsv_convert_sec_id_to_string(char *sec_id_str, SaCkptSectionIdT *section_id); +static uint32_t cpsv_encode_extended_name_flat(NCS_UBAID *uba, SaNameT *name); +static uint32_t cpsv_decode_extended_name_flat(NCS_UBAID *uba, SaNameT *name); const char *cpa_evt_str[] = { "STRING_0", @@ -254,8 +257,8 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPND_EVT_A2ND_CKPT_OPEN: { CPSV_A2ND_OPEN_REQ *info = &evt->info.cpnd.info.openReq; - snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_OPEN(hdl=%llu, %s)", - info->client_hdl, info->ckpt_name.value); + snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_OPEN_2(hdl=%llu, %s)", + info->client_hdl, osaf_extended_name_borrow(&info->ckpt_name)); break; } case CPND_EVT_A2ND_CKPT_CLOSE: @@ -268,7 +271,7 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPND_EVT_A2ND_CKPT_UNLINK: { CPSV_A2ND_CKPT_UNLINK *info = &evt->info.cpnd.info.ulinkReq; - snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_UNLINK(%s)", info->ckpt_name.value); + snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_UNLINK_2(%s)", osaf_extended_name_borrow(&info->ckpt_name)); break; } case CPND_EVT_A2ND_CKPT_RDSET: @@ -513,12 +516,22 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPND_EVT_D2ND_CKPT_CREATE: { CPSV_D2ND_CKPT_CREATE *info = &evt->info.cpnd.info.ckpt_create; - snprintf(o_evt_str, len, "[%llu] CPND_EVT_D2ND_CKPT_CREATE(%s, create_rep=%s, active=0x%X)", - info->ckpt_info.ckpt_id, info->ckpt_name.value, + snprintf(o_evt_str, len, "[%llu] CPND_EVT_D2ND_CKPT_CREATE_2(%s, create_rep=%s, is_act=%s, active=0x%X, dest_cnt=%d)", + info->ckpt_info.ckpt_id, osaf_extended_name_borrow(&info->ckpt_name), info->ckpt_info.ckpt_rep_create ? "true" : "false", - m_NCS_NODE_ID_FROM_MDS_DEST(info->ckpt_info.active_dest)); + info->ckpt_info.is_active_exists ? "true" : "false", + m_NCS_NODE_ID_FROM_MDS_DEST(info->ckpt_info.active_dest), + info->ckpt_info.dest_cnt); + + SaCkptCheckpointCreationAttributesT *attr = &info->ckpt_info.attributes; + TRACE("mSecS=%lld, flags=%d, mSec=%d, mSecIdS=%lld, ret=%lld, ckptS=%lld", attr->maxSectionSize, + attr->creationFlags, attr->maxSections, attr->maxSectionIdSize, attr->retentionDuration, + attr->checkpointSize); + for (int i = 0; i < info->ckpt_info.dest_cnt; i++) + TRACE("dest[%d] = 0x%" PRIX64 " ", i, info->ckpt_info.dest_list[i].dest); break; } + case CPND_EVT_D2ND_CKPT_DESTROY: { snprintf(o_evt_str, len, "[%llu] CPND_EVT_D2ND_CKPT_DESTROY", evt->info.cpnd.info.ckpt_destroy.ckpt_id); @@ -608,8 +621,8 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPND_EVT_A2ND_CKPT_LIST_UPDATE: { CPSV_A2ND_CKPT_LIST_UPDATE *info = &evt->info.cpnd.info.ckptListUpdate; - snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_LIST_UPDATE(hdl=%llu, %s)", - info->client_hdl, info->ckpt_name.value); + snprintf(o_evt_str, len, "CPND_EVT_A2ND_CKPT_LIST_UPDATE_2(hdl=%llu, %s)", + info->client_hdl, osaf_extended_name_borrow(&info->ckpt_name)); break; } case CPND_EVT_A2ND_ARRIVAL_CB_UNREG: @@ -813,13 +826,20 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPD_EVT_ND2D_CKPT_CREATE: { CPSV_ND2D_CKPT_CREATE *info = &evt->info.cpd.info.ckpt_create; - snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_CREATE(%s, creationFlags=0x%X)", - info->ckpt_name.value, info->attributes.creationFlags); + snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_CREATE_2(%s, creationFlags=0x%X, release=%d, majorV=%d, minorV=%d)", + osaf_extended_name_borrow(&info->ckpt_name), info->attributes.creationFlags, info->client_version.releaseCode, + info->client_version.majorVersion, info->client_version.minorVersion); + + SaCkptCheckpointCreationAttributesT *attr = &info->attributes; + TRACE("mSecS=%lld, flags=%d, mSec=%d, mSecIdS=%lld, ret=%lld, ckptS=%lld", attr->maxSectionSize, + attr->creationFlags, attr->maxSections, attr->maxSectionIdSize, attr->retentionDuration, + attr->checkpointSize); break; } + case CPD_EVT_ND2D_CKPT_UNLINK: { - snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_UNLINK(%s)", evt->info.cpd.info.ckpt_ulink.ckpt_name.value); + snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_UNLINK_2(%s)", osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_ulink.ckpt_name)); break; } case CPD_EVT_ND2D_CKPT_RDSET: @@ -888,7 +908,7 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME: { CPSV_CKPT_NAME_INFO *info = &evt->info.cpd.info.ckpt_destroy_byname; - snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_DESTROY_BYNAME(ckpt=%s)", info->ckpt_name.value); + snprintf(o_evt_str, len, "CPD_EVT_ND2D_CKPT_DESTROY_BYNAME_2(ckpt=%s)", osaf_extended_name_borrow(&info->ckpt_name)); break; } case CPD_EVT_ND2D_CKPT_CREATED_SECTIONS: @@ -908,9 +928,9 @@ char* cpsv_evt_str(CPSV_EVT *evt, char * case CPD_EVT_ND2D_CKPT_INFO_UPDATE: { CPSV_ND2D_CKPT_INFO_UPD *info = &evt->info.cpd.info.ckpt_info; - snprintf(o_evt_str, len, "[%llu] CPD_EVT_ND2D_CKPT_INFO_UPDATE(%s, creationFlags=0x%X, " + snprintf(o_evt_str, len, "[%llu] CPD_EVT_ND2D_CKPT_INFO_UPDATE_2(%s, creationFlags=0x%X, " "openFlags=0x%X, numbers[U/W/R]=[%u/%u/%u], active=%s, last=%s)", info->ckpt_id, - info->ckpt_name.value, info->attributes.creationFlags, info->ckpt_flags, info->num_users, + osaf_extended_name_borrow(&info->ckpt_name), info->attributes.creationFlags, info->ckpt_flags, info->num_users, info->num_writers, info->num_readers, info->is_active ? "true" : "false", info->is_last ? "true" : "false"); break; @@ -1443,6 +1463,7 @@ uint32_t cpsv_evt_enc_flat(EDU_HDL *edu_ i_evt->info.cpnd.info.ckpt_create.ckpt_info.dest_cnt * sizeof(CPSV_CPND_DEST_INFO); ncs_encode_n_octets_in_uba(o_ub, (uint8_t *)dest_list, size); } + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpnd.info.ckpt_create.ckpt_name); } else if (i_evt->info.cpnd.type == CPSV_D2ND_RESTART_DONE) { CPSV_CPND_DEST_INFO *dest_list = i_evt->info.cpnd.info.cpnd_restart_done.dest_list; if (i_evt->info.cpnd.info.cpnd_restart_done.dest_cnt) { @@ -1455,13 +1476,25 @@ uint32_t cpsv_evt_enc_flat(EDU_HDL *edu_ size = i_evt->info.cpnd.info.ckpt_add.dest_cnt * sizeof(CPSV_CPND_DEST_INFO); ncs_encode_n_octets_in_uba(o_ub, (uint8_t *)dest_list, size); } - } - else if(i_evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_REFCNTSET) - { - if(i_evt->info.cpnd.info.refCntsetReq.no_of_nodes) - cpsv_ref_cnt_encode(o_ub, &i_evt->info.cpnd.info.refCntsetReq); - } - } + } else if (i_evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_REFCNTSET) { + if (i_evt->info.cpnd.info.refCntsetReq.no_of_nodes) + cpsv_ref_cnt_encode(o_ub, &i_evt->info.cpnd.info.refCntsetReq); + } else if (i_evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpnd.info.openReq.ckpt_name); + } else if (i_evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpnd.info.ulinkReq.ckpt_name); + } else if (i_evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpnd.info.ckptListUpdate.ckpt_name); + } + } else if (i_evt->type == CPSV_EVT_TYPE_CPD) { + if (i_evt->info.cpd.type == CPD_EVT_ND2D_CKPT_CREATE) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpd.info.ckpt_create.ckpt_name); + } else if (i_evt->info.cpd.type == CPD_EVT_ND2D_CKPT_UNLINK) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpd.info.ckpt_ulink.ckpt_name); + } else if (i_evt->info.cpd.type == CPD_EVT_ND2D_CKPT_DESTROY_BYNAME) { + cpsv_encode_extended_name_flat(o_ub, &i_evt->info.cpd.info.ckpt_destroy_byname.ckpt_name); + } + } return NCSCC_RC_SUCCESS; } @@ -2092,6 +2125,7 @@ uint32_t cpsv_evt_dec_flat(EDU_HDL *edu_ ncs_decode_n_octets_from_uba(i_ub, (uint8_t *)dest_list, size); o_evt->info.cpnd.info.ckpt_create.ckpt_info.dest_list = dest_list; } + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpnd.info.ckpt_create.ckpt_name); break; case CPSV_D2ND_RESTART_DONE: @@ -2120,10 +2154,34 @@ uint32_t cpsv_evt_dec_flat(EDU_HDL *edu_ o_evt->info.cpnd.info.ckpt_add.dest_list = dest_list; } break; - case CPND_EVT_A2ND_CKPT_REFCNTSET: - if(o_evt->info.cpnd.info.refCntsetReq.no_of_nodes) - cpsv_refcnt_ckptid_decode(&o_evt->info.cpnd.info.refCntsetReq,i_ub ); - break; + case CPND_EVT_A2ND_CKPT_REFCNTSET: + if(o_evt->info.cpnd.info.refCntsetReq.no_of_nodes) + cpsv_refcnt_ckptid_decode(&o_evt->info.cpnd.info.refCntsetReq,i_ub ); + break; + case CPND_EVT_A2ND_CKPT_OPEN: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpnd.info.openReq.ckpt_name); + break; + case CPND_EVT_A2ND_CKPT_UNLINK: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpnd.info.ulinkReq.ckpt_name); + break; + case CPND_EVT_A2ND_CKPT_LIST_UPDATE: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpnd.info.ckptListUpdate.ckpt_name); + break; + default: + break; + } + } else if (o_evt->type == CPSV_EVT_TYPE_CPD) { + switch (o_evt->info.cpd.type) + { + case CPD_EVT_ND2D_CKPT_CREATE: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpd.info.ckpt_create.ckpt_name); + break; + case CPD_EVT_ND2D_CKPT_UNLINK: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpd.info.ckpt_ulink.ckpt_name); + break; + case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME: + cpsv_decode_extended_name_flat(i_ub, &o_evt->info.cpd.info.ckpt_destroy_byname.ckpt_name); + break; default: break; } @@ -2265,3 +2323,334 @@ void cpsv_convert_sec_id_to_string(char strncpy(sec_id_str, "(NULL)", MAX_SEC_ID_LEN); } } + +uint32_t cpsv_encode_extended_name(NCS_UBAID *uba, SaNameT *name) +{ + uint32_t rc; + + if(!osaf_is_an_extended_name(name)) + return NCSCC_RC_SUCCESS; + + SaConstStringT value = osaf_extended_name_borrow(name); + uint16_t length = osaf_extended_name_length(name); + + /* Encode name length */ + if (length > kOsafMaxDnLength) { + LOG_ER("SaNameT length too long: %d", length); + return NCSCC_RC_FAILURE; + } + osaf_encode_uint16(uba, length); + + /* Encode name value */ + rc = ncs_encode_n_octets_in_uba(uba, (uint8_t*)value, (uint32_t)length); + return rc; +} +uint32_t cpsv_decode_extended_name(NCS_UBAID *uba, SaNameT *name) +{ + uint16_t length = 0; + uint32_t rc; + if(!osaf_is_an_extended_name(name)) + return NCSCC_RC_SUCCESS; + + /* Decode name length */ + osaf_decode_uint16(uba, &length); + if (length > kOsafMaxDnLength) { + LOG_ER("SaNameT length too long: %d", length); + return NCSCC_RC_FAILURE; + } + + /* Decode name value */ + char* value = (char*) malloc(length + 1); + if (value == NULL) { + LOG_ER("Out of memory"); + return NCSCC_RC_FAILURE; + } + rc = ncs_decode_n_octets_from_uba(uba, (uint8_t*) value, (uint32_t) length); + value[length] = '\0'; + osaf_extended_name_steal(value, name); + return rc; +} + +static uint32_t cpsv_encode_extended_name_flat(NCS_UBAID *uba, SaNameT *name) +{ + uint32_t rc; + + if(!osaf_is_an_extended_name(name)) + return NCSCC_RC_SUCCESS; + + SaConstStringT value = osaf_extended_name_borrow(name); + uint16_t length = osaf_extended_name_length(name); + + /* Encode name length */ + if (length > kOsafMaxDnLength) { + LOG_ER("SaNameT length too long: %d", length); + return NCSCC_RC_FAILURE; + } + rc = ncs_encode_n_octets_in_uba(uba, (uint8_t*)&length, sizeof(length)); + if (rc != NCSCC_RC_SUCCESS) + return rc; + + /* Encode name value */ + rc = ncs_encode_n_octets_in_uba(uba, (uint8_t*)value, (uint32_t)length); + return rc; +} + +static uint32_t cpsv_decode_extended_name_flat(NCS_UBAID *uba, SaNameT *name) +{ + uint16_t length = 0; + uint32_t rc; + if(!osaf_is_an_extended_name(name)) + return NCSCC_RC_SUCCESS; + + /* Decode name length */ + rc = ncs_decode_n_octets_from_uba(uba, (uint8_t*)&length, sizeof(length)); + if (rc != NCSCC_RC_SUCCESS) + return rc; + + if (length > kOsafMaxDnLength) { + LOG_ER("SaNameT length too long: %d", length); + return NCSCC_RC_FAILURE; + } + + /* Decode name value */ + char* value = (char*) malloc(length + 1); + if (value == NULL) { + LOG_ER("Out of memory"); + return NCSCC_RC_FAILURE; + } + rc = ncs_decode_n_octets_from_uba(uba, (uint8_t*) value, (uint32_t) length); + value[length] = '\0'; + osaf_extended_name_steal(value, name); + return rc; +} + +void cpsv_ckpt_dest_list_encode(NCS_UBAID *io_uba, CPSV_CPND_DEST_INFO *dest_list, uint32_t dest_cnt) +{ + TRACE_ENTER(); + + if ((dest_list == NULL) || (dest_cnt == 0)) { + TRACE_LEAVE(); + return; + } + + int i = 0; + for (i = 0; i < dest_cnt; i++) { + uint8_t *stream = ncs_enc_reserve_space(io_uba, sizeof(MDS_DEST)); + ncs_encode_64bit(&stream, dest_list[i].dest); + ncs_enc_claim_space(io_uba, sizeof(MDS_DEST)); + } + + TRACE_LEAVE(); +} + +void cpsv_ckpt_dest_list_decode(NCS_UBAID *io_uba, CPSV_CPND_DEST_INFO **o_dest_list, uint32_t dest_cnt) +{ + TRACE_ENTER(); + + int i = 0; + + if (dest_cnt == 0) { + TRACE_LEAVE(); + return; + } + + *o_dest_list = m_MMGR_ALLOC_CPSV_SYS_MEMORY(sizeof(CPSV_CPND_DEST_INFO) * dest_cnt); + CPSV_CPND_DEST_INFO *dest_list = *o_dest_list; + + for (i = 0; i < dest_cnt; i++) { + CPSV_CPND_DEST_INFO dest_info; + uint8_t *stream = ncs_dec_flatten_space(io_uba, (uint8_t *)&dest_info, sizeof(MDS_DEST)); + dest_list[i].dest = ncs_decode_64bit(&stream); + ncs_dec_skip_space(io_uba, sizeof(MDS_DEST)); + } + + TRACE_LEAVE(); +} + +void cpsv_ckpt_creation_attribute_encode(NCS_UBAID *io_uba, SaCkptCheckpointCreationAttributesT *attributes) +{ + osaf_encode_uint32(io_uba, attributes->creationFlags); + osaf_encode_uint64(io_uba, attributes->checkpointSize); + osaf_encode_satimet(io_uba, attributes->retentionDuration); + osaf_encode_uint32(io_uba, attributes->maxSections); + osaf_encode_uint64(io_uba, attributes->maxSectionSize); + osaf_encode_uint64(io_uba, attributes->maxSectionIdSize); +} + +void cpsv_ckpt_creation_attribute_decode(NCS_UBAID *io_uba, SaCkptCheckpointCreationAttributesT *attributes) +{ + osaf_decode_uint32(io_uba, &attributes->creationFlags); + osaf_decode_uint64(io_uba, (uint64_t *)&attributes->checkpointSize); + osaf_decode_satimet(io_uba, &attributes->retentionDuration); + osaf_decode_uint32(io_uba, &attributes->maxSections); + osaf_decode_uint64(io_uba, (uint64_t *)&attributes->maxSectionSize); + osaf_decode_uint64(io_uba, (uint64_t *)&attributes->maxSectionIdSize); +} + +uint32_t cpsv_d2nd_ckpt_create_2_encode(CPSV_D2ND_CKPT_CREATE *create_data, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_encode_sanamet(io_uba, &create_data->ckpt_name); + + osaf_encode_uint32(io_uba, create_data->ckpt_info.error); + osaf_encode_uint64(io_uba, create_data->ckpt_info.ckpt_id); + osaf_encode_bool(io_uba, create_data->ckpt_info.is_active_exists); + cpsv_ckpt_creation_attribute_encode(io_uba, &create_data->ckpt_info.attributes); + osaf_encode_uint64(io_uba, create_data->ckpt_info.active_dest); + osaf_encode_bool(io_uba, create_data->ckpt_info.ckpt_rep_create); + osaf_encode_uint32(io_uba, create_data->ckpt_info.dest_cnt); + cpsv_ckpt_dest_list_encode(io_uba, create_data->ckpt_info.dest_list, create_data->ckpt_info.dest_cnt); + + cpsv_encode_extended_name(io_uba, &create_data->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_d2nd_ckpt_create_2_decode(CPSV_D2ND_CKPT_CREATE *create_data, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_decode_sanamet(io_uba, &create_data->ckpt_name); + + osaf_decode_uint32(io_uba, &create_data->ckpt_info.error); + osaf_decode_uint64(io_uba, (uint64_t *)&create_data->ckpt_info.ckpt_id); + osaf_decode_bool(io_uba, &create_data->ckpt_info.is_active_exists); + cpsv_ckpt_creation_attribute_decode(io_uba, &create_data->ckpt_info.attributes); + osaf_decode_uint64(io_uba, &create_data->ckpt_info.active_dest); + osaf_decode_bool(io_uba, &create_data->ckpt_info.ckpt_rep_create); + osaf_decode_uint32(io_uba, &create_data->ckpt_info.dest_cnt); + cpsv_ckpt_dest_list_decode(io_uba, &create_data->ckpt_info.dest_list, create_data->ckpt_info.dest_cnt); + + cpsv_decode_extended_name(io_uba, &create_data->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_create_2_encode(CPSV_ND2D_CKPT_CREATE *create_data, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_encode_sanamet(io_uba, &create_data->ckpt_name); + cpsv_ckpt_creation_attribute_encode(io_uba, &create_data->attributes); + osaf_encode_uint32(io_uba, create_data->ckpt_flags); + osaf_encode_uint8(io_uba, create_data->client_version.releaseCode); + osaf_encode_uint8(io_uba, create_data->client_version.majorVersion); + osaf_encode_uint8(io_uba, create_data->client_version.minorVersion); + + cpsv_encode_extended_name(io_uba, &create_data->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_create_2_decode(CPSV_ND2D_CKPT_CREATE *create_data, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_decode_sanamet(io_uba, &create_data->ckpt_name); + cpsv_ckpt_creation_attribute_decode(io_uba, &create_data->attributes); + osaf_decode_uint32(io_uba, &create_data->ckpt_flags); + osaf_decode_uint8(io_uba, &create_data->client_version.releaseCode); + osaf_decode_uint8(io_uba, &create_data->client_version.majorVersion); + osaf_decode_uint8(io_uba, &create_data->client_version.minorVersion); + + cpsv_decode_extended_name(io_uba, &create_data->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_unlink_2_encode(CPSV_ND2D_CKPT_UNLINK *unlink_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_encode_sanamet(io_uba, &unlink_info->ckpt_name); + cpsv_encode_extended_name(io_uba, &unlink_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_unlink_2_decode(CPSV_ND2D_CKPT_UNLINK *unlink_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_decode_sanamet(io_uba, &unlink_info->ckpt_name); + cpsv_decode_extended_name(io_uba, &unlink_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_destroy_byname_2_encode(CPSV_CKPT_NAME_INFO *ckpt_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_encode_sanamet(io_uba, &ckpt_info->ckpt_name); + cpsv_encode_extended_name(io_uba, &ckpt_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_destroy_byname_2_decode(CPSV_CKPT_NAME_INFO *ckpt_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_decode_sanamet(io_uba, &ckpt_info->ckpt_name); + cpsv_decode_extended_name(io_uba, &ckpt_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_info_update_encode(CPSV_ND2D_CKPT_INFO_UPD *update_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_encode_uint64(io_uba, update_info->ckpt_id); + osaf_encode_sanamet(io_uba, &update_info->ckpt_name); + cpsv_ckpt_creation_attribute_encode(io_uba, &update_info->attributes); + osaf_encode_uint32(io_uba, update_info->ckpt_flags); + osaf_encode_uint8(io_uba, update_info->client_version.releaseCode); + osaf_encode_uint8(io_uba, update_info->client_version.majorVersion); + osaf_encode_uint8(io_uba, update_info->client_version.minorVersion); + osaf_encode_bool(io_uba, update_info->is_active); + osaf_encode_uint32(io_uba, update_info->num_users); + osaf_encode_uint32(io_uba, update_info->num_writers); + osaf_encode_uint32(io_uba, update_info->num_readers); + osaf_encode_bool(io_uba, update_info->is_last); + osaf_encode_bool(io_uba, update_info->is_unlink); + + cpsv_encode_extended_name(io_uba, &update_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} + +uint32_t cpsv_nd2d_ckpt_info_update_decode(CPSV_ND2D_CKPT_INFO_UPD *update_info, NCS_UBAID *io_uba) +{ + TRACE_ENTER(); + + osaf_decode_uint64(io_uba, (uint64_t *)&update_info->ckpt_id); + osaf_decode_sanamet(io_uba, &update_info->ckpt_name); + cpsv_ckpt_creation_attribute_decode(io_uba, &update_info->attributes); + osaf_decode_uint32(io_uba, &update_info->ckpt_flags); + osaf_decode_uint8(io_uba, &update_info->client_version.releaseCode); + osaf_decode_uint8(io_uba, &update_info->client_version.majorVersion); + osaf_decode_uint8(io_uba, &update_info->client_version.minorVersion); + osaf_decode_bool(io_uba, &update_info->is_active); + osaf_decode_uint32(io_uba, &update_info->num_users); + osaf_decode_uint32(io_uba, &update_info->num_writers); + osaf_decode_uint32(io_uba, &update_info->num_readers); + osaf_decode_bool(io_uba, &update_info->is_last); + osaf_decode_bool(io_uba, &update_info->is_unlink); + + cpsv_decode_extended_name(io_uba, &update_info->ckpt_name); + + TRACE_LEAVE(); + return NCSCC_RC_SUCCESS; +} diff --git a/osaf/libs/common/cpsv/include/cpsv_evt.h b/osaf/libs/common/cpsv/include/cpsv_evt.h --- a/osaf/libs/common/cpsv/include/cpsv_evt.h +++ b/osaf/libs/common/cpsv/include/cpsv_evt.h @@ -897,6 +897,16 @@ uint32_t cpsv_nd2a_read_data_encode(CPSV uint32_t cpsv_data_access_rsp_decode(CPSV_ND2A_DATA_ACCESS_RSP *data_rsp, NCS_UBAID *io_uba, MDS_CLIENT_MSG_FORMAT_VER i_msg_fmt_ver); uint32_t cpsv_nd2a_read_data_decode(CPSV_ND2A_READ_DATA *read_data, NCS_UBAID *io_uba); uint32_t cpsv_data_access_rsp_encode(CPSV_ND2A_DATA_ACCESS_RSP *data_rsp, NCS_UBAID *io_uba, MDS_CLIENT_MSG_FORMAT_VER o_msg_fmt_ver); +uint32_t cpsv_d2nd_ckpt_create_2_encode(CPSV_D2ND_CKPT_CREATE *create_data, NCS_UBAID *io_uba); +uint32_t cpsv_d2nd_ckpt_create_2_decode(CPSV_D2ND_CKPT_CREATE *create_data, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_create_2_encode(CPSV_ND2D_CKPT_CREATE *create_data, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_create_2_decode(CPSV_ND2D_CKPT_CREATE *create_data, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_unlink_2_encode(CPSV_ND2D_CKPT_UNLINK *unlink_info, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_unlink_2_decode(CPSV_ND2D_CKPT_UNLINK *unlink_info, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_destroy_byname_2_encode(CPSV_CKPT_NAME_INFO *ckpt_info, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_destroy_byname_2_decode(CPSV_CKPT_NAME_INFO *ckpt_info, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_info_update_encode(CPSV_ND2D_CKPT_INFO_UPD *update_info, NCS_UBAID *io_uba); +uint32_t cpsv_nd2d_ckpt_info_update_decode(CPSV_ND2D_CKPT_INFO_UPD *update_info, NCS_UBAID *io_uba); void cpsv_evt_trace(char *svc_name, CPSV_EVT_REQUEST request, CPSV_EVT *evt, MDS_DEST mds_dest); /* diff --git a/osaf/services/saf/cpsv/cpd/cpd_mds.c b/osaf/services/saf/cpsv/cpd/cpd_mds.c --- a/osaf/services/saf/cpsv/cpd/cpd_mds.c +++ b/osaf/services/saf/cpsv/cpd/cpd_mds.c @@ -309,8 +309,9 @@ uint32_t cpd_mds_callback(struct ncsmds_ ******************************************************************************/ static uint32_t cpd_mds_enc(CPD_CB *cb, MDS_CALLBACK_ENC_INFO *enc_info) { - CPSV_EVT *msg_ptr = NULL; EDU_ERR ederror = 0; + NCS_UBAID *io_uba = enc_info->io_uba; + uint32_t rc = NCSCC_RC_SUCCESS; /* Get the Msg Format version from the SERVICE_ID & RMT_SVC_PVT_SUBPART_VERSION */ if (enc_info->i_to_svc_id == NCSMDS_SVC_ID_CPA) { @@ -327,13 +328,35 @@ static uint32_t cpd_mds_enc(CPD_CB *cb, if (enc_info->o_msg_fmt_ver) { - msg_ptr = (CPSV_EVT *)enc_info->i_msg; + CPSV_EVT *pevt = (CPSV_EVT *)enc_info->i_msg; + uint8_t *pstream = NULL; + + if (pevt->type == CPSV_EVT_TYPE_CPND) { + switch (pevt->info.cpnd.type) { + case CPND_EVT_D2ND_CKPT_CREATE: + + pstream = ncs_enc_reserve_space(io_uba, 12); + if (!pstream) + return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, + "Memory alloc failed in cpnd_mds_enc \n"); + ncs_encode_32bit(&pstream, pevt->type); + ncs_encode_32bit(&pstream, pevt->info.cpnd.error); + ncs_encode_32bit(&pstream, pevt->info.cpnd.type); + ncs_enc_claim_space(io_uba, 12); + + rc = cpsv_d2nd_ckpt_create_2_encode(&pevt->info.cpnd.info.ckpt_create, io_uba); + return rc; + + default: + break; + } + } return (m_NCS_EDU_VER_EXEC(&cb->edu_hdl, FUNC_NAME(CPSV_EVT), - enc_info->io_uba, EDP_OP_TYPE_ENC, msg_ptr, &ederror, + enc_info->io_uba, EDP_OP_TYPE_ENC, pevt, &ederror, enc_info->i_rem_svc_pvt_ver)); } else { - TRACE_4("INVALID MSG FORMAT IN ENC FULL"); /* Drop The Message,Format Version Invalid */ + LOG_IN("INVALID MSG FORMAT IN ENC FULL"); /* Drop The Message,Format Version Invalid */ return NCSCC_RC_FAILURE; } @@ -358,6 +381,7 @@ static uint32_t cpd_mds_dec(CPD_CB *cb, EDU_ERR ederror = 0; uint32_t rc = NCSCC_RC_SUCCESS; bool is_valid_msg_fmt = false; + uint8_t local_data[20]; if (dec_info->i_fr_svc_id == NCSMDS_SVC_ID_CPND) { is_valid_msg_fmt = m_NCS_MSG_FORMAT_IS_VALID(dec_info->i_msg_fmt_ver, @@ -371,16 +395,64 @@ static uint32_t cpd_mds_dec(CPD_CB *cb, memset(msg_ptr, 0, sizeof(CPSV_EVT)); dec_info->o_msg = (NCSCONTEXT)msg_ptr; + uint8_t *pstream = ncs_dec_flatten_space(dec_info->io_uba, local_data, 8); + msg_ptr->type = ncs_decode_32bit(&pstream); + + // if (msg_ptr->type == CPSV_EVT_TYPE_CPD) { + // msg_ptr->info.cpd.type = ncs_decode_32bit(&pstream); + + // switch (msg_ptr->info.cpd.type) { + // case CPD_EVT_ND2D_CKPT_CREATE: + // ncs_dec_skip_space(dec_info->io_uba, 8); + // rc = cpsv_nd2d_ckpt_create_2_decode(&msg_ptr->info.cpd.info.ckpt_create, dec_info->io_uba); + // if (rc != NCSCC_RC_SUCCESS) { + // LOG_ER("cpd mds decode failed "); + // m_MMGR_FREE_CPSV_EVT(dec_info->o_msg, NCS_SERVICE_ID_CPD); + // } + // return rc; + + // case CPD_EVT_ND2D_CKPT_UNLINK: + // ncs_dec_skip_space(dec_info->io_uba, 8); + // rc = cpsv_nd2d_ckpt_unlink_2_decode(&msg_ptr->info.cpd.info.ckpt_ulink, dec_info->io_uba); + // if (rc != NCSCC_RC_SUCCESS) { + // LOG_ER("cpd mds decode failed "); + // m_MMGR_FREE_CPSV_EVT(dec_info->o_msg, NCS_SERVICE_ID_CPD); + // } + // return rc; + + + // case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME: + // ncs_dec_skip_space(dec_info->io_uba, 8); + // rc = cpsv_nd2d_ckpt_destroy_byname_2_decode(&msg_ptr->info.cpd.info.ckpt_destroy_byname, dec_info->io_uba); + // if (rc != NCSCC_RC_SUCCESS) { + // LOG_ER("cpd mds decode failed "); + // m_MMGR_FREE_CPSV_EVT(dec_info->o_msg, NCS_SERVICE_ID_CPD); + // } + // return rc; + + // case CPD_EVT_ND2D_CKPT_INFO_UPDATE: + // ncs_dec_skip_space(dec_info->io_uba, 8); + // rc = cpsv_nd2d_ckpt_info_update_decode(&msg_ptr->info.cpd.info.ckpt_info, dec_info->io_uba); + // if (rc != NCSCC_RC_SUCCESS) { + // LOG_ER("cpd mds decode failed "); + // m_MMGR_FREE_CPSV_EVT(dec_info->o_msg, NCS_SERVICE_ID_CPD); + // } + // return rc; + + // default: + // break; + // } + // } rc = m_NCS_EDU_EXEC(&cb->edu_hdl, FUNC_NAME(CPSV_EVT), dec_info->io_uba, EDP_OP_TYPE_DEC, (CPSV_EVT **)&dec_info->o_msg, &ederror); if (rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpd mds decode failed "); + LOG_ER("cpd mds decode failed "); m_MMGR_FREE_CPSV_EVT(dec_info->o_msg, NCS_SERVICE_ID_CPD); } return rc; } else { - TRACE_4("cpd mds dec failed"); + LOG_ER("cpd mds dec failed - invalid fmr_ver = %d", dec_info->i_msg_fmt_ver); return NCSCC_RC_FAILURE; } } diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_mds.c b/osaf/services/saf/cpsv/cpnd/cpnd_mds.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_mds.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_mds.c @@ -330,6 +330,7 @@ static uint32_t cpnd_mds_enc(CPND_CB *cb ncs_enc_claim_space(io_uba, 8); rc = cpsv_data_access_rsp_encode(&pevt->info.cpa.info.sec_data_rsp, io_uba, enc_info->o_msg_fmt_ver); + TRACE_LEAVE(); return rc; } @@ -347,6 +348,7 @@ static uint32_t cpnd_mds_enc(CPND_CB *cb ncs_enc_claim_space(io_uba, 12); rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_nd2nd_sync, io_uba); + TRACE_LEAVE(); return rc; case CPSV_EVT_ND2ND_CKPT_SECT_ACTIVE_DATA_ACCESS_REQ: @@ -361,6 +363,7 @@ static uint32_t cpnd_mds_enc(CPND_CB *cb ncs_enc_claim_space(io_uba, 12); rc = cpsv_ckpt_access_encode(&pevt->info.cpnd.info.ckpt_nd2nd_data, io_uba); + TRACE_LEAVE(); return rc; case CPSV_EVT_ND2ND_CKPT_SECT_ACTIVE_DATA_ACCESS_RSP: @@ -375,14 +378,76 @@ static uint32_t cpnd_mds_enc(CPND_CB *cb ncs_enc_claim_space(io_uba, 12); rc = cpsv_data_access_rsp_encode(&pevt->info.cpnd.info.ckpt_nd2nd_data_rsp, io_uba, enc_info->o_msg_fmt_ver); + TRACE_LEAVE(); return rc; + default: break; } - } + } // else if (pevt->type == CPSV_EVT_TYPE_CPD) { + // switch (pevt->info.cpd.type) { + // case CPD_EVT_ND2D_CKPT_CREATE: + // pstream = ncs_enc_reserve_space(io_uba, 8); + // if (!pstream) + // return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, + // "Memory alloc failed in cpnd_mds_enc \n"); + // ncs_encode_32bit(&pstream, pevt->type); /* CPSV_EVT Type */ + // ncs_encode_32bit(&pstream, pevt->info.cpd.type); /* cpnd_evt SubType */ + // ncs_enc_claim_space(io_uba, 8); + + // rc = cpsv_nd2d_ckpt_create_2_encode(&pevt->info.cpd.info.ckpt_create, io_uba); + // TRACE_LEAVE(); + // return rc; + + // case CPD_EVT_ND2D_CKPT_UNLINK: + // pstream = ncs_enc_reserve_space(io_uba, 8); + // if (!pstream) + // return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, + // "Memory alloc failed in cpnd_mds_enc \n"); + // ncs_encode_32bit(&pstream, pevt->type); /* CPSV_EVT Type */ + // ncs_encode_32bit(&pstream, pevt->info.cpd.type); /* cpnd_evt SubType */ + // ncs_enc_claim_space(io_uba, 8); + + // rc = cpsv_nd2d_ckpt_unlink_2_encode(&pevt->info.cpd.info.ckpt_ulink, io_uba); + // TRACE_LEAVE(); + // return rc; + + // case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME: + // pstream = ncs_enc_reserve_space(io_uba, 8); + // if (!pstream) + // return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, + // "Memory alloc failed in cpnd_mds_enc \n"); + // ncs_encode_32bit(&pstream, pevt->type); /* CPSV_EVT Type */ + // ncs_encode_32bit(&pstream, pevt->info.cpd.type); /* cpnd_evt SubType */ + // ncs_enc_claim_space(io_uba, 8); + + // rc = cpsv_nd2d_ckpt_destroy_byname_2_encode(&pevt->info.cpd.info.ckpt_destroy_byname, io_uba); + // TRACE_LEAVE(); + // return rc; + + // case CPD_EVT_ND2D_CKPT_INFO_UPDATE: + // pstream = ncs_enc_reserve_space(io_uba, 8); + // if (!pstream) + // return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, + // "Memory alloc failed in cpnd_mds_enc \n"); + // ncs_encode_32bit(&pstream, pevt->type); /* CPSV_EVT Type */ + // ncs_encode_32bit(&pstream, pevt->info.cpd.type); /* cpnd_evt SubType */ + // ncs_enc_claim_space(io_uba, 8); + + // rc = cpsv_nd2d_ckpt_info_update_encode(&pevt->info.cpd.info.ckpt_info, io_uba); + // TRACE_LEAVE(); + // return rc; + + + // default: + // break; + // } + // } /* For all other Cases Invoke EDU encode */ - return (m_NCS_EDU_EXEC(&cb->cpnd_edu_hdl, FUNC_NAME(CPSV_EVT), - enc_info->io_uba, EDP_OP_TYPE_ENC, pevt, &ederror)); + rc = m_NCS_EDU_EXEC(&cb->cpnd_edu_hdl, FUNC_NAME(CPSV_EVT), + enc_info->io_uba, EDP_OP_TYPE_ENC, pevt, &ederror); + TRACE_LEAVE(); + return rc; } else { TRACE_LEAVE(); return m_CPSV_DBG_SINK(NCSCC_RC_FAILURE, "INVALID MSG FORMAT IN ENCODE FULL\n"); /* Drop The Message - Incompatible Message Format Version */ @@ -523,10 +588,16 @@ static uint32_t cpnd_mds_dec(CPND_CB *cb dec_info->io_uba,dec_info->i_msg_fmt_ver); goto free; - case CPND_EVT_A2ND_CKPT_REFCNTSET: - ncs_dec_skip_space(dec_info->io_uba, 12); - rc = cpsv_refcnt_ckptid_decode(&msg_ptr->info.cpnd.info.refCntsetReq,dec_info->io_uba); - goto free; + case CPND_EVT_A2ND_CKPT_REFCNTSET: + ncs_dec_skip_space(dec_info->io_uba, 12); + rc = cpsv_refcnt_ckptid_decode(&msg_ptr->info.cpnd.info.refCntsetReq,dec_info->io_uba); + goto free; + + case CPND_EVT_D2ND_CKPT_CREATE: + ncs_dec_skip_space(dec_info->io_uba, 12); + rc = cpsv_d2nd_ckpt_create_2_decode(&msg_ptr->info.cpnd.info.ckpt_create, dec_info->io_uba); + goto free; + default: break; } @@ -584,6 +655,7 @@ static uint32_t cpnd_mds_enc_flat(CPND_C CPND_WRT_CPD_SUBPART_VER_MAX, cpnd_cpd_msg_fmt_table); } + TRACE("o_msg_fmt_ver=%d, i_rem_svc_pvt_ver=%d", info->o_msg_fmt_ver, info->i_rem_svc_pvt_ver); if (info->o_msg_fmt_ver) { evt = (CPSV_EVT *)info->i_msg; ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel