Hi Gary, will try to post my comments by tomorrow at max. Thanks, Ramesh.
On 7/4/2016 1:56 PM, Gary Lee wrote: > Just a friendly reminder to review this patch. > > I would like to push the patch, as we’re planning to send out the long DN > patches for AMF this week, which is based on this proposal. > > Thanks > Gary > >> On 23 Jun 2016, at 4:17 PM, Gary Lee <gary....@dektech.com.au> wrote: >> >> osaf/libs/core/common/saf_edu.c | 34 ++-------- >> osaf/libs/core/include/ncsencdec_pub.h | 3 + >> osaf/libs/core/leap/hj_enc.c | 100 >> ++++++++++++++++++++++++++++++-- >> 3 files changed, 102 insertions(+), 35 deletions(-) >> >> >> Currently, ncs_edp_sanamet encodes a SaNameT by storing the length in 2 >> bytes, >> followed by a fixed char array of length SA_MAX_NAME_LENGTH. >> >> This patch adds long DN supoprt by: >> >> if length < SA_MAX_NAME_LENGTH, encode as present >> if length >= SA_MAX_NAME_LENGTH, encode as a variable string like >> ncs_edp_string >> >> diff --git a/osaf/libs/core/common/saf_edu.c >> b/osaf/libs/core/common/saf_edu.c >> --- a/osaf/libs/core/common/saf_edu.c >> +++ b/osaf/libs/core/common/saf_edu.c >> @@ -42,6 +42,7 @@ >> #include "saf_mem.h" >> #include "ncs_edu_pub.h" >> #include "ncs_saf_edu.h" >> +#include "osaf_extended_name.h" >> >> /***************************************************************************** >> >> @@ -57,36 +58,15 @@ >> uint32_t ncs_edp_sanamet(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; >> - SaNameT *struct_ptr = NULL, **d_ptr = NULL; >> - >> - EDU_INST_SET saname_rules[] = { >> - {EDU_START, ncs_edp_sanamet, 0, 0, 0, sizeof(SaNameT), 0, NULL}, >> - {EDU_EXEC, m_NCS_EDP_SAUINT16T, 0, 0, 0, >> - (long)&((SaNameT *)0)->length, 0, NULL}, >> - {EDU_EXEC, ncs_edp_uns8, EDQ_ARRAY, 0, 0, >> - (long)&((SaNameT *)0)->value, SA_MAX_NAME_LENGTH, NULL}, >> - {EDU_END, 0, 0, 0, 0, 0, 0, NULL}, >> - }; >> - >> if (op == EDP_OP_TYPE_ENC) { >> - struct_ptr = (SaNameT *)ptr; >> + const SaNameT *name = ptr; >> + osaf_encode_sanamet(buf_env->info.uba, name); >> } else if (op == EDP_OP_TYPE_DEC) { >> - d_ptr = (SaNameT **)ptr; >> - if (*d_ptr == NULL) { >> - *d_ptr = m_MMGR_ALLOC_EDP_SANAMET; >> - if (*d_ptr == NULL) { >> - *o_err = EDU_ERR_MEM_FAIL; >> - return NCSCC_RC_FAILURE; >> - } >> - } >> - memset(*d_ptr, '\0', sizeof(SaNameT)); >> - struct_ptr = *d_ptr; >> - } else { >> - struct_ptr = ptr; >> + SaNameT *name = *(SaNameT**)ptr; >> + osaf_decode_sanamet(buf_env->info.uba, name); >> } >> - rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, saname_rules, struct_ptr, >> ptr_data_len, buf_env, op, o_err); >> - return rc; >> + >> + return NCSCC_RC_SUCCESS; >> } >> >> /***************************************************************************** >> diff --git a/osaf/libs/core/include/ncsencdec_pub.h >> b/osaf/libs/core/include/ncsencdec_pub.h >> --- a/osaf/libs/core/include/ncsencdec_pub.h >> +++ b/osaf/libs/core/include/ncsencdec_pub.h >> @@ -153,6 +153,9 @@ void osaf_encode_uint64(NCS_UBAID *ub, u >> void osaf_decode_uint64(NCS_UBAID *ub, uint64_t *to); >> void osaf_encode_sanamet(NCS_UBAID *ub, const SaNameT *name); >> void osaf_decode_sanamet(NCS_UBAID *ub, SaNameT *name); >> +void osaf_encode_sanamet_o2(NCS_UBAID *ub, SaConstStringT name); >> +void osaf_encode_saconststring(NCS_UBAID *ub, SaConstStringT str); >> +void osaf_decode_sastring(NCS_UBAID *ub, SaStringT* str); >> void osaf_encode_satimet(NCS_UBAID *ub, SaTimeT time); >> void osaf_decode_satimet(NCS_UBAID *ub, SaTimeT *time); >> void osaf_encode_bool(NCS_UBAID *ub, bool value); >> diff --git a/osaf/libs/core/leap/hj_enc.c b/osaf/libs/core/leap/hj_enc.c >> --- a/osaf/libs/core/leap/hj_enc.c >> +++ b/osaf/libs/core/leap/hj_enc.c >> @@ -42,6 +42,9 @@ >> >> ******************************************************************************* >> */ >> +#ifndef SA_EXTENDED_NAME_SOURCE >> +#define SA_EXTENDED_NAME_SOURCE >> +#endif >> >> #include <ncsgl_defs.h> >> #include "ncs_osprm.h" >> @@ -49,6 +52,7 @@ >> #include "ncssysf_def.h" >> #include "ncssysf_mem.h" >> #include "ncs_svd.h" >> +#include "osaf_extended_name.h" >> >> /** A NULL os implies "count" number of zeros... >> **/ >> @@ -374,18 +378,49 @@ void osaf_decode_uint64(NCS_UBAID *ub, u >> >> void osaf_encode_sanamet(NCS_UBAID *ub, const SaNameT *name) >> { >> - int i; >> - osaf_encode_uint16(ub, name->length); >> - for (i = 0; i < SA_MAX_NAME_LENGTH; i++) >> - osaf_encode_uint8(ub, name->value[i]); >> + TRACE_ENTER(); >> + >> + SaConstStringT str = osaf_extended_name_borrow(name); >> + TRACE("str %s (%zu)", str, osaf_extended_name_length(name)); >> + osaf_encode_sanamet_o2(ub, str); >> + >> + TRACE_LEAVE(); >> } >> >> void osaf_decode_sanamet(NCS_UBAID *ub, SaNameT *name) >> { >> - int i; >> - osaf_decode_uint16(ub, &name->length); >> - for (i = 0; i < SA_MAX_NAME_LENGTH; i++) >> - osaf_decode_uint8(ub, &name->value[i]); >> + TRACE_ENTER(); >> + >> + SaStringT str; >> + uint16_t len; >> + >> + // get the length of the SaNameT >> + osaf_decode_uint16(ub, &len); >> + osafassert(len < 65535); >> + >> + if (len < SA_MAX_UNEXTENDED_NAME_LENGTH) { >> + // string is encoded as a fixed 256 char array >> + str = (SaStringT)malloc(SA_MAX_UNEXTENDED_NAME_LENGTH * >> sizeof(char)); >> + osafassert(str != NULL); >> + >> + uint8_t *p8 = decode_flatten_space(ub, (uint8_t*)str, >> SA_MAX_UNEXTENDED_NAME_LENGTH); >> + memcpy(str, p8, SA_MAX_UNEXTENDED_NAME_LENGTH * sizeof(char)); >> + ncs_dec_skip_space(ub, SA_MAX_UNEXTENDED_NAME_LENGTH); >> + } else { >> + str = (SaStringT)malloc((len + 1) * sizeof(char)); >> + osafassert(str != NULL); >> + >> + uint8_t *p8 = decode_flatten_space(ub, (uint8_t*)str, len); >> + memcpy(str, p8, len * sizeof(char)); >> + ncs_dec_skip_space(ub, len); >> + >> + str[len] = '\0'; >> + } >> + TRACE("str: %s (%u)", str, len); >> + osaf_extended_name_alloc(str, name); >> + free(str); >> + >> + TRACE_LEAVE(); >> } >> >> void osaf_encode_saclmnodeaddresst(NCS_UBAID *ub, const SaClmNodeAddressT >> *addr) >> @@ -408,6 +443,55 @@ void osaf_decode_saclmnodeaddresst(NCS_U >> } >> } >> >> +void osaf_encode_sanamet_o2(NCS_UBAID *ub, SaConstStringT name) >> +{ >> + TRACE_ENTER(); >> + >> + int i; >> + const size_t len = strlen(name); >> + >> + if (len < SA_MAX_UNEXTENDED_NAME_LENGTH) { >> + // encode a fixed 256 char string, to ensure >> + // we are backwards compatible >> + osaf_encode_uint16(ub, len); >> + >> + for (i = 0; i < len; i++) { >> + osaf_encode_uint8(ub, name[i]); >> + } >> + >> + // need to encode SA_MAX_UNEXTENDED_NAME_LENGTH characters to >> remain >> + // compatible with legacy osaf_decode_sanamet() [without long >> DN support] >> + for (i = len; i < SA_MAX_UNEXTENDED_NAME_LENGTH; i++) { >> + osaf_encode_uint8(ub, 0); >> + } >> + } else { >> + // encode as a variable string >> + osaf_encode_saconststring(ub, name); >> + } >> + >> + TRACE_LEAVE(); >> +} >> + >> +void osaf_encode_saconststring(NCS_UBAID *ub, SaConstStringT str) >> +{ >> + size_t len = strlen(str); >> + >> + TRACE_ENTER2("%s (%zu)", str, len); >> + >> + // len is encoded in 16 bits, max length is 2^16 >> + // this is done to remain compatible with ncs_edp_string >> + osafassert(len < 65535); >> + osaf_encode_uint16(ub, len); >> + >> + // encode 'str' >> + uint8_t *p8 = encode_reserve_space(ub, len); >> + osafassert(p8); >> + memcpy(p8, str, len * sizeof(char)); >> + ncs_enc_claim_space(ub, len); >> + >> + TRACE_LEAVE(); >> +} >> + >> void osaf_encode_satimet(NCS_UBAID *ub, SaTimeT time) >> { >> osaf_encode_uint64(ub, time); >> >> ------------------------------------------------------------------------------ >> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San >> Francisco, CA to explore cutting-edge tech and listen to tech luminaries >> present their vision of the future. This family event has something for >> everyone, including kids. Get more information and register today. >> http://sdm.link/attshape >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel