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 <[email protected]> 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 > [email protected] > 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 [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
