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

Reply via email to