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(¶m->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 = ¶m->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 = ¶m->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
------------------------------------------------------------------------------
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