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

Reply via email to