Hi Vu,

For this patch ACK, no comments

Thanks
Lennart

> -----Original Message-----
> From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au]
> Sent: den 1 juli 2016 12:42
> To: mahesh.va...@oracle.com; Lennart Lund <lennart.l...@ericsson.com>
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [PATCH 2 of 4] log: update LOG agent to support Long DN & RDN
> [#1315]
> 
>  osaf/libs/agents/saf/lga/Makefile.am |    1 +
>  osaf/libs/agents/saf/lga/lga.h       |    5 +-
>  osaf/libs/agents/saf/lga/lga_api.c   |  110 ++++++++++------------
>  osaf/libs/agents/saf/lga/lga_mds.c   |  168 +++++++++++++++++++++--------
> -----
>  osaf/libs/agents/saf/lga/lga_state.c |    7 +-
>  osaf/libs/agents/saf/lga/lga_util.c  |   49 ++++++++-
>  osaf/libs/saf/libSaLog/Makefile.am   |    1 +
>  7 files changed, 206 insertions(+), 135 deletions(-)
> 
> 
> Replace all internal SaNameT by C string and make log agent support long DN,
> but keep backward compatible.
> 
> diff --git a/osaf/libs/agents/saf/lga/Makefile.am
> b/osaf/libs/agents/saf/lga/Makefile.am
> --- a/osaf/libs/agents/saf/lga/Makefile.am
> +++ b/osaf/libs/agents/saf/lga/Makefile.am
> @@ -26,6 +26,7 @@ noinst_HEADERS = \
>  noinst_LTLIBRARIES = liblga.la
> 
>  liblga_la_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/libs/common/logsv/include
> 
> diff --git a/osaf/libs/agents/saf/lga/lga.h b/osaf/libs/agents/saf/lga/lga.h
> --- a/osaf/libs/agents/saf/lga/lga.h
> +++ b/osaf/libs/agents/saf/lga/lga.h
> @@ -44,7 +44,7 @@
>  /* Log Stream Handle Definition */
>  typedef struct lga_log_stream_hdl_rec {
>       unsigned int log_stream_hdl;    /* Log stream HDL from handle mgr
> */
> -     SaNameT log_stream_name;        /* log stream name mentioned
> during open log stream */
> +     char *log_stream_name;  /* log stream name mentioned
> during open log stream */
>       unsigned int open_flags;        /* log stream open flags as defined in
> AIS.02.01 */
>       unsigned int log_header_type;   /* log header type */
>       unsigned int lgs_log_stream_id; /* server reference for this
> log stream */
> @@ -141,7 +141,7 @@ extern lga_client_hdl_rec_t *lga_hdl_rec
>  extern lga_log_stream_hdl_rec_t
> *lga_log_stream_hdl_rec_add(lga_client_hdl_rec_t **hdl_rec,
>                                                           uint32_t
> log_stream_id,
>                                                           uint32_t
> log_stream_open_flags,
> -                                                         const SaNameT
> *logStreamName, uint32_t log_header_type);
> +                                                         const char
> *logStreamName, uint32_t log_header_type);
>  extern void lga_hdl_list_del(lga_client_hdl_rec_t **);
>  extern uint32_t lga_hdl_rec_del(lga_client_hdl_rec_t **,
> lga_client_hdl_rec_t *);
>  extern uint32_t lga_log_stream_hdl_rec_del(lga_log_stream_hdl_rec_t **,
> lga_log_stream_hdl_rec_t *);
> @@ -150,5 +150,6 @@ extern bool lga_validate_lga_client_hdl(
>  /* lga_util.c */
>  extern lga_client_hdl_rec_t *lga_find_hdl_rec_by_regid(lga_cb_t *lga_cb,
> uint32_t client_id);
>  extern void lga_msg_destroy(lgsv_msg_t *msg);
> +extern bool lga_is_extended_name_valid(const SaNameT* name);
> 
>  #endif   /* !LGA_H */
> diff --git a/osaf/libs/agents/saf/lga/lga_api.c
> b/osaf/libs/agents/saf/lga/lga_api.c
> --- a/osaf/libs/agents/saf/lga/lga_api.c
> +++ b/osaf/libs/agents/saf/lga/lga_api.c
> @@ -18,6 +18,7 @@
>  #include <string.h>
>  #include <saf_error.h>
>  #include "lga.h"
> +#include "osaf_extended_name.h"
> 
>  #include "lga_state.h"
> 
> @@ -71,17 +72,17 @@ static bool is_lgs_state(lgs_state_t sta
>  }
> 
>  static void populate_open_params(lgsv_stream_open_req_t *open_param,
> -                              const SaNameT *logStreamName,
> +                              const char *logStreamName,
>                                lga_client_hdl_rec_t *hdl_rec,
>                                SaLogFileCreateAttributesT_2
> *logFileCreateAttributes,
>                                SaLogStreamOpenFlagsT
> logStreamOpenFlags)
>  {
>       TRACE_ENTER();
>       open_param->client_id = hdl_rec->lgs_client_id;
> -     open_param->lstr_name = *logStreamName;
> +     osaf_extended_name_lend(logStreamName, &open_param-
> >lstr_name);
> 
>       if (logFileCreateAttributes == NULL ||
> -         is_well_know_stream((const char*)logStreamName->value)) {
> +         is_well_know_stream(logStreamName)) {
>               open_param->logFileFmt = NULL;
>               open_param->logFileFmtLength = 0;
>               open_param->maxLogFileSize = 0;
> @@ -575,7 +576,7 @@ SaAisErrorT saLogFinalize(SaLogHandleT l
>   * @return
>   */
>  static SaAisErrorT validate_open_params(
> -     const SaNameT *logStreamName,
> +     const char *logStreamName,
>       const SaLogFileCreateAttributesT_2 *logFileCreateAttributes,
>       SaLogStreamOpenFlagsT logStreamOpenFlags,
>       SaLogStreamHandleT *logStreamHandle,
> @@ -589,38 +590,22 @@ static SaAisErrorT validate_open_params(
> 
>       osafassert(header_type != NULL);
> 
> -     if ((NULL == logStreamName) || (NULL == logStreamHandle)) {
> +     if (NULL == logStreamHandle) {
>               TRACE("SA_AIS_ERR_INVALID_PARAM => NULL pointer
> check");
>               ais_rc = SA_AIS_ERR_INVALID_PARAM;
>               goto done;
>       }
> -
> -     /* Note:
> -      * logStreamName is of type SaNameT this means that length
> normally is not
> -      * allowed to be > SA_MAX_NAME_LENGTH - 1 (255). SaNameT also
> means that
> -      * value does not have to be '\0' terminated.
> -      * HOWEVER:
> -      * This parameter does not follow these rules. In this case value shall
> be
> -      * '\0' terminated and length can be 256.
> -      * In order to not break backwards compatibility this should not be
> changed.
> -      */
> -     if (logStreamName->length >= SA_MAX_NAME_LENGTH) {
> -             TRACE("SA_AIS_ERR_INVALID_PARAM, logStreamName-
> >length > SA_MAX_NAME_LENGTH");
> -             ais_rc = SA_AIS_ERR_INVALID_PARAM;
> -             goto done;
> -     }
> 
>       /* Check log stream input parameters */
>       /* The well known log streams */
> -     if (is_well_know_stream((const char *)logStreamName->value) ==
> true) {
> +     if (is_well_know_stream(logStreamName) == true) {
>               /* SA_AIS_ERR_INVALID_PARAM, bullet 3 in SAI-AIS-LOG-
> A.02.01
>                  Section 3.6.1, Return Values */
>               if ((NULL != logFileCreateAttributes) || (logStreamOpenFlags
> == SA_LOG_STREAM_CREATE)) {
>                       TRACE("SA_AIS_ERR_INVALID_PARAM,
> logStreamOpenFlags");
>                       return SA_AIS_ERR_INVALID_PARAM;
>               }
> -             if (strcmp((const char *)logStreamName->value,  /*
> Well known log streams */
> -                        SA_LOG_STREAM_SYSTEM) == 0) {
> +             if (strcmp(logStreamName, SA_LOG_STREAM_SYSTEM) == 0)
> {
>                       *header_type =
> (uint32_t)SA_LOG_GENERIC_HEADER;
>               } else {
>                       *header_type = (uint32_t)SA_LOG_NTF_HEADER;
> @@ -651,8 +636,8 @@ static SaAisErrorT validate_open_params(
> 
>               /* SA_AIS_ERR_INVALID_PARAM, bullet 5 in SAI-AIS-LOG-
> A.02.01
>                  Section 3.6.1, Return Values */
> -             if (strncmp((const char *)logStreamName->value,
> "safLgStr=", 9) &&
> -                             strncmp((const char *)logStreamName-
> >value, "safLgStrCfg=", 12)) {
> +             if (strncmp(logStreamName, "safLgStr=", 9) &&
> +                 strncmp(logStreamName, "safLgStrCfg=", 12)) {
>                       TRACE("\"safLgStr=\" is missing in logStreamName");
>                       return SA_AIS_ERR_INVALID_PARAM;
>               }
> @@ -764,7 +749,15 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl
> 
>       TRACE_ENTER();
> 
> -     ais_rc = validate_open_params(logStreamName,
> logFileCreateAttributes,
> +     if (lga_is_extended_name_valid(logStreamName) == false) {
> +             TRACE("logStreamName is invalid");
> +             ais_rc = SA_AIS_ERR_INVALID_PARAM;
> +             goto done;
> +     }
> +
> +     SaConstStringT streamName =
> osaf_extended_name_borrow(logStreamName);
> +
> +     ais_rc = validate_open_params(streamName,
> logFileCreateAttributes,
>                                 logStreamOpenFlags, logStreamHandle,
> &log_header_type);
>       if (ais_rc != SA_AIS_OK)
>               goto done;
> @@ -842,7 +835,7 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl
>       open_param->logFilePathName = NULL;
> 
>       populate_open_params(open_param,
> -                          logStreamName,
> +                          streamName,
>                            hdl_rec,
>                            (SaLogFileCreateAttributesT_2
> *)logFileCreateAttributes,
>                            logStreamOpenFlags);
> @@ -911,7 +904,7 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl
>       lstr_hdl_rec = lga_log_stream_hdl_rec_add(
>               &hdl_rec,
>               log_stream_id, logStreamOpenFlags,
> -             logStreamName, log_header_type
> +             streamName, log_header_type
>               );
>       if (lstr_hdl_rec == NULL) {
>               osaf_mutex_unlock_ordie(&lga_cb.cb_lock);
> @@ -979,7 +972,7 @@ SaAisErrorT saLogStreamOpenAsync_2(SaLog
>   * @return AIS return code
>   */
>  static SaAisErrorT handle_log_record(const SaLogRecordT *logRecord,
> -     SaNameT *logSvcUsrName,
> +     char *logSvcUsrName,
>       lgsv_write_log_async_req_t *write_param,
>       SaTimeT *const logTimeStamp)
>  {
> @@ -1039,51 +1032,41 @@ static SaAisErrorT handle_log_record(con
>                               ais_rc = SA_AIS_ERR_INVALID_PARAM;
>                               goto done;
>                       }
> -                     logSvcUsrName->length = strlen(logSvcUsrChars);
> -                     if (logSvcUsrName->length >=
> SA_MAX_NAME_LENGTH) {
> +                     if (strlen(logSvcUsrName) >= kOsafMaxDnLength) {
>                               TRACE("SA_AMF_COMPONENT_NAME is too
> long");
>                               ais_rc = SA_AIS_ERR_INVALID_PARAM;
>                               goto done;
>                       }
> -                     strcpy((char *)logSvcUsrName->value,
> logSvcUsrChars);
> -                     write_param->logSvcUsrName = logSvcUsrName;
> +                     strcpy(logSvcUsrName, logSvcUsrChars);
> +                     osaf_extended_name_lend(logSvcUsrName,
> write_param->logSvcUsrName);
>               } else {
> -                     if (logRecord-
> >logHeader.genericHdr.logSvcUsrName->length >=
> -                             SA_MAX_NAME_LENGTH) {
> -                             TRACE("logSvcUsrName too long");
> +                     if (lga_is_extended_name_valid(
> +                                 logRecord-
> >logHeader.genericHdr.logSvcUsrName
> +                                 ) == false) {
> +                             TRACE("Invalid logSvcUsrName");
>                               ais_rc = SA_AIS_ERR_INVALID_PARAM;
>                               goto done;
>                       }
> -                     logSvcUsrName->length =
> -                             logRecord-
> >logHeader.genericHdr.logSvcUsrName->length;
> -                     write_param->logSvcUsrName =
> -                             (SaNameT *)logRecord-
> >logHeader.genericHdr.logSvcUsrName;
> +                     osaf_extended_name_lend(
> +                             osaf_extended_name_borrow(logRecord-
> >logHeader.genericHdr.logSvcUsrName),
> +                             write_param->logSvcUsrName
> +                             );
>               }
>       }
> 
>       if (logRecord->logHdrType == SA_LOG_NTF_HEADER) {
> -             if (logRecord->logHeader.ntfHdr.notificationObject == NULL)
> {
> -                     TRACE("notificationObject == NULL");
> +             if (lga_is_extended_name_valid(
> +                         logRecord->logHeader.ntfHdr.notificationObject
> +                         ) == false) {
> +                     TRACE("Invalid notificationObject");
>                       ais_rc = SA_AIS_ERR_INVALID_PARAM;
>                       goto done;
>               }
> 
> -             if (logRecord->logHeader.ntfHdr.notificationObject->length
> >=
> -                     SA_MAX_NAME_LENGTH) {
> -                     TRACE("notificationObject.length >=
> SA_MAX_NAME_LENGTH");
> -                     ais_rc = SA_AIS_ERR_INVALID_PARAM;
> -                     goto done;
> -             }
> -
> -             if (logRecord->logHeader.ntfHdr.notifyingObject == NULL) {
> -                     TRACE("notifyingObject == NULL");
> -                     ais_rc = SA_AIS_ERR_INVALID_PARAM;
> -                     goto done;
> -             }
> -
> -             if (logRecord->logHeader.ntfHdr.notifyingObject->length >=
> -                     SA_MAX_NAME_LENGTH) {
> -                     TRACE("notifyingObject.length >=
> SA_MAX_NAME_LENGTH");
> +             if (lga_is_extended_name_valid(
> +                         logRecord->logHeader.ntfHdr.notifyingObject
> +                         ) == false) {
> +                     TRACE("Invalid notifyingObject");
>                       ais_rc = SA_AIS_ERR_INVALID_PARAM;
>                       goto done;
>               }
> @@ -1126,13 +1109,16 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre
>       lgsv_msg_t msg;
>       SaAisErrorT ais_rc = SA_AIS_OK;
>       lgsv_write_log_async_req_t *write_param;
> -     SaNameT logSvcUsrName;
> +     char logSvcUsrName[kOsafMaxDnLength] = {0};
>       int rc;
>       bool is_recovery2_locked = false;
> +     SaNameT tmpSvcUsrName;
> +
> +     TRACE_ENTER();
> 
>       memset(&(msg), 0, sizeof(lgsv_msg_t));
>       write_param = &msg.info.api_info.param.write_log_async;
> -     TRACE_ENTER();
> +     write_param->logSvcUsrName = &tmpSvcUsrName;
> 
>       if ((ackFlags != 0) && (ackFlags != SA_LOG_RECORD_WRITE_ACK)) {
>               TRACE("SA_AIS_ERR_BAD_FLAGS=> ackFlags");
> @@ -1144,7 +1130,7 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre
>        * logSvcUsrName from environment variable
> SA_AMF_COMPONENT_NAME
>        */
>       SaTimeT logTimeStamp;
> -     ais_rc = handle_log_record(logRecord, &logSvcUsrName,
> write_param, &logTimeStamp);
> +     ais_rc = handle_log_record(logRecord, logSvcUsrName,
> write_param, &logTimeStamp);
>       if (ais_rc != SA_AIS_OK) {
>               TRACE("%s: Validate Log record Fail", __FUNCTION__);
>               goto done;
> @@ -1163,7 +1149,7 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre
> 
>       if (logRecord->logBuffer != NULL && logRecord->logBuffer->logBuf
> != NULL) {
>               SaSizeT size = logRecord->logBuffer->logBufSize;
> -             if (is_well_know_stream((const char*)lstr_hdl_rec-
> >log_stream_name.value) == true) {
> +             if (is_well_know_stream(lstr_hdl_rec->log_stream_name)
> == true) {
>                       bool sizeOver = size > strlen((char *)logRecord-
> >logBuffer->logBuf) + 1;
>                       /* Prevent log client accidently assign too big number
> to logBufSize. */
>                       if (sizeOver == true) {
> diff --git a/osaf/libs/agents/saf/lga/lga_mds.c
> b/osaf/libs/agents/saf/lga/lga_mds.c
> --- a/osaf/libs/agents/saf/lga/lga_mds.c
> +++ b/osaf/libs/agents/saf/lga/lga_mds.c
> @@ -19,6 +19,8 @@
>  #include <saf_error.h>
>  #include "lga.h"
>  #include "lga_state.h"
> +#include "osaf_extended_name.h"
> +
> 
>  static MDS_CLIENT_MSG_FORMAT_VER
> 
> LGA_WRT_LGS_MSG_FMT_ARRAY[LGA_WRT_LGS_SUBPART_VER_RANGE]
> = {
> @@ -126,14 +128,17 @@ static uint32_t lga_enc_lstr_open_sync_m
>               TRACE("p8 NULL!!!");
>               return 0;
>       }
> +
> +     SaConstStringT value = osaf_extended_name_borrow(&param-
> >lstr_name);
> +     size_t length = strlen(value);
>       ncs_encode_32bit(&p8, param->client_id);
> -     ncs_encode_16bit(&p8, param->lstr_name.length);
> +     ncs_encode_16bit(&p8, length);
>       ncs_enc_claim_space(uba, 6);
>       total_bytes += 6;
> 
>       /* Encode log stream name */
> -     ncs_encode_n_octets_in_uba(uba, param->lstr_name.value,
> (uint32_t)param->lstr_name.length);
> -     total_bytes += (uint32_t)param->lstr_name.length;
> +     ncs_encode_n_octets_in_uba(uba, (uint8_t *)value,
> (uint32_t)length);
> +     total_bytes += (uint32_t) length;
> 
>       /* Encode logFileName if initiated */
>       p8 = ncs_enc_reserve_space(uba, 2);
> @@ -277,6 +282,96 @@ static uint32_t lga_enc_lstr_close_msg(N
>       return total_bytes;
>  }
> 
> +static uint32_t lga_enc_write_ntf_header(NCS_UBAID *uba, const
> SaLogNtfLogHeaderT *ntfLogH)
> +{
> +     uint8_t *p8;
> +     uint32_t total_bytes = 0;
> +
> +     p8 = ncs_enc_reserve_space(uba, 14);
> +     if (!p8) {
> +             TRACE("Could not reserve space");
> +             return 0;
> +     }
> +     ncs_encode_64bit(&p8, ntfLogH->notificationId);
> +     ncs_encode_32bit(&p8, (uint32_t)ntfLogH->eventType);
> +
> +     SaConstStringT value = osaf_extended_name_borrow(ntfLogH-
> >notificationObject);
> +     size_t length = strlen(value);
> +
> +     ncs_encode_16bit(&p8, length);
> +     ncs_enc_claim_space(uba, 14);
> +     total_bytes += 14;
> +
> +     ncs_encode_n_octets_in_uba(uba, (uint8_t *)value,
> (uint32_t)length);
> +     total_bytes += (uint32_t)length;
> +
> +     p8 = ncs_enc_reserve_space(uba, 2);
> +     if (!p8) {
> +             TRACE("Could not reserve space");
> +             return 0;
> +     }
> +
> +     SaConstStringT notifObj = osaf_extended_name_borrow(ntfLogH-
> >notifyingObject);
> +     size_t notifLength = strlen(notifObj);
> +     ncs_encode_16bit(&p8, notifLength);
> +     ncs_enc_claim_space(uba, 2);
> +     total_bytes += 2;
> +
> +     ncs_encode_n_octets_in_uba(uba, (uint8_t *)notifObj,
> (uint32_t)notifLength);
> +     total_bytes += (uint32_t)notifLength;
> +
> +     p8 = ncs_enc_reserve_space(uba, 16);
> +     if (!p8) {
> +             TRACE("Could not reserve space");
> +             return 0;
> +     }
> +     ncs_encode_32bit(&p8, ntfLogH->notificationClassId->vendorId);
> +     ncs_encode_16bit(&p8, ntfLogH->notificationClassId->majorId);
> +     ncs_encode_16bit(&p8, ntfLogH->notificationClassId->minorId);
> +     ncs_encode_64bit(&p8, ntfLogH->eventTime);
> +     ncs_enc_claim_space(uba, 16);
> +     total_bytes += 16;
> +
> +     return total_bytes;
> +}
> +
> +static uint32_t lga_enc_write_gen_header(NCS_UBAID *uba,
> +                                      const lgsv_write_log_async_req_t
> *param,
> +                                      const SaLogGenericLogHeaderT
> *genLogH)
> +{
> +     uint8_t *p8;
> +     uint32_t total_bytes = 0;
> +
> +     p8 = ncs_enc_reserve_space(uba, 10);
> +     if (!p8) {
> +             TRACE("Could not reserve space");
> +             return 0;
> +     }
> +     ncs_encode_32bit(&p8, 0);
> +     ncs_encode_16bit(&p8, 0);
> +     ncs_encode_16bit(&p8, 0);
> +
> +     SaConstStringT usrName = osaf_extended_name_borrow(param-
> >logSvcUsrName);
> +     size_t nameLength = strlen(usrName) + 1;
> +
> +     ncs_encode_16bit(&p8, nameLength);
> +     ncs_enc_claim_space(uba, 10);
> +     total_bytes += 10;
> +
> +     ncs_encode_n_octets_in_uba(uba, (uint8_t *)usrName,
> (uint32_t)nameLength);
> +     total_bytes += (uint32_t)nameLength;
> +
> +     p8 = ncs_enc_reserve_space(uba, 2);
> +     if (!p8) {
> +             TRACE("Could not reserve space");
> +             return 0;
> +     }
> +     ncs_encode_16bit(&p8, genLogH->logSeverity);
> +     total_bytes += 2;
> +
> +     return total_bytes;
> +}
> +
> 
> /**********************************************************
> ******************
>    Name          : lga_enc_write_log_async_msg
> 
> @@ -323,77 +418,24 @@ static uint32_t lga_enc_write_log_async_
>       total_bytes += 12;
> 
>       /* Alarm and application streams so far. */
> -
> +     uint32_t bytecount = 0;
>       switch (param->logRecord->logHdrType) {
>       case SA_LOG_NTF_HEADER:
>               ntfLogH = &param->logRecord->logHeader.ntfHdr;
> -             p8 = ncs_enc_reserve_space(uba, 14);
> -             if (!p8) {
> -                     TRACE("Could not reserve space");
> -                     return 0;
> -             }
> -             ncs_encode_64bit(&p8, ntfLogH->notificationId);
> -             ncs_encode_32bit(&p8, (uint32_t)ntfLogH->eventType);
> -             ncs_encode_16bit(&p8, ntfLogH->notificationObject-
> >length);
> -             ncs_enc_claim_space(uba, 14);
> -             total_bytes += 14;
> 
> -             ncs_encode_n_octets_in_uba(uba,
> -                                        ntfLogH->notificationObject->value,
> -                                        (uint32_t)ntfLogH-
> >notificationObject->length);
> -             total_bytes += ntfLogH->notificationObject->length;
> +             bytecount = lga_enc_write_ntf_header(uba, ntfLogH);
> +             if (bytecount == 0) return 0;
> 
> -             p8 = ncs_enc_reserve_space(uba, 2);
> -             if (!p8) {
> -                     TRACE("Could not reserve space");
> -                     return 0;
> -             }
> -             ncs_encode_16bit(&p8, ntfLogH->notifyingObject->length);
> -             ncs_enc_claim_space(uba, 2);
> -             total_bytes += 2;
> -
> -             ncs_encode_n_octets_in_uba(uba, ntfLogH-
> >notifyingObject->value, ntfLogH->notifyingObject->length);
> -             total_bytes += ntfLogH->notifyingObject->length;
> -
> -             p8 = ncs_enc_reserve_space(uba, 16);
> -             if (!p8) {
> -                     TRACE("Could not reserve space");
> -                     return 0;
> -             }
> -             ncs_encode_32bit(&p8, ntfLogH->notificationClassId-
> >vendorId);
> -             ncs_encode_16bit(&p8, ntfLogH->notificationClassId-
> >majorId);
> -             ncs_encode_16bit(&p8, ntfLogH->notificationClassId-
> >minorId);
> -             ncs_encode_64bit(&p8, ntfLogH->eventTime);
> -             ncs_enc_claim_space(uba, 16);
> -             total_bytes += 16;
> +             total_bytes += bytecount;
>               break;
> 
>       case SA_LOG_GENERIC_HEADER:
>               genLogH = &param->logRecord->logHeader.genericHdr;
> -             p8 = ncs_enc_reserve_space(uba, 10);
> -             if (!p8) {
> -                     TRACE("Could not reserve space");
> -                     return 0;
> -             }
> -             ncs_encode_32bit(&p8, 0);
> -             ncs_encode_16bit(&p8, 0);
> -             ncs_encode_16bit(&p8, 0);
> -             ncs_encode_16bit(&p8, param->logSvcUsrName->length);
> -             ncs_enc_claim_space(uba, 10);
> -             total_bytes += 10;
> 
> -             ncs_encode_n_octets_in_uba(uba,
> -                                        (uint8_t *)param->logSvcUsrName-
> >value, (uint32_t)param->logSvcUsrName->length);
> -             total_bytes += param->logSvcUsrName->length;
> +             bytecount = lga_enc_write_gen_header(uba, param,
> genLogH);
> +             if (bytecount == 0) return 0;
> 
> -             p8 = ncs_enc_reserve_space(uba, 2);
> -             if (!p8) {
> -                     TRACE("Could not reserve space");
> -                     return 0;
> -             }
> -             ncs_encode_16bit(&p8, genLogH->logSeverity);
> -             total_bytes += 2;
> -
> +             total_bytes += bytecount;
>               break;
> 
>       default:
> diff --git a/osaf/libs/agents/saf/lga/lga_state.c
> b/osaf/libs/agents/saf/lga/lga_state.c
> --- a/osaf/libs/agents/saf/lga/lga_state.c
> +++ b/osaf/libs/agents/saf/lga/lga_state.c
> @@ -24,6 +24,7 @@
>  #include <osaf_time.h>
>  #include <saf_error.h>
> 
> +#include "osaf_extended_name.h"
>  /***
>   * Common data
>   */
> @@ -137,8 +138,10 @@ static int send_stream_open_msg(uint32_t
>       const uint32_t sleep_delay_ms = 100;
> 
>       TRACE_ENTER();
> +     osafassert(p_stream->log_stream_name != NULL &&
> "log_stream_name is NULL");
> +
>       TRACE("\t log_stream_name \"%s\", lgs_client_id=%d",
> -             p_stream->log_stream_name.value, p_client-
> >lgs_client_id);
> +             p_stream->log_stream_name, p_client->lgs_client_id);
> 
>       /* Populate a stream open message to the LGS
>        */
> @@ -147,7 +150,7 @@ static int send_stream_open_msg(uint32_t
> 
>       /* Set the open parameters to open a stream for recovery */
>       open_param->client_id = p_client->lgs_client_id;
> -     open_param->lstr_name = p_stream->log_stream_name;
> +     osaf_extended_name_lend(p_stream->log_stream_name,
> &open_param->lstr_name);
>       open_param->logFileFmt = NULL;
>       open_param->logFileFmtLength = 0;
>       open_param->maxLogFileSize = 0;
> diff --git a/osaf/libs/agents/saf/lga/lga_util.c
> b/osaf/libs/agents/saf/lga/lga_util.c
> --- a/osaf/libs/agents/saf/lga/lga_util.c
> +++ b/osaf/libs/agents/saf/lga/lga_util.c
> @@ -20,6 +20,7 @@
>  #include "lga.h"
>  #include "osaf_poll.h"
>  #include "lga_state.h"
> +#include "osaf_extended_name.h"
> 
>  /* Variables used during startup/shutdown only */
>  static pthread_mutex_t lga_lock = PTHREAD_MUTEX_INITIALIZER;
> @@ -125,10 +126,17 @@ static void lga_log_stream_hdl_rec_list_
>       lga_log_stream_hdl_rec_t *lstr_hdl;
>       TRACE_ENTER();
>       while ((lstr_hdl = *plstr_hdl) != NULL) {
> +             TRACE("%s stream \"%s\", hdl = %d",__FUNCTION__,
> lstr_hdl->log_stream_name != NULL ?
> +                   (lstr_hdl->log_stream_name) : ("NULL"), lstr_hdl-
> >log_stream_hdl);
>               *plstr_hdl = lstr_hdl->next;
> -             TRACE("%s stream \"%s\", hdl = %d",__FUNCTION__,
> -                     lstr_hdl->log_stream_name.value, lstr_hdl-
> >log_stream_hdl);
>               ncshm_destroy_hdl(NCS_SERVICE_ID_LGA, lstr_hdl-
> >log_stream_hdl);
> +
> +             /* Check NULL to avoid the case: initialize -> finalize */
> +             if (lstr_hdl->log_stream_name != NULL)  {
> +                     free(lstr_hdl->log_stream_name);
> +                     lstr_hdl->log_stream_name = NULL;
> +             }
> +
>               free(lstr_hdl);
>               lstr_hdl = NULL;
>       }
> @@ -503,10 +511,15 @@ uint32_t lga_log_stream_hdl_rec_del(lga_
>       lga_log_stream_hdl_rec_t *list_iter = *list_head;
> 
>       /* If the to be removed record is the first record */
> -     if (list_iter == rm_node) {
> +     if (rm_node != NULL && list_iter == rm_node) {
>               *list_head = rm_node->next;
>       /** remove the association with hdl-mngr
>           **/
> +             if (rm_node->log_stream_name != NULL) {
> +                     free(rm_node->log_stream_name);
> +                     rm_node->log_stream_name = NULL;
> +             }
> +
>               ncshm_give_hdl(rm_node->log_stream_hdl);
>               ncshm_destroy_hdl(NCS_SERVICE_ID_LGA, rm_node-
> >log_stream_hdl);
>               free(rm_node);
> @@ -519,6 +532,11 @@ uint32_t lga_log_stream_hdl_rec_del(lga_
>                               list_iter->next = rm_node->next;
>               /** remove the association with hdl-mngr
>                   **/
> +                             if (rm_node->log_stream_name != NULL) {
> +                                     free(rm_node->log_stream_name);
> +                                     rm_node->log_stream_name =
> NULL;
> +                             }
> +
>                               ncshm_give_hdl(rm_node-
> >log_stream_hdl);
>                               ncshm_destroy_hdl(NCS_SERVICE_ID_LGA,
> rm_node->log_stream_hdl);
>                               free(rm_node);
> @@ -620,7 +638,7 @@ uint32_t lga_hdl_rec_del(lga_client_hdl_
>  lga_log_stream_hdl_rec_t
> *lga_log_stream_hdl_rec_add(lga_client_hdl_rec_t **hdl_rec,
>                                                    uint32_t lstr_id,
>                                                    uint32_t
> log_stream_open_flags,
> -                                                  const SaNameT
> *logStreamName, uint32_t log_header_type)
> +                                                  const char
> *logStreamName, uint32_t log_header_type)
>  {
>       lga_log_stream_hdl_rec_t *rec = calloc(1,
> sizeof(lga_log_stream_hdl_rec_t));
> 
> @@ -640,10 +658,12 @@ lga_log_stream_hdl_rec_t *lga_log_stream
>       **/
>       rec->lgs_log_stream_id = lstr_id;
>       rec->open_flags = log_stream_open_flags;
> -     rec->log_stream_name.length = logStreamName->length;
> -     memcpy((void *)rec->log_stream_name.value, (void
> *)logStreamName->value, logStreamName->length);
>       rec->log_header_type = log_header_type;
> 
> +     /* This allocated memory will be freed when log stream handle is
> closed/finalized */
> +     rec->log_stream_name = calloc(1, strlen(logStreamName) + 1);
> +     memcpy(rec->log_stream_name, logStreamName,
> strlen(logStreamName));
> +
>       /***
>        * Initiate the recovery flag
>        * The setting means that the stream is initialized and that there is
> @@ -789,6 +809,23 @@ SaAisErrorT lga_hdl_cbk_dispatch(lga_cb_
>       return rc;
>  }
> 
> +/**
> + * Check if the name is valid or not.
> + */
> +bool lga_is_extended_name_valid(const SaNameT* name)
> +{
> +
> +     if (name == NULL) return false;
> +     if (osaf_is_extended_name_valid(name) == false) return false;
> +
> +     SaConstStringT str = osaf_extended_name_borrow(name);
> +     if (strlen(str) >= kOsafMaxDnLength) return false;
> +
> +     return true;
> +
> +}
> +
> +
>  /*
>   * To enable tracing early in saLogInitialize, use a GCC constructor
>   */
> diff --git a/osaf/libs/saf/libSaLog/Makefile.am
> b/osaf/libs/saf/libSaLog/Makefile.am
> --- a/osaf/libs/saf/libSaLog/Makefile.am
> +++ b/osaf/libs/saf/libSaLog/Makefile.am
> @@ -30,6 +30,7 @@ lib_LTLIBRARIES = libSaLog.la
>  libSaLog_la_SOURCES =
> 
>  libSaLog_la_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS)
> 
>  if HAVE_LD_VERSION_SCRIPT

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to