提交 2c5c3f4a 编写于 作者: 4 411148299@qq.com

fix code style

Signed-off-by: N411148299@qq.com <411148299@qq.com>
上级 ef2dfae1
...@@ -51,7 +51,7 @@ void StopParamService(void); ...@@ -51,7 +51,7 @@ void StopParamService(void);
* 加载默认的参数值 * 加载默认的参数值
* *
*/ */
int LoadDefaultParams(const char *fileName, int mode); int LoadDefaultParams(const char *fileName, unsigned int mode);
/** /**
* Init 接口 * Init 接口
......
...@@ -31,7 +31,8 @@ static void GetUserIdByName(FILE *fp, uid_t *uid, const char *name, uint32_t nam ...@@ -31,7 +31,8 @@ static void GetUserIdByName(FILE *fp, uid_t *uid, const char *name, uint32_t nam
(void)fseek(fp, 0, SEEK_SET); (void)fseek(fp, 0, SEEK_SET);
struct passwd *data = NULL; struct passwd *data = NULL;
while ((data = fgetpwent(fp)) != NULL) { while ((data = fgetpwent(fp)) != NULL) {
if (strlen(data->pw_name) == nameLen && strncmp(data->pw_name, name, nameLen) == 0) { if ((data->pw_name != NULL) && (strlen(data->pw_name) == nameLen) &&
(strncmp(data->pw_name, name, nameLen) == 0)) {
*uid = data->pw_uid; *uid = data->pw_uid;
return; return;
} }
...@@ -44,7 +45,8 @@ static void GetGroupIdByName(FILE *fp, gid_t *gid, const char *name, uint32_t na ...@@ -44,7 +45,8 @@ static void GetGroupIdByName(FILE *fp, gid_t *gid, const char *name, uint32_t na
(void)fseek(fp, 0, SEEK_SET); (void)fseek(fp, 0, SEEK_SET);
struct group *data = NULL; struct group *data = NULL;
while ((data = fgetgrent(fp)) != NULL) { while ((data = fgetgrent(fp)) != NULL) {
if (strlen(data->gr_name) == nameLen && strncmp(data->gr_name, name, nameLen) == 0) { if ((data->gr_name != NULL) && (strlen(data->gr_name) == nameLen) &&
(strncmp(data->gr_name, name, nameLen) == 0)) {
*gid = data->gr_gid; *gid = data->gr_gid;
break; break;
} }
...@@ -54,6 +56,9 @@ static void GetGroupIdByName(FILE *fp, gid_t *gid, const char *name, uint32_t na ...@@ -54,6 +56,9 @@ static void GetGroupIdByName(FILE *fp, gid_t *gid, const char *name, uint32_t na
// user:group:r|w // user:group:r|w
static int GetParamDacData(FILE *fpForGroup, FILE *fpForUser, ParamDacData *dacData, const char *value) static int GetParamDacData(FILE *fpForGroup, FILE *fpForUser, ParamDacData *dacData, const char *value)
{ {
if (dacData == NULL) {
return -1;
}
char *groupName = strstr(value, ":"); char *groupName = strstr(value, ":");
if (groupName == NULL) { if (groupName == NULL) {
return -1; return -1;
...@@ -98,7 +103,7 @@ static int EncodeSecurityLabel(const ParamSecurityLabel *srcLabel, char *buffer, ...@@ -98,7 +103,7 @@ static int EncodeSecurityLabel(const ParamSecurityLabel *srcLabel, char *buffer,
return memcpy_s(buffer, *bufferSize, srcLabel, sizeof(ParamSecurityLabel)); return memcpy_s(buffer, *bufferSize, srcLabel, sizeof(ParamSecurityLabel));
} }
static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint32_t bufferSize) static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, const char *buffer, uint32_t bufferSize)
{ {
PARAM_CHECK(bufferSize >= sizeof(ParamSecurityLabel), return -1, "Invalid buffersize %u", bufferSize); PARAM_CHECK(bufferSize >= sizeof(ParamSecurityLabel), return -1, "Invalid buffersize %u", bufferSize);
PARAM_CHECK(srcLabel != NULL && buffer != NULL, return -1, "Invalid param"); PARAM_CHECK(srcLabel != NULL && buffer != NULL, return -1, "Invalid param");
...@@ -108,17 +113,16 @@ static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint ...@@ -108,17 +113,16 @@ static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint
static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void *context) static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void *context)
{ {
uint32_t infoCount = 0;
ParamAuditData auditData = {0};
FILE *fpForGroup = fopen(GROUP_FILE_PATH, "r"); FILE *fpForGroup = fopen(GROUP_FILE_PATH, "r");
FILE *fpForUser = fopen(USER_FILE_PATH, "r"); FILE *fpForUser = fopen(USER_FILE_PATH, "r");
FILE *fp = fopen(fileName, "r"); FILE *fp = fopen(fileName, "r");
SubStringInfo *info = malloc(sizeof(SubStringInfo) * (SUBSTR_INFO_DAC + 1)); char *buff = (char *)calloc(1, PARAM_BUFFER_SIZE);
PARAM_CHECK(fpForGroup != NULL && fpForUser != NULL && fp != NULL && info != NULL, SubStringInfo *info = calloc(1, sizeof(SubStringInfo) * (SUBSTR_INFO_DAC + 1));
goto exit, "Can not open file for load param labels"); while (fp != NULL && fpForGroup != NULL && fpForUser != NULL &&
info != NULL && buff != NULL && fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) {
uint32_t infoCount = 0; buff[PARAM_BUFFER_SIZE - 1] = '\0';
char buff[PARAM_BUFFER_SIZE];
ParamAuditData auditData = {};
while (fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) {
int subStrNumber = GetSubStringInfo(buff, strlen(buff), ' ', info, SUBSTR_INFO_DAC + 1); int subStrNumber = GetSubStringInfo(buff, strlen(buff), ' ', info, SUBSTR_INFO_DAC + 1);
if (subStrNumber <= SUBSTR_INFO_DAC) { if (subStrNumber <= SUBSTR_INFO_DAC) {
continue; continue;
...@@ -134,19 +138,21 @@ static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void * ...@@ -134,19 +138,21 @@ static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void *
infoCount++; infoCount++;
} }
PARAM_LOGI("Load parameter label total %u success %s", infoCount, fileName); PARAM_LOGI("Load parameter label total %u success %s", infoCount, fileName);
exit: if (fp != NULL) {
if (fp) {
(void)fclose(fp); (void)fclose(fp);
} }
if (info) { if (info != NULL) {
free(info); free(info);
} }
if (fpForGroup) { if (fpForGroup != NULL) {
(void)fclose(fpForGroup); (void)fclose(fpForGroup);
} }
if (fpForUser) { if (fpForUser != NULL) {
(void)fclose(fpForUser); (void)fclose(fpForUser);
} }
if (buff != NULL) {
free(buff);
}
return 0; return 0;
} }
...@@ -174,7 +180,7 @@ static int CheckFilePermission(const ParamSecurityLabel *localLabel, const char ...@@ -174,7 +180,7 @@ static int CheckFilePermission(const ParamSecurityLabel *localLabel, const char
return 0; return 0;
} }
static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, int mode) static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, uint32_t mode)
{ {
int ret = DAC_RESULT_FORBIDED; int ret = DAC_RESULT_FORBIDED;
PARAM_CHECK(srcLabel != NULL && auditData != NULL && auditData->name != NULL, return ret, "Invalid param"); PARAM_CHECK(srcLabel != NULL && auditData != NULL && auditData->name != NULL, return ret, "Invalid param");
...@@ -184,7 +190,7 @@ static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamA ...@@ -184,7 +190,7 @@ static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamA
* DAC group 实现的label的定义 * DAC group 实现的label的定义
* user:group:read|write|watch * user:group:read|write|watch
*/ */
uint32_t localMode = 0; uint32_t localMode;
if (srcLabel->cred.uid == auditData->dacData.uid) { if (srcLabel->cred.uid == auditData->dacData.uid) {
localMode = mode & (DAC_READ | DAC_WRITE | DAC_WATCH); localMode = mode & (DAC_READ | DAC_WRITE | DAC_WATCH);
} else if (srcLabel->cred.gid == auditData->dacData.gid) { } else if (srcLabel->cred.gid == auditData->dacData.gid) {
...@@ -196,8 +202,8 @@ static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamA ...@@ -196,8 +202,8 @@ static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamA
ret = DAC_RESULT_PERMISSION; ret = DAC_RESULT_PERMISSION;
} }
PARAM_LOGD("Src label %d %d ", srcLabel->cred.gid, srcLabel->cred.uid); PARAM_LOGD("Src label %d %d ", srcLabel->cred.gid, srcLabel->cred.uid);
PARAM_LOGD("auditData label %d %d mode %o lable %s", PARAM_LOGD("auditData label %d %d mode %o",
auditData->dacData.gid, auditData->dacData.uid, auditData->dacData.mode, auditData->label); auditData->dacData.gid, auditData->dacData.uid, auditData->dacData.mode);
PARAM_LOGD("%s check %o localMode %o ret %d", auditData->name, mode, localMode, ret); PARAM_LOGD("%s check %o localMode %o ret %d", auditData->name, mode, localMode, ret);
return ret; return ret;
} }
......
...@@ -23,7 +23,7 @@ static LibuvBaseTask *CreateLibuvTask(uint32_t size, uint32_t flags, uint16_t us ...@@ -23,7 +23,7 @@ static LibuvBaseTask *CreateLibuvTask(uint32_t size, uint32_t flags, uint16_t us
{ {
PARAM_CHECK(size <= RECV_BUFFER_MAX, return NULL, "Invaid size %u", size); PARAM_CHECK(size <= RECV_BUFFER_MAX, return NULL, "Invaid size %u", size);
PARAM_CHECK(userDataSize <= RECV_BUFFER_MAX, return NULL, "Invaid user size %u", userDataSize); PARAM_CHECK(userDataSize <= RECV_BUFFER_MAX, return NULL, "Invaid user size %u", userDataSize);
LibuvBaseTask *worker = (LibuvBaseTask *)malloc(size + userDataSize); LibuvBaseTask *worker = (LibuvBaseTask *)calloc(1, size + userDataSize);
PARAM_CHECK(worker != NULL, return NULL, "Failed to create param woker"); PARAM_CHECK(worker != NULL, return NULL, "Failed to create param woker");
worker->worker.flags = flags; worker->worker.flags = flags;
worker->userDataSize = userDataSize; worker->userDataSize = userDataSize;
...@@ -141,7 +141,7 @@ static int InitPipeSocket(uv_pipe_t *pipeServer) ...@@ -141,7 +141,7 @@ static int InitPipeSocket(uv_pipe_t *pipeServer)
ret = uv_listen((uv_stream_t *)pipeServer, SOMAXCONN, OnConnection); ret = uv_listen((uv_stream_t *)pipeServer, SOMAXCONN, OnConnection);
PARAM_CHECK(ret == 0, return ret, "Failed to uv_listen %d %s", ret, uv_err_name(ret)); PARAM_CHECK(ret == 0, return ret, "Failed to uv_listen %d %s", ret, uv_err_name(ret));
PARAM_CHECK(chmod(PIPE_NAME, S_IRWXU | S_IRWXG | S_IRWXO) == 0, PARAM_CHECK(chmod(PIPE_NAME, S_IRWXU | S_IRWXG | S_IRWXO) == 0,
return -1, "Open file %s error %s", PIPE_NAME, strerror(errno)); return -1, "Open file %s error %d", PIPE_NAME, errno);
return 0; return 0;
} }
...@@ -247,11 +247,12 @@ int ParamEventTaskCreate(ParamTaskPtr *stream, EventProcess eventProcess, EventP ...@@ -247,11 +247,12 @@ int ParamEventTaskCreate(ParamTaskPtr *stream, EventProcess eventProcess, EventP
int ParamEventSend(ParamTaskPtr stream, uint64_t eventId, const char *content, uint32_t size) int ParamEventSend(ParamTaskPtr stream, uint64_t eventId, const char *content, uint32_t size)
{ {
PARAM_CHECK(stream != NULL, return -1, "Invalid stream"); PARAM_CHECK(stream != NULL, return -1, "Invalid stream");
PARAM_CHECK(size <= RECV_BUFFER_MAX, return -1, "Invalid stream");
PARAM_CHECK((stream->flags & WORKER_TYPE_EVENT) == WORKER_TYPE_EVENT, return -1, "Invalid stream type"); PARAM_CHECK((stream->flags & WORKER_TYPE_EVENT) == WORKER_TYPE_EVENT, return -1, "Invalid stream type");
int ret = PARAM_CODE_INVALID_PARAM; int ret = PARAM_CODE_INVALID_PARAM;
if (stream->flags & WORKER_TYPE_ASYNC) { if (stream->flags & WORKER_TYPE_ASYNC) {
LibuvEventTask *worker = (LibuvEventTask *)stream; LibuvEventTask *worker = (LibuvEventTask *)stream;
LibuvAsyncEvent *event = (LibuvAsyncEvent *)malloc(sizeof(LibuvAsyncEvent) + size + 1); LibuvAsyncEvent *event = (LibuvAsyncEvent *)calloc(1, sizeof(LibuvAsyncEvent) + size + 1);
PARAM_CHECK(event != NULL, return -1, "Failed to alloc event"); PARAM_CHECK(event != NULL, return -1, "Failed to alloc event");
event->eventId = eventId; event->eventId = eventId;
event->contentSize = size + 1; event->contentSize = size + 1;
...@@ -285,9 +286,6 @@ int ParamTaskClose(ParamTaskPtr stream) ...@@ -285,9 +286,6 @@ int ParamTaskClose(ParamTaskPtr stream)
} else if (stream->flags & WORKER_TYPE_MSG) { } else if (stream->flags & WORKER_TYPE_MSG) {
LibuvStreamTask *worker = (LibuvStreamTask *)stream; LibuvStreamTask *worker = (LibuvStreamTask *)stream;
uv_close((uv_handle_t *)(&worker->stream.pipe), OnClientClose); uv_close((uv_handle_t *)(&worker->stream.pipe), OnClientClose);
} else if (stream->flags & WORKER_TYPE_EVENT) {
LibuvAsyncEvent *event = (LibuvAsyncEvent *)stream;
uv_close((uv_handle_t *)&event->async, OnAsyncCloseCallback);
} else { } else {
free(stream); free(stream);
} }
...@@ -339,6 +337,9 @@ static void SignalHandler(uv_signal_t *handle, int signum) ...@@ -339,6 +337,9 @@ static void SignalHandler(uv_signal_t *handle, int signum)
int ParamServiceStart(ProcessPidDelete pidDelete) int ParamServiceStart(ProcessPidDelete pidDelete)
{ {
if (uv_default_loop() == NULL) {
return -1;
}
libuv.pidDeleteProcess = pidDelete; libuv.pidDeleteProcess = pidDelete;
uv_signal_t sigchldHandler; uv_signal_t sigchldHandler;
int ret = uv_signal_init(uv_default_loop(), &sigchldHandler); int ret = uv_signal_init(uv_default_loop(), &sigchldHandler);
......
...@@ -14,8 +14,6 @@ ...@@ -14,8 +14,6 @@
*/ */
#ifndef BASE_STARTUP_PARAM_LIBUVADP_H #ifndef BASE_STARTUP_PARAM_LIBUVADP_H
#define BASE_STARTUP_PARAM_LIBUVADP_H #define BASE_STARTUP_PARAM_LIBUVADP_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
......
...@@ -38,9 +38,10 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context) ...@@ -38,9 +38,10 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context)
} }
PARAM_CHECK(fp != NULL, return -1, "No valid persist parameter file %s", PARAM_PERSIST_SAVE_PATH); PARAM_CHECK(fp != NULL, return -1, "No valid persist parameter file %s", PARAM_PERSIST_SAVE_PATH);
char *buff = (char *)malloc(PARAM_BUFFER_SIZE); char *buff = (char *)calloc(1, PARAM_BUFFER_SIZE);
SubStringInfo *info = malloc(sizeof(SubStringInfo) * (SUBSTR_INFO_VALUE + 1)); SubStringInfo *info = calloc(1, sizeof(SubStringInfo) * (SUBSTR_INFO_VALUE + 1));
while (info != NULL && buff != NULL && fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) { while (info != NULL && buff != NULL && fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) {
buff[PARAM_BUFFER_SIZE - 1] = '\0';
int subStrNumber = GetSubStringInfo(buff, strlen(buff), '=', info, SUBSTR_INFO_VALUE + 1); int subStrNumber = GetSubStringInfo(buff, strlen(buff), '=', info, SUBSTR_INFO_VALUE + 1);
if (subStrNumber <= SUBSTR_INFO_VALUE) { if (subStrNumber <= SUBSTR_INFO_VALUE) {
continue; continue;
...@@ -48,8 +49,12 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context) ...@@ -48,8 +49,12 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context)
int ret = persistParamGet(info[0].value, info[1].value, context); int ret = persistParamGet(info[0].value, info[1].value, context);
PARAM_CHECK(ret == 0, continue, "Failed to set param %d %s", ret, buff); PARAM_CHECK(ret == 0, continue, "Failed to set param %d %s", ret, buff);
} }
free(info); if (info) {
free(buff); free(info);
}
if (buff) {
free(buff);
}
(void)fclose(fp); (void)fclose(fp);
return 0; return 0;
} }
...@@ -57,7 +62,7 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context) ...@@ -57,7 +62,7 @@ static int LoadPersistParam(PersistParamGetPtr persistParamGet, void *context)
static int BatchSavePersistParamBegin(PERSIST_SAVE_HANDLE *handle) static int BatchSavePersistParamBegin(PERSIST_SAVE_HANDLE *handle)
{ {
FILE *fp = fopen(PARAM_PERSIST_SAVE_TMP_PATH, "w"); FILE *fp = fopen(PARAM_PERSIST_SAVE_TMP_PATH, "w");
PARAM_CHECK(fp != NULL, return -1, "Open file %s fail error %s", PARAM_PERSIST_SAVE_TMP_PATH, strerror(errno)); PARAM_CHECK(fp != NULL, return -1, "Open file %s fail error %d", PARAM_PERSIST_SAVE_TMP_PATH, errno);
*handle = (PERSIST_SAVE_HANDLE)fp; *handle = (PERSIST_SAVE_HANDLE)fp;
return 0; return 0;
} }
...@@ -77,12 +82,12 @@ static void BatchSavePersistParamEnd(PERSIST_SAVE_HANDLE handle) ...@@ -77,12 +82,12 @@ static void BatchSavePersistParamEnd(PERSIST_SAVE_HANDLE handle)
(void)fclose(fp); (void)fclose(fp);
unlink(PARAM_PERSIST_SAVE_PATH); unlink(PARAM_PERSIST_SAVE_PATH);
int ret = rename(PARAM_PERSIST_SAVE_TMP_PATH, PARAM_PERSIST_SAVE_PATH); int ret = rename(PARAM_PERSIST_SAVE_TMP_PATH, PARAM_PERSIST_SAVE_PATH);
PARAM_CHECK(ret == 0, return, "BatchSavePersistParamEnd %s fail error %s", PARAM_CHECK(ret == 0, return, "BatchSavePersistParamEnd %s fail error %d", PARAM_PERSIST_SAVE_TMP_PATH, errno);
PARAM_PERSIST_SAVE_TMP_PATH, strerror(errno));
} }
int RegisterPersistParamOps(PersistParamOps *ops) int RegisterPersistParamOps(PersistParamOps *ops)
{ {
PARAM_CHECK(ops != NULL, return -1, "Invalid ops");
ops->save = NULL; ops->save = NULL;
ops->load = LoadPersistParam; ops->load = LoadPersistParam;
ops->batchSaveBegin = BatchSavePersistParamBegin; ops->batchSaveBegin = BatchSavePersistParamBegin;
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#define LABEL "PARAM_SELINUX" #define LABEL "PARAM_SELINUX"
#define SELINUX_LABEL_LEN 128 #define SELINUX_LABEL_LEN 128
typedef struct SELinuxSecurityLabel { typedef struct SELinuxSecurityLabel {
ParamSecurityLabel securityLabel; ParamSecurityLabel securityLabel;
char label[SELINUX_LABEL_LEN]; char label[SELINUX_LABEL_LEN];
...@@ -56,7 +55,7 @@ static int EncodeSecurityLabel(const ParamSecurityLabel *srcLabel, char *buffer, ...@@ -56,7 +55,7 @@ static int EncodeSecurityLabel(const ParamSecurityLabel *srcLabel, char *buffer,
return memcpy_s(buffer, *bufferSize, srcLabel, sizeof(SELinuxSecurityLabel)); return memcpy_s(buffer, *bufferSize, srcLabel, sizeof(SELinuxSecurityLabel));
} }
static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint32_t bufferSize) static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, const char *buffer, uint32_t bufferSize)
{ {
PARAM_CHECK(bufferSize >= sizeof(SELinuxSecurityLabel), return -1, "Invalid buffersize %u", bufferSize); PARAM_CHECK(bufferSize >= sizeof(SELinuxSecurityLabel), return -1, "Invalid buffersize %u", bufferSize);
PARAM_CHECK(srcLabel != NULL && buffer != NULL, return -1, "Invalid param"); PARAM_CHECK(srcLabel != NULL && buffer != NULL, return -1, "Invalid param");
...@@ -66,28 +65,32 @@ static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint ...@@ -66,28 +65,32 @@ static int DecodeSecurityLabel(ParamSecurityLabel **srcLabel, char *buffer, uint
static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void *context) static int LoadParamLabels(const char *fileName, SecurityLabelFunc label, void *context)
{ {
int ret = 0;
FILE *fp = fopen(fileName, "r"); FILE *fp = fopen(fileName, "r");
PARAM_CHECK(fp != NULL, return -1, "Open file %s fail", fileName); PARAM_CHECK(fp != NULL, return -1, "Open file %s fail", fileName);
SubStringInfo *info = malloc(sizeof(SubStringInfo) * (SUBSTR_INFO_DAC + 1));
PARAM_CHECK(info != NULL, (void)fclose(fp); SubStringInfo *info = calloc(1, sizeof(SubStringInfo) * (SUBSTR_INFO_DAC + 1));
return -1, "Failed to malloc for %s", fileName); char *buff = (char *)calloc(1, PARAM_BUFFER_SIZE);
char buff[PARAM_BUFFER_SIZE];
int infoCount = 0; int infoCount = 0;
ParamAuditData auditData = {}; ParamAuditData auditData = {0};
while (fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) { while (info != NULL && buff != NULL && fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) {
buff[PARAM_BUFFER_SIZE - 1] = '\0';
int subStrNumber = GetSubStringInfo(buff, strlen(buff), ' ', info, SUBSTR_INFO_DAC + 1); int subStrNumber = GetSubStringInfo(buff, strlen(buff), ' ', info, SUBSTR_INFO_DAC + 1);
if (subStrNumber <= SUBSTR_INFO_DAC) { if (subStrNumber <= SUBSTR_INFO_DAC) {
continue; continue;
} }
auditData.name = info[SUBSTR_INFO_NAME].value; auditData.name = info[SUBSTR_INFO_NAME].value;
auditData.label = info[SUBSTR_INFO_LABEL].value; auditData.label = info[SUBSTR_INFO_LABEL].value;
ret = label(&auditData, context); int ret = label(&auditData, context);
PARAM_CHECK(ret == 0, continue, "Failed to write param info %d %s", ret, buff); PARAM_CHECK(ret == 0, continue, "Failed to write param info %d %s", ret, buff);
infoCount++; infoCount++;
} }
if (buff) {
free(buff);
}
if (info) {
free(info);
}
(void)fclose(fp); (void)fclose(fp);
free(info);
PARAM_LOGI("Load parameter info %d success %s", infoCount, fileName); PARAM_LOGI("Load parameter info %d success %s", infoCount, fileName);
return 0; return 0;
} }
...@@ -101,7 +104,7 @@ static int ProcessParamFile(const char *fileName, void *context) ...@@ -101,7 +104,7 @@ static int ProcessParamFile(const char *fileName, void *context)
static int GetParamSecurityLabel(SecurityLabelFunc label, const char *path, void *context) static int GetParamSecurityLabel(SecurityLabelFunc label, const char *path, void *context)
{ {
PARAM_CHECK(label != NULL, return -1, "Invalid param"); PARAM_CHECK(label != NULL, return -1, "Invalid param");
int ret = 0; int ret;
struct stat st; struct stat st;
LabelFuncContext cxt = { label, context }; LabelFuncContext cxt = { label, context };
if ((stat(path, &st) == 0) && !S_ISDIR(st.st_mode)) { if ((stat(path, &st) == 0) && !S_ISDIR(st.st_mode)) {
...@@ -119,7 +122,7 @@ static int CheckFilePermission(const ParamSecurityLabel *localLabel, const char ...@@ -119,7 +122,7 @@ static int CheckFilePermission(const ParamSecurityLabel *localLabel, const char
return 0; return 0;
} }
static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, int mode) static int CheckParamPermission(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, uint32_t mode)
{ {
PARAM_LOGI("CheckParamPermission "); PARAM_LOGI("CheckParamPermission ");
PARAM_CHECK(srcLabel != NULL && auditData != NULL && auditData->name != NULL, return -1, "Invalid param"); PARAM_CHECK(srcLabel != NULL && auditData != NULL && auditData->name != NULL, return -1, "Invalid param");
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stddef.h> #include <stddef.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <unistd.h> #include <unistd.h>
...@@ -26,6 +25,7 @@ ...@@ -26,6 +25,7 @@
#include "param_message.h" #include "param_message.h"
#define INVALID_SOCKET (-1) #define INVALID_SOCKET (-1)
#define INIT_PROCESS_PID 1
#define LABEL "Client" #define LABEL "Client"
static const uint32_t RECV_BUFFER_MAX = 5 * 1024; static const uint32_t RECV_BUFFER_MAX = 5 * 1024;
...@@ -37,6 +37,10 @@ __attribute__((destructor)) static void ClientDeinit(void); ...@@ -37,6 +37,10 @@ __attribute__((destructor)) static void ClientDeinit(void);
static int InitParamClient(void) static int InitParamClient(void)
{ {
if (getpid() == INIT_PROCESS_PID) {
PARAM_LOGI("Init process, do not init client");
return 0;
}
if (PARAM_TEST_FLAG(g_clientSpace.paramSpace.flags, WORKSPACE_FLAGS_INIT)) { if (PARAM_TEST_FLAG(g_clientSpace.paramSpace.flags, WORKSPACE_FLAGS_INIT)) {
return 0; return 0;
} }
...@@ -62,7 +66,7 @@ static ParamSecurityOps *GetClientParamSecurityOps(void) ...@@ -62,7 +66,7 @@ static ParamSecurityOps *GetClientParamSecurityOps(void)
return &g_clientSpace.paramSpace.paramSecurityOps; return &g_clientSpace.paramSpace.paramSecurityOps;
} }
static int FillLabelContent(ParamMessage *request, uint32_t *start, uint32_t length) static int FillLabelContent(const ParamMessage *request, uint32_t *start, uint32_t length)
{ {
uint32_t bufferSize = request->msgSize - sizeof(ParamMessage); uint32_t bufferSize = request->msgSize - sizeof(ParamMessage);
uint32_t offset = *start; uint32_t offset = *start;
...@@ -159,7 +163,7 @@ int SystemSetParameter(const char *name, const char *value) ...@@ -159,7 +163,7 @@ int SystemSetParameter(const char *name, const char *value)
PARAM_CHECK(ret == 0, return -1, "Failed to get label length"); PARAM_CHECK(ret == 0, return -1, "Failed to get label length");
} }
msgSize += sizeof(ParamMsgContent) + labelLen; msgSize += sizeof(ParamMsgContent) + labelLen;
msgSize = msgSize < RECV_BUFFER_MAX ? RECV_BUFFER_MAX : msgSize; msgSize = (msgSize < RECV_BUFFER_MAX) ? RECV_BUFFER_MAX : msgSize;
ParamMessage *request = (ParamMessage *)CreateParamMessage(MSG_SET_PARAM, name, msgSize); ParamMessage *request = (ParamMessage *)CreateParamMessage(MSG_SET_PARAM, name, msgSize);
PARAM_CHECK(request != NULL, return -1, "Failed to malloc for connect"); PARAM_CHECK(request != NULL, return -1, "Failed to malloc for connect");
...@@ -195,7 +199,7 @@ int SystemWaitParameter(const char *name, const char *value, int32_t timeout) ...@@ -195,7 +199,7 @@ int SystemWaitParameter(const char *name, const char *value, int32_t timeout)
timeout = DEFAULT_PARAM_WAIT_TIMEOUT; timeout = DEFAULT_PARAM_WAIT_TIMEOUT;
} }
uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + sizeof(ParamMsgContent) + sizeof(uint32_t); uint32_t msgSize = sizeof(ParamMessage) + sizeof(ParamMsgContent) + sizeof(ParamMsgContent) + sizeof(uint32_t);
msgSize = msgSize < RECV_BUFFER_MAX ? RECV_BUFFER_MAX : msgSize; msgSize = (msgSize < RECV_BUFFER_MAX) ? RECV_BUFFER_MAX : msgSize;
uint32_t offset = 0; uint32_t offset = 0;
ParamMessage *request = NULL; ParamMessage *request = NULL;
if (value != NULL) { if (value != NULL) {
......
...@@ -51,12 +51,11 @@ static void ShowParam(ParamHandle handle, void *cookie) ...@@ -51,12 +51,11 @@ static void ShowParam(ParamHandle handle, void *cookie)
static void ExeuteCmdParamGet(int argc, char *argv[], int start) static void ExeuteCmdParamGet(int argc, char *argv[], int start)
{ {
uint32_t size = PARAM_CONST_VALUE_LEN_MAX + PARAM_NAME_LEN_MAX + 1 + 1; uint32_t size = PARAM_CONST_VALUE_LEN_MAX + PARAM_NAME_LEN_MAX + 1 + 1;
char *buffer = (char *)malloc(size); char *buffer = (char *)calloc(1, size);
if (buffer == NULL) { if (buffer == NULL) {
printf("Get parameterfail\n"); printf("Get parameterfail\n");
return; return;
} }
memset_s(buffer, size, 0, size);
if (argc == start) { if (argc == start) {
SystemTraversalParameter(ShowParam, (void *)buffer); SystemTraversalParameter(ShowParam, (void *)buffer);
} else { } else {
...@@ -117,11 +116,18 @@ static void ExeuteCmdParamRead(int argc, char *argv[], int start) ...@@ -117,11 +116,18 @@ static void ExeuteCmdParamRead(int argc, char *argv[], int start)
static void HandleParamChange(const char *key, const char *value, void *context) static void HandleParamChange(const char *key, const char *value, void *context)
{ {
if (key == NULL || value == NULL) {
return;
}
UNUSED(context);
printf("Receive parameter change %s %s \n", key, value); printf("Receive parameter change %s %s \n", key, value);
} }
static void ExeuteCmdParamWatch(int argc, char *argv[], int start) static void ExeuteCmdParamWatch(int argc, char *argv[], int start)
{ {
if (argc <= start) {
return;
}
int ret = SystemWatchParameter(argv[start], HandleParamChange, NULL); int ret = SystemWatchParameter(argv[start], HandleParamChange, NULL);
if (ret != 0) { if (ret != 0) {
return; return;
......
...@@ -54,24 +54,25 @@ typedef struct { ...@@ -54,24 +54,25 @@ typedef struct {
int InitParamWorkSpace(ParamWorkSpace *workSpace, int onlyRead); int InitParamWorkSpace(ParamWorkSpace *workSpace, int onlyRead);
void CloseParamWorkSpace(ParamWorkSpace *workSpace); void CloseParamWorkSpace(ParamWorkSpace *workSpace);
int ReadParamWithCheck(ParamWorkSpace *workSpace, const char *name, int op, ParamHandle *handle); int ReadParamWithCheck(const ParamWorkSpace *workSpace, const char *name, uint32_t op, ParamHandle *handle);
int ReadParamValue(ParamWorkSpace *workSpace, ParamHandle handle, char *value, uint32_t *len); int ReadParamValue(const ParamWorkSpace *workSpace, ParamHandle handle, char *value, uint32_t *len);
int ReadParamName(ParamWorkSpace *workSpace, ParamHandle handle, char *name, uint32_t len); int ReadParamName(const ParamWorkSpace *workSpace, ParamHandle handle, char *name, uint32_t len);
int ReadParamCommitId(ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *commitId); int ReadParamCommitId(const ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *commitId);
int CheckParamName(const char *name, int paramInfo); int CheckParamName(const char *name, int paramInfo);
int CheckParamPermission(ParamWorkSpace *workSpace, const ParamSecurityLabel *srcLabel, const char *name, int mode); int CheckParamPermission(const ParamWorkSpace *workSpace,
const ParamSecurityLabel *srcLabel, const char *name, uint32_t mode);
typedef void (*TraversalParamPtr)(ParamHandle handle, void *context); typedef void (*TraversalParamPtr)(ParamHandle handle, void *context);
typedef struct { typedef struct {
TraversalParamPtr traversalParamPtr; TraversalParamPtr traversalParamPtr;
void *context; void *context;
} ParamTraversalContext; } ParamTraversalContext;
int TraversalParam(ParamWorkSpace *workSpace, TraversalParamPtr walkFunc, void *cookie); int TraversalParam(const ParamWorkSpace *workSpace, TraversalParamPtr walkFunc, void *cookie);
ParamWorkSpace *GetParamWorkSpace(void); ParamWorkSpace *GetParamWorkSpace(void);
ParamWorkSpace *GetClientParamWorkSpace(void); ParamWorkSpace *GetClientParamWorkSpace(void);
void DumpParameters(ParamWorkSpace *workSpace, int verbose); void DumpParameters(const ParamWorkSpace *workSpace, int verbose);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#ifndef BASE_STARTUP_PARAM_MESSAGE_H #ifndef BASE_STARTUP_PARAM_MESSAGE_H
#define BASE_STARTUP_PARAM_MESSAGE_H #define BASE_STARTUP_PARAM_MESSAGE_H
#include <stdint.h> #include <stdint.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
...@@ -88,7 +87,7 @@ typedef struct { ...@@ -88,7 +87,7 @@ typedef struct {
struct ParamTask_; struct ParamTask_;
typedef struct ParamTask_ *ParamTaskPtr; typedef struct ParamTask_ *ParamTaskPtr;
typedef int (*IncomingConnect)(const ParamTaskPtr stream, int flags); typedef int (*IncomingConnect)(const ParamTaskPtr stream, uint32_t flags);
typedef int (*RecvMessage)(const ParamTaskPtr stream, const ParamMessage *msg); typedef int (*RecvMessage)(const ParamTaskPtr stream, const ParamMessage *msg);
typedef void (*TimerProcess)(const ParamTaskPtr stream, void *context); typedef void (*TimerProcess)(const ParamTaskPtr stream, void *context);
typedef void (*EventProcess)(uint64_t eventId, const char *context, uint32_t size); typedef void (*EventProcess)(uint64_t eventId, const char *context, uint32_t size);
...@@ -96,11 +95,11 @@ typedef void (*TaskClose)(const ParamTaskPtr stream); ...@@ -96,11 +95,11 @@ typedef void (*TaskClose)(const ParamTaskPtr stream);
typedef void (*ProcessPidDelete)(pid_t pid); typedef void (*ProcessPidDelete)(pid_t pid);
typedef struct ParamTask_ { typedef struct ParamTask_ {
int32_t flags; uint32_t flags;
} ParamTask; } ParamTask;
typedef struct { typedef struct {
int flags; uint32_t flags;
char *server; char *server;
IncomingConnect incomingConnect; IncomingConnect incomingConnect;
RecvMessage recvMessage; RecvMessage recvMessage;
...@@ -123,7 +122,7 @@ int ParamTimerStart(ParamTaskPtr timer, uint64_t timeout, uint64_t repeat); ...@@ -123,7 +122,7 @@ int ParamTimerStart(ParamTaskPtr timer, uint64_t timeout, uint64_t repeat);
void *ParamGetTaskUserData(ParamTaskPtr stream); void *ParamGetTaskUserData(ParamTaskPtr stream);
int FillParamMsgContent(ParamMessage *request, uint32_t *start, int type, const char *value, uint32_t length); int FillParamMsgContent(const ParamMessage *request, uint32_t *start, int type, const char *value, uint32_t length);
ParamMsgContent *GetNextContent(const ParamMessage *reqest, uint32_t *offset); ParamMsgContent *GetNextContent(const ParamMessage *reqest, uint32_t *offset);
ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize); ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize);
......
...@@ -16,9 +16,6 @@ ...@@ -16,9 +16,6 @@
#ifndef BASE_STARTUP_PARAM_REQUEST_H #ifndef BASE_STARTUP_PARAM_REQUEST_H
#define BASE_STARTUP_PARAM_REQUEST_H #define BASE_STARTUP_PARAM_REQUEST_H
#include <pthread.h>
#include <stdatomic.h>
#include <stdio.h>
#include "param_manager.h" #include "param_manager.h"
#include "sys_param.h" #include "sys_param.h"
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -77,9 +77,9 @@ typedef struct { ...@@ -77,9 +77,9 @@ typedef struct {
int (*securityInitLabel)(ParamSecurityLabel **label, int isInit); int (*securityInitLabel)(ParamSecurityLabel **label, int isInit);
int (*securityGetLabel)(SecurityLabelFunc label, const char *path, void *context); int (*securityGetLabel)(SecurityLabelFunc label, const char *path, void *context);
int (*securityCheckFilePermission)(const ParamSecurityLabel *label, const char *fileName, int flags); int (*securityCheckFilePermission)(const ParamSecurityLabel *label, const char *fileName, int flags);
int (*securityCheckParamPermission)(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, int mode); int (*securityCheckParamPermission)(const ParamSecurityLabel *srcLabel, const ParamAuditData *auditData, uint32_t mode);
int (*securityEncodeLabel)(const ParamSecurityLabel *srcLabel, char *buffer, uint32_t *bufferSize); int (*securityEncodeLabel)(const ParamSecurityLabel *srcLabel, char *buffer, uint32_t *bufferSize);
int (*securityDecodeLabel)(ParamSecurityLabel **srcLabel, char *buffer, uint32_t bufferSize); int (*securityDecodeLabel)(ParamSecurityLabel **srcLabel, const char *buffer, uint32_t bufferSize);
int (*securityFreeLabel)(ParamSecurityLabel *srcLabel); int (*securityFreeLabel)(ParamSecurityLabel *srcLabel);
} ParamSecurityOps; } ParamSecurityOps;
......
...@@ -33,9 +33,9 @@ struct CmdLineEntry { ...@@ -33,9 +33,9 @@ struct CmdLineEntry {
int set; int set;
}; };
int WriteParam(WorkSpace *workSpace, const char *name, const char *value, uint32_t *dataIndex, int onlyAdd); int WriteParam(const WorkSpace *workSpace, const char *name, const char *value, uint32_t *dataIndex, int onlyAdd);
int InitPersistParamWorkSpace(ParamWorkSpace *workSpace); int InitPersistParamWorkSpace(const ParamWorkSpace *workSpace);
void ClosePersistParamWorkSpace(void); void ClosePersistParamWorkSpace(void);
int LoadPersistParam(ParamWorkSpace *workSpace); int LoadPersistParam(ParamWorkSpace *workSpace);
int WritePersistParam(ParamWorkSpace *workSpace, const char *name, const char *value); int WritePersistParam(ParamWorkSpace *workSpace, const char *name, const char *value);
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <string.h> #include <string.h>
#include <sys/syscall.h> #include <sys/syscall.h>
#include "init_log.h"
#include "param_security.h" #include "param_security.h"
#include "securec.h" #include "securec.h"
#include "sys_param.h" #include "sys_param.h"
...@@ -100,21 +99,21 @@ struct WorkSpace_; ...@@ -100,21 +99,21 @@ struct WorkSpace_;
typedef struct WorkSpace_ { typedef struct WorkSpace_ {
char fileName[FILENAME_LEN_MAX + 1]; char fileName[FILENAME_LEN_MAX + 1];
uint32_t (*allocTrieNode)(struct WorkSpace_ *workSpace, const char *key, uint32_t keyLen); uint32_t (*allocTrieNode)(struct WorkSpace_ *workSpace, const char *key, uint32_t keyLen);
int (*compareTrieNode)(ParamTrieNode *node, const char *key2, uint32_t key2Len); int (*compareTrieNode)(const ParamTrieNode *node, const char *key2, uint32_t key2Len);
ParamTrieHeader *area; ParamTrieHeader *area;
} WorkSpace; } WorkSpace;
int InitWorkSpace(const char *fileName, WorkSpace *workSpace, int onlyRead); int InitWorkSpace(const char *fileName, WorkSpace *workSpace, int onlyRead);
void CloseWorkSpace(WorkSpace *workSpace); void CloseWorkSpace(WorkSpace *workSpace);
ParamTrieNode *GetTrieNode(WorkSpace *workSpace, uint32_t offset); ParamTrieNode *GetTrieNode(const WorkSpace *workSpace, uint32_t offset);
void SaveIndex(uint32_t *index, uint32_t offset); void SaveIndex(uint32_t *index, uint32_t offset);
ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen); ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen);
ParamTrieNode *FindTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, uint32_t *matchLabel); ParamTrieNode *FindTrieNode(const WorkSpace *workSpace, const char *key, uint32_t keyLen, uint32_t *matchLabel);
typedef int (*TraversalTrieNodePtr)(WorkSpace *workSpace, ParamTrieNode *node, void *cookie); typedef int (*TraversalTrieNodePtr)(const WorkSpace *workSpace, const ParamTrieNode *node, void *cookie);
int TraversalTrieNode(WorkSpace *workSpace, ParamTrieNode *subTrie, TraversalTrieNodePtr walkFunc, void *cookie); int TraversalTrieNode(const WorkSpace *workSpace, const ParamTrieNode *subTrie, TraversalTrieNodePtr walkFunc, void *cookie);
uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditData); uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditData);
uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, const char *value, uint32_t valueLen); uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, const char *value, uint32_t valueLen);
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#ifndef STARTUP_TRIGER_CHECKER_H #ifndef STARTUP_TRIGER_CHECKER_H
#define STARTUP_TRIGER_CHECKER_H #define STARTUP_TRIGER_CHECKER_H
#include <stdint.h> #include <stdint.h>
#include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -16,10 +16,8 @@ ...@@ -16,10 +16,8 @@
#ifndef STARTUP_TRIGER_MANAGER_H #ifndef STARTUP_TRIGER_MANAGER_H
#define STARTUP_TRIGER_MANAGER_H #define STARTUP_TRIGER_MANAGER_H
#include <stdint.h> #include <stdint.h>
#include <stdlib.h>
#include "cJSON.h" #include "cJSON.h"
#include "init_log.h"
#include "list.h" #include "list.h"
#include "param_message.h" #include "param_message.h"
#include "param_utils.h" #include "param_utils.h"
...@@ -35,6 +33,7 @@ extern "C" { ...@@ -35,6 +33,7 @@ extern "C" {
#define TRIGGER_CMD "trigger " #define TRIGGER_CMD "trigger "
#define TRIGGER_ARR_NAME_IN_JSON "jobs" #define TRIGGER_ARR_NAME_IN_JSON "jobs"
#define CMDS_ARR_NAME_IN_JSON "cmds" #define CMDS_ARR_NAME_IN_JSON "cmds"
#define TRIGGER_MAX_CMD 4096
#define TRIGGER_EXECUTE_QUEUE 64 #define TRIGGER_EXECUTE_QUEUE 64
#define MAX_CONDITION_NUMBER 64 #define MAX_CONDITION_NUMBER 64
...@@ -114,13 +113,14 @@ typedef struct { ...@@ -114,13 +113,14 @@ typedef struct {
} ParamWatcher; } ParamWatcher;
typedef struct TriggerExtData_ { typedef struct TriggerExtData_ {
int (*excuteCmd)(struct TriggerExtData_ *trigger, int cmd, const char *content); int (*excuteCmd)(const struct TriggerExtData_ *trigger, int cmd, const char *content);
uint32_t watcherId; uint32_t watcherId;
ParamWatcher *watcher; ParamWatcher *watcher;
} TriggerExtData; } TriggerExtData;
typedef struct TriggerWorkSpace { typedef struct TriggerWorkSpace {
void (*cmdExec)(TriggerNode *trigger, CommandNode *cmd, const char *content, uint32_t size); void (*cmdExec)(const TriggerNode *trigger,
const CommandNode *cmd, const char *content, uint32_t size);
ParamTaskPtr eventHandle; ParamTaskPtr eventHandle;
char buffer[PARAM_NAME_LEN_MAX + PARAM_CONST_VALUE_LEN_MAX]; char buffer[PARAM_NAME_LEN_MAX + PARAM_CONST_VALUE_LEN_MAX];
TriggerExecuteQueue executeQueue; TriggerExecuteQueue executeQueue;
...@@ -136,30 +136,29 @@ typedef int (*TRIGGER_MATCH)(TriggerWorkSpace *workSpace, LogicCalculator *calcu ...@@ -136,30 +136,29 @@ typedef int (*TRIGGER_MATCH)(TriggerWorkSpace *workSpace, LogicCalculator *calcu
TriggerNode *trigger, const char *content, uint32_t contentSize); TriggerNode *trigger, const char *content, uint32_t contentSize);
int CheckTrigger(TriggerWorkSpace *workSpace, int type, int CheckTrigger(TriggerWorkSpace *workSpace, int type,
const char *content, uint32_t contentSize, PARAM_CHECK_DONE triggerExecuter); const char *content, uint32_t contentSize, PARAM_CHECK_DONE triggerExecuter);
int MarkTriggerToParam(TriggerWorkSpace *workSpace, TriggerHeader *triggerHead, const char *name); int MarkTriggerToParam(const TriggerWorkSpace *workSpace, const TriggerHeader *triggerHead, const char *name);
int CheckAndMarkTrigger(int type, const char *name); int CheckAndMarkTrigger(int type, const char *name);
TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace); TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace);
int ExecuteQueuePush(TriggerWorkSpace *workSpace, TriggerNode *trigger); int ExecuteQueuePush(TriggerWorkSpace *workSpace, const TriggerNode *trigger);
int ExecuteQueueSize(TriggerWorkSpace *workSpace);
TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char *condition, uint16_t extDataSize); TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char *condition, uint16_t extDataSize);
TriggerNode *GetTriggerByName(TriggerWorkSpace *workSpace, const char *triggerName); TriggerNode *GetTriggerByName(const TriggerWorkSpace *workSpace, const char *triggerName);
void FreeTrigger(TriggerNode *trigger); void FreeTrigger(TriggerNode *trigger);
void ClearTrigger(TriggerHeader *head); void ClearTrigger(TriggerHeader *head);
int AddCommand(TriggerNode *trigger, uint32_t cmdIndex, const char *content); int AddCommand(TriggerNode *trigger, uint32_t cmdIndex, const char *content);
CommandNode *GetNextCmdNode(TriggerNode *trigger, CommandNode *curr); CommandNode *GetNextCmdNode(const TriggerNode *trigger, const CommandNode *curr);
void DumpTrigger(TriggerWorkSpace *workSpace); void DumpTrigger(const TriggerWorkSpace *workSpace);
void PostParamTrigger(int type, const char *name, const char *value); void PostParamTrigger(int type, const char *name, const char *value);
ParamWatcher *GetParamWatcher(const ParamTaskPtr worker); ParamWatcher *GetParamWatcher(const ParamTaskPtr worker);
ParamWatcher *GetNextParamWatcher(TriggerWorkSpace *workSpace, ParamWatcher *curr); ParamWatcher *GetNextParamWatcher(const TriggerWorkSpace *workSpace, const ParamWatcher *curr);
TriggerNode *AddWatcherTrigger(ParamWatcher *watcher, TriggerNode *AddWatcherTrigger(ParamWatcher *watcher,
int triggerType, const char *name, const char *condition, const TriggerExtData *extData); int triggerType, const char *name, const char *condition, const TriggerExtData *extData);
void DelWatcherTrigger(ParamWatcher *watcher, uint32_t watcherId); void DelWatcherTrigger(const ParamWatcher *watcher, uint32_t watcherId);
void ClearWatcherTrigger(ParamWatcher *watcher); void ClearWatcherTrigger(const ParamWatcher *watcher);
TriggerWorkSpace *GetTriggerWorkSpace(void); TriggerWorkSpace *GetTriggerWorkSpace(void);
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include "param_manager.h" #include "param_manager.h"
#include <ctype.h> #include <ctype.h>
#include <dlfcn.h>
#define LABEL "Manager" #define LABEL "Manager"
#if !defined PARAM_SUPPORT_SELINUX && !defined PARAM_SUPPORT_DAC #if !defined PARAM_SUPPORT_SELINUX && !defined PARAM_SUPPORT_DAC
...@@ -25,9 +24,8 @@ static ParamSecurityLabel g_defaultSecurityLabel; ...@@ -25,9 +24,8 @@ static ParamSecurityLabel g_defaultSecurityLabel;
static int GetParamSecurityOps(ParamWorkSpace *workSpace, int isInit) static int GetParamSecurityOps(ParamWorkSpace *workSpace, int isInit)
{ {
UNUSED(isInit); UNUSED(isInit);
int ret = 0;
#if (defined PARAM_SUPPORT_SELINUX || defined PARAM_SUPPORT_DAC) #if (defined PARAM_SUPPORT_SELINUX || defined PARAM_SUPPORT_DAC)
ret = RegisterSecurityOps(&workSpace->paramSecurityOps, isInit); int ret = RegisterSecurityOps(&workSpace->paramSecurityOps, isInit);
PARAM_CHECK(workSpace->paramSecurityOps.securityInitLabel != NULL, return -1, "Invalid securityInitLabel"); PARAM_CHECK(workSpace->paramSecurityOps.securityInitLabel != NULL, return -1, "Invalid securityInitLabel");
ret = workSpace->paramSecurityOps.securityInitLabel(&workSpace->securityLabel, isInit); ret = workSpace->paramSecurityOps.securityInitLabel(&workSpace->securityLabel, isInit);
PARAM_CHECK(ret == 0, return PARAM_CODE_INVALID_NAME, "Failed to init security"); PARAM_CHECK(ret == 0, return PARAM_CODE_INVALID_NAME, "Failed to init security");
...@@ -35,7 +33,7 @@ static int GetParamSecurityOps(ParamWorkSpace *workSpace, int isInit) ...@@ -35,7 +33,7 @@ static int GetParamSecurityOps(ParamWorkSpace *workSpace, int isInit)
workSpace->securityLabel = &g_defaultSecurityLabel; workSpace->securityLabel = &g_defaultSecurityLabel;
workSpace->securityLabel->flags |= LABEL_ALL_PERMISSION; workSpace->securityLabel->flags |= LABEL_ALL_PERMISSION;
#endif #endif
return ret; return 0;
} }
int InitParamWorkSpace(ParamWorkSpace *workSpace, int onlyRead) int InitParamWorkSpace(ParamWorkSpace *workSpace, int onlyRead)
...@@ -91,7 +89,7 @@ static uint32_t ReadCommitId(ParamNode *entry) ...@@ -91,7 +89,7 @@ static uint32_t ReadCommitId(ParamNode *entry)
return commitId & PARAM_FLAGS_COMMITID; return commitId & PARAM_FLAGS_COMMITID;
} }
int ReadParamCommitId(ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *commitId) int ReadParamCommitId(const ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *commitId)
{ {
PARAM_CHECK(workSpace != NULL && commitId != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace"); PARAM_CHECK(workSpace != NULL && commitId != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle); ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle);
...@@ -102,11 +100,11 @@ int ReadParamCommitId(ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *c ...@@ -102,11 +100,11 @@ int ReadParamCommitId(ParamWorkSpace *workSpace, ParamHandle handle, uint32_t *c
return 0; return 0;
} }
int ReadParamWithCheck(ParamWorkSpace *workSpace, const char *name, int op, ParamHandle *handle) int ReadParamWithCheck(const ParamWorkSpace *workSpace, const char *name, uint32_t op, ParamHandle *handle)
{ {
PARAM_CHECK(handle != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param handle"); PARAM_CHECK(handle != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param handle");
PARAM_CHECK(workSpace != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param name"); PARAM_CHECK(workSpace != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param name");
*handle = 0; *handle = -1;
int ret = CheckParamPermission(workSpace, workSpace->securityLabel, name, op); int ret = CheckParamPermission(workSpace, workSpace->securityLabel, name, op);
PARAM_CHECK(ret == 0, return ret, "Forbid to access parameter %s", name); PARAM_CHECK(ret == 0, return ret, "Forbid to access parameter %s", name);
...@@ -118,7 +116,7 @@ int ReadParamWithCheck(ParamWorkSpace *workSpace, const char *name, int op, Para ...@@ -118,7 +116,7 @@ int ReadParamWithCheck(ParamWorkSpace *workSpace, const char *name, int op, Para
return PARAM_CODE_NOT_FOUND; return PARAM_CODE_NOT_FOUND;
} }
int ReadParamValue(ParamWorkSpace *workSpace, ParamHandle handle, char *value, uint32_t *length) int ReadParamValue(const ParamWorkSpace *workSpace, ParamHandle handle, char *value, uint32_t *length)
{ {
PARAM_CHECK(workSpace != NULL && length != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param"); PARAM_CHECK(workSpace != NULL && length != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle); ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle);
...@@ -141,7 +139,7 @@ int ReadParamValue(ParamWorkSpace *workSpace, ParamHandle handle, char *value, u ...@@ -141,7 +139,7 @@ int ReadParamValue(ParamWorkSpace *workSpace, ParamHandle handle, char *value, u
return 0; return 0;
} }
int ReadParamName(ParamWorkSpace *workSpace, ParamHandle handle, char *name, uint32_t length) int ReadParamName(const ParamWorkSpace *workSpace, ParamHandle handle, char *name, uint32_t length)
{ {
PARAM_CHECK(workSpace != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param"); PARAM_CHECK(workSpace != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle); ParamNode *entry = (ParamNode *)GetTrieNode(&workSpace->paramSpace, handle);
...@@ -157,6 +155,7 @@ int ReadParamName(ParamWorkSpace *workSpace, ParamHandle handle, char *name, uin ...@@ -157,6 +155,7 @@ int ReadParamName(ParamWorkSpace *workSpace, ParamHandle handle, char *name, uin
int CheckParamName(const char *name, int info) int CheckParamName(const char *name, int info)
{ {
PARAM_CHECK(name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
size_t nameLen = strlen(name); size_t nameLen = strlen(name);
if (nameLen >= PARAM_NAME_LEN_MAX) { if (nameLen >= PARAM_NAME_LEN_MAX) {
return PARAM_CODE_INVALID_NAME; return PARAM_CODE_INVALID_NAME;
...@@ -190,7 +189,7 @@ int CheckParamName(const char *name, int info) ...@@ -190,7 +189,7 @@ int CheckParamName(const char *name, int info)
return 0; return 0;
} }
static int ProcessParamTraversal(WorkSpace *workSpace, ParamTrieNode *node, void *cookie) static int ProcessParamTraversal(const WorkSpace *workSpace, const ParamTrieNode *node, void *cookie)
{ {
UNUSED(workSpace); UNUSED(workSpace);
ParamTraversalContext *context = (ParamTraversalContext *)cookie; ParamTraversalContext *context = (ParamTraversalContext *)cookie;
...@@ -205,17 +204,20 @@ static int ProcessParamTraversal(WorkSpace *workSpace, ParamTrieNode *node, void ...@@ -205,17 +204,20 @@ static int ProcessParamTraversal(WorkSpace *workSpace, ParamTrieNode *node, void
return 0; return 0;
} }
int TraversalParam(ParamWorkSpace *workSpace, TraversalParamPtr walkFunc, void *cookie) int TraversalParam(const ParamWorkSpace *workSpace, TraversalParamPtr walkFunc, void *cookie)
{ {
PARAM_CHECK(workSpace != NULL && walkFunc != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
ParamTraversalContext context = { ParamTraversalContext context = {
walkFunc, cookie walkFunc, cookie
}; };
return TraversalTrieNode(&workSpace->paramSpace, NULL, ProcessParamTraversal, &context); return TraversalTrieNode(&workSpace->paramSpace, NULL, ProcessParamTraversal, &context);
} }
int CheckParamPermission(ParamWorkSpace *workSpace, int CheckParamPermission(const ParamWorkSpace *workSpace,
const ParamSecurityLabel *srcLabel, const char *name, int mode) const ParamSecurityLabel *srcLabel, const char *name, uint32_t mode)
{ {
PARAM_CHECK(workSpace != NULL && workSpace->securityLabel != NULL,
return PARAM_CODE_INVALID_PARAM, "Invalid param");
if (LABEL_IS_ALL_PERMITTED(workSpace->securityLabel)) { if (LABEL_IS_ALL_PERMITTED(workSpace->securityLabel)) {
return 0; return 0;
} }
...@@ -237,7 +239,7 @@ int CheckParamPermission(ParamWorkSpace *workSpace, ...@@ -237,7 +239,7 @@ int CheckParamPermission(ParamWorkSpace *workSpace,
return workSpace->paramSecurityOps.securityCheckParamPermission(srcLabel, &auditData, mode); return workSpace->paramSecurityOps.securityCheckParamPermission(srcLabel, &auditData, mode);
} }
static int DumpTrieDataNodeTraversal(WorkSpace *workSpace, ParamTrieNode *node, void *cookie) static int DumpTrieDataNodeTraversal(const WorkSpace *workSpace, const ParamTrieNode *node, void *cookie)
{ {
int verbose = *(int *)cookie; int verbose = *(int *)cookie;
ParamTrieNode *current = (ParamTrieNode *)node; ParamTrieNode *current = (ParamTrieNode *)node;
...@@ -245,28 +247,28 @@ static int DumpTrieDataNodeTraversal(WorkSpace *workSpace, ParamTrieNode *node, ...@@ -245,28 +247,28 @@ static int DumpTrieDataNodeTraversal(WorkSpace *workSpace, ParamTrieNode *node,
return 0; return 0;
} }
if (verbose) { if (verbose) {
printf(" Trie node info [%5u,%5u,%5u] data [%5u,%5u] length:%-5d %s \n", printf("\tTrie node info [%u,%u,%u] data: %u label: %u key length:%d \n\t key: %s \n",
current->left, current->right, current->child, current->left, current->right, current->child,
current->dataIndex, current->labelIndex, current->length, current->key); current->dataIndex, current->labelIndex, current->length, current->key);
} }
if (current->dataIndex != 0) { if (current->dataIndex != 0) {
ParamNode *entry = (ParamNode *)GetTrieNode(workSpace, current->dataIndex); ParamNode *entry = (ParamNode *)GetTrieNode(workSpace, current->dataIndex);
if (entry != NULL) { if (entry != NULL) {
printf("\tparameter length [%5d,%5d] %s \n", printf("\tparameter length info [%d, %d] \n\t param: %s \n",
entry->keyLength, entry->valueLength, (entry != NULL) ? entry->data : "null"); entry->keyLength, entry->valueLength, (entry != NULL) ? entry->data : "null");
} }
} }
if (current->labelIndex != 0) { if (current->labelIndex != 0 && verbose) {
ParamSecruityNode *label = (ParamSecruityNode *)GetTrieNode(workSpace, current->labelIndex); ParamSecruityNode *label = (ParamSecruityNode *)GetTrieNode(workSpace, current->labelIndex);
if (label != NULL) { if (label != NULL) {
printf("\tparameter label dac %d %d %o %s \n", printf("\tparameter label dac %d %d %o \n\t label: %s \n",
label->uid, label->gid, label->mode, (label->length > 0) ? label->data : "null"); label->uid, label->gid, label->mode, (label->length > 0) ? label->data : "null");
} }
} }
return 0; return 0;
} }
static void DumpWorkSpace(ParamWorkSpace *workSpace, int verbose) static void DumpWorkSpace(const ParamWorkSpace *workSpace, int verbose)
{ {
printf("workSpace information \n"); printf("workSpace information \n");
printf(" map file: %s \n", workSpace->paramSpace.fileName); printf(" map file: %s \n", workSpace->paramSpace.fileName);
...@@ -280,8 +282,9 @@ static void DumpWorkSpace(ParamWorkSpace *workSpace, int verbose) ...@@ -280,8 +282,9 @@ static void DumpWorkSpace(ParamWorkSpace *workSpace, int verbose)
TraversalTrieNode(&workSpace->paramSpace, NULL, DumpTrieDataNodeTraversal, (void *)&verbose); TraversalTrieNode(&workSpace->paramSpace, NULL, DumpTrieDataNodeTraversal, (void *)&verbose);
} }
void DumpParameters(ParamWorkSpace *workSpace, int verbose) void DumpParameters(const ParamWorkSpace *workSpace, int verbose)
{ {
PARAM_CHECK(workSpace != NULL && workSpace->securityLabel != NULL, return, "Invalid param");
printf("Dump all paramters begin ...\n"); printf("Dump all paramters begin ...\n");
DumpWorkSpace(workSpace, verbose); DumpWorkSpace(workSpace, verbose);
if (verbose) { if (verbose) {
......
...@@ -35,11 +35,11 @@ int ConntectServer(int fd, const char *servername) ...@@ -35,11 +35,11 @@ int ConntectServer(int fd, const char *servername)
PARAM_CHECK(ret > EOK, return -1, "Failed to sprintf_s server address"); PARAM_CHECK(ret > EOK, return -1, "Failed to sprintf_s server address");
int len = offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path); int len = offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path);
ret = connect(fd, (struct sockaddr *)&addr, len); ret = connect(fd, (struct sockaddr *)&addr, len);
PARAM_CHECK(ret != -1, return -1, "Failed to connect server %s %s", servername, strerror(errno)); PARAM_CHECK(ret != -1, return -1, "Failed to connect server %s %d", servername, errno);
return 0; return 0;
} }
int FillParamMsgContent(ParamMessage *request, uint32_t *start, int type, const char *value, uint32_t length) int FillParamMsgContent(const ParamMessage *request, uint32_t *start, int type, const char *value, uint32_t length)
{ {
PARAM_CHECK(request != NULL && start != NULL, return -1, "Invalid param"); PARAM_CHECK(request != NULL && start != NULL, return -1, "Invalid param");
PARAM_CHECK(value != NULL && length > 0, return -1, "Invalid value"); PARAM_CHECK(value != NULL && length > 0, return -1, "Invalid value");
...@@ -60,10 +60,11 @@ int FillParamMsgContent(ParamMessage *request, uint32_t *start, int type, const ...@@ -60,10 +60,11 @@ int FillParamMsgContent(ParamMessage *request, uint32_t *start, int type, const
ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize) ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize)
{ {
PARAM_CHECK(name != NULL, return NULL, "Invalid name");
if (msgSize < sizeof(ParamMessage)) { if (msgSize < sizeof(ParamMessage)) {
msgSize = sizeof(ParamMessage); msgSize = sizeof(ParamMessage);
} }
ParamMessage *msg = (ParamMessage *)malloc(msgSize); ParamMessage *msg = (ParamMessage *)calloc(1, msgSize);
PARAM_CHECK(msg != NULL, return NULL, "Failed to malloc message"); PARAM_CHECK(msg != NULL, return NULL, "Failed to malloc message");
msg->type = type; msg->type = type;
msg->id.msgId = 0; msg->id.msgId = 0;
...@@ -76,6 +77,8 @@ ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize) ...@@ -76,6 +77,8 @@ ParamMessage *CreateParamMessage(int type, const char *name, uint32_t msgSize)
ParamMsgContent *GetNextContent(const ParamMessage *reqest, uint32_t *offset) ParamMsgContent *GetNextContent(const ParamMessage *reqest, uint32_t *offset)
{ {
PARAM_CHECK(reqest != NULL, return NULL, "Invalid reqest");
PARAM_CHECK(offset != NULL, return NULL, "Invalid offset");
ParamMessage *msg = (ParamMessage *)reqest; ParamMessage *msg = (ParamMessage *)reqest;
if ((msg == NULL) || ((*offset + sizeof(ParamMessage) + sizeof(ParamMsgContent)) >= msg->msgSize)) { if ((msg == NULL) || ((*offset + sizeof(ParamMessage) + sizeof(ParamMsgContent)) >= msg->msgSize)) {
return NULL; return NULL;
......
...@@ -15,11 +15,8 @@ ...@@ -15,11 +15,8 @@
#include "param_trie.h" #include "param_trie.h"
#include <ctype.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -35,6 +32,7 @@ ...@@ -35,6 +32,7 @@
static int InitWorkSpace_(WorkSpace *workSpace, int mode, int prot, uint32_t spaceSize, int readOnly) static int InitWorkSpace_(WorkSpace *workSpace, int mode, int prot, uint32_t spaceSize, int readOnly)
{ {
PARAM_CHECK(workSpace != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace"); PARAM_CHECK(workSpace != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
PARAM_CHECK(spaceSize <= PARAM_WORKSPACE_MAX, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
PARAM_CHECK(workSpace->allocTrieNode != NULL, PARAM_CHECK(workSpace->allocTrieNode != NULL,
return PARAM_CODE_INVALID_PARAM, "Invalid allocTrieNode %s", workSpace->fileName); return PARAM_CODE_INVALID_PARAM, "Invalid allocTrieNode %s", workSpace->fileName);
PARAM_CHECK(workSpace->compareTrieNode != NULL, PARAM_CHECK(workSpace->compareTrieNode != NULL,
...@@ -44,14 +42,14 @@ static int InitWorkSpace_(WorkSpace *workSpace, int mode, int prot, uint32_t spa ...@@ -44,14 +42,14 @@ static int InitWorkSpace_(WorkSpace *workSpace, int mode, int prot, uint32_t spa
int fd = open(workSpace->fileName, mode, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); int fd = open(workSpace->fileName, mode, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
PARAM_CHECK(fd >= 0, return PARAM_CODE_INVALID_NAME, PARAM_CHECK(fd >= 0, return PARAM_CODE_INVALID_NAME,
"Open file %s mode %x fail error %s", workSpace->fileName, mode, strerror(errno)); "Open file %s mode %x fail error %d", workSpace->fileName, mode, errno);
if (!readOnly) { if (!readOnly) {
ftruncate(fd, spaceSize); ftruncate(fd, spaceSize);
} }
void *areaAddr = (void *)mmap(NULL, spaceSize, prot, MAP_SHARED, fd, 0); void *areaAddr = (void *)mmap(NULL, spaceSize, prot, MAP_SHARED, fd, 0);
PARAM_CHECK(areaAddr != MAP_FAILED, close(fd); return PARAM_CODE_ERROR_MAP_FILE, PARAM_CHECK(areaAddr != MAP_FAILED && areaAddr != NULL, close(fd);
"Failed to map memory error %s", strerror(errno)); return PARAM_CODE_ERROR_MAP_FILE, "Failed to map memory error %d", errno);
close(fd); close(fd);
if (!readOnly) { if (!readOnly) {
...@@ -93,7 +91,7 @@ static uint32_t AllocateParamTrieNode(WorkSpace *workSpace, const char *key, uin ...@@ -93,7 +91,7 @@ static uint32_t AllocateParamTrieNode(WorkSpace *workSpace, const char *key, uin
return offset; return offset;
} }
static int CompareParamTrieNode(ParamTrieNode *node, const char *key, uint32_t keyLen) static int CompareParamTrieNode(const ParamTrieNode *node, const char *key, uint32_t keyLen)
{ {
if (node->length > keyLen) { if (node->length > keyLen) {
return -1; return -1;
...@@ -112,9 +110,9 @@ int InitWorkSpace(const char *fileName, WorkSpace *workSpace, int onlyRead) ...@@ -112,9 +110,9 @@ int InitWorkSpace(const char *fileName, WorkSpace *workSpace, int onlyRead)
} }
workSpace->compareTrieNode = CompareParamTrieNode; workSpace->compareTrieNode = CompareParamTrieNode;
workSpace->allocTrieNode = AllocateParamTrieNode; workSpace->allocTrieNode = AllocateParamTrieNode;
int ret = memcpy_s(workSpace->fileName, FILENAME_LEN_MAX, fileName, strlen(fileName)); int ret = strcpy_s(workSpace->fileName, sizeof(workSpace->fileName), fileName);
PARAM_CHECK(ret == EOK, return PARAM_CODE_INVALID_NAME, "Copy file %s fail ", fileName); PARAM_CHECK(ret == 0, return ret, "Failed to copy file name %s", fileName);
int openMode = 0; int openMode;
int prot = PROT_READ; int prot = PROT_READ;
if (onlyRead) { if (onlyRead) {
openMode = O_RDONLY; openMode = O_RDONLY;
...@@ -134,8 +132,9 @@ void CloseWorkSpace(WorkSpace *workSpace) ...@@ -134,8 +132,9 @@ void CloseWorkSpace(WorkSpace *workSpace)
workSpace->area = NULL; workSpace->area = NULL;
} }
static ParamTrieNode *GetTrieRoot(WorkSpace *workSpace) static ParamTrieNode *GetTrieRoot(const WorkSpace *workSpace)
{ {
PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return NULL, "The workspace is null");
return (ParamTrieNode *)(workSpace->area->data + workSpace->area->firstNode); return (ParamTrieNode *)(workSpace->area->data + workSpace->area->firstNode);
} }
...@@ -151,7 +150,7 @@ static void GetNextKey(const char **remainingKey, char **subKey, uint32_t *subKe ...@@ -151,7 +150,7 @@ static void GetNextKey(const char **remainingKey, char **subKey, uint32_t *subKe
static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current, const char *key, uint32_t keyLen) static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current, const char *key, uint32_t keyLen)
{ {
if (current == NULL) { if (current == NULL || workSpace == NULL || key == NULL) {
return NULL; return NULL;
} }
ParamTrieNode *subTrie = NULL; ParamTrieNode *subTrie = NULL;
...@@ -182,7 +181,7 @@ static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current, ...@@ -182,7 +181,7 @@ static ParamTrieNode *AddToSubTrie(WorkSpace *workSpace, ParamTrieNode *current,
ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen) ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen)
{ {
PARAM_CHECK(key != NULL && keyLen > 0, return NULL, "Invalid param "); PARAM_CHECK(key != NULL && keyLen > 0, return NULL, "Invalid param ");
PARAM_CHECK(workSpace != NULL, return NULL, "Invalid param %s", key); PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return 0, "Invalid workSpace %s", key);
PARAM_CHECK(workSpace->allocTrieNode != NULL, return NULL, "Invalid param %s", key); PARAM_CHECK(workSpace->allocTrieNode != NULL, return NULL, "Invalid param %s", key);
PARAM_CHECK(workSpace->compareTrieNode != NULL, return NULL, "Invalid param %s", key); PARAM_CHECK(workSpace->compareTrieNode != NULL, return NULL, "Invalid param %s", key);
const char *remainingKey = key; const char *remainingKey = key;
...@@ -215,7 +214,7 @@ ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLe ...@@ -215,7 +214,7 @@ ParamTrieNode *AddTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLe
return current; return current;
} }
static ParamTrieNode *FindSubTrie(WorkSpace *workSpace, static ParamTrieNode *FindSubTrie(const WorkSpace *workSpace,
ParamTrieNode *current, const char *key, uint32_t keyLen, uint32_t *matchLabel) ParamTrieNode *current, const char *key, uint32_t keyLen, uint32_t *matchLabel)
{ {
if (current == NULL) { if (current == NULL) {
...@@ -244,10 +243,10 @@ static ParamTrieNode *FindSubTrie(WorkSpace *workSpace, ...@@ -244,10 +243,10 @@ static ParamTrieNode *FindSubTrie(WorkSpace *workSpace,
return FindSubTrie(workSpace, subTrie, key, keyLen, matchLabel); return FindSubTrie(workSpace, subTrie, key, keyLen, matchLabel);
} }
ParamTrieNode *FindTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, uint32_t *matchLabel) ParamTrieNode *FindTrieNode(const WorkSpace *workSpace, const char *key, uint32_t keyLen, uint32_t *matchLabel)
{ {
PARAM_CHECK(key != NULL && keyLen > 0, return NULL, "Invalid key "); PARAM_CHECK(key != NULL && keyLen > 0, return NULL, "Invalid key ");
PARAM_CHECK(workSpace != NULL, return NULL, "Invalid workSpace %s", key); PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return 0, "Invalid workSpace %s", key);
PARAM_CHECK(workSpace->allocTrieNode != NULL, return NULL, "Invalid alloc function %s", key); PARAM_CHECK(workSpace->allocTrieNode != NULL, return NULL, "Invalid alloc function %s", key);
PARAM_CHECK(workSpace->compareTrieNode != NULL, return NULL, "Invalid compare function %s", key); PARAM_CHECK(workSpace->compareTrieNode != NULL, return NULL, "Invalid compare function %s", key);
const char *remainingKey = key; const char *remainingKey = key;
...@@ -286,8 +285,8 @@ ParamTrieNode *FindTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyL ...@@ -286,8 +285,8 @@ ParamTrieNode *FindTrieNode(WorkSpace *workSpace, const char *key, uint32_t keyL
return current; return current;
} }
static int TraversalSubTrieNode(WorkSpace *workSpace, static int TraversalSubTrieNode(const WorkSpace *workSpace,
ParamTrieNode *current, TraversalTrieNodePtr walkFunc, void *cookie) const ParamTrieNode *current, TraversalTrieNodePtr walkFunc, void *cookie)
{ {
if (current == NULL) { if (current == NULL) {
return 0; return 0;
...@@ -299,11 +298,11 @@ static int TraversalSubTrieNode(WorkSpace *workSpace, ...@@ -299,11 +298,11 @@ static int TraversalSubTrieNode(WorkSpace *workSpace,
return 0; return 0;
} }
int TraversalTrieNode(WorkSpace *workSpace, ParamTrieNode *root, TraversalTrieNodePtr walkFunc, void *cookie) int TraversalTrieNode(const WorkSpace *workSpace, const ParamTrieNode *root, TraversalTrieNodePtr walkFunc, void *cookie)
{ {
PARAM_CHECK(walkFunc != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param"); PARAM_CHECK(walkFunc != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
PARAM_CHECK(workSpace != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param"); PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return 0, "Invalid workSpace");
ParamTrieNode *current = root; ParamTrieNode *current = (ParamTrieNode *)root;
if (root == NULL) { if (root == NULL) {
current = GetTrieRoot(workSpace); current = GetTrieRoot(workSpace);
} }
...@@ -321,9 +320,9 @@ int TraversalTrieNode(WorkSpace *workSpace, ParamTrieNode *root, TraversalTrieNo ...@@ -321,9 +320,9 @@ int TraversalTrieNode(WorkSpace *workSpace, ParamTrieNode *root, TraversalTrieNo
uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditData) uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditData)
{ {
PARAM_CHECK(workSpace != NULL, return 0, "Invalid param"); PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return 0, "Invalid param");
PARAM_CHECK(auditData != NULL && auditData->name != NULL, return 0, "Invalid auditData"); PARAM_CHECK(auditData != NULL && auditData->name != NULL, return 0, "Invalid auditData");
uint32_t labelLen = ((auditData->label == NULL) || (strlen(auditData->label) == 0)) ? 0 : strlen(auditData->label); const uint32_t labelLen = (auditData->label == NULL) ? 0 : strlen(auditData->label);
uint32_t realLen = sizeof(ParamSecruityNode) + PARAM_ALIGN(labelLen + 1); uint32_t realLen = sizeof(ParamSecruityNode) + PARAM_ALIGN(labelLen + 1);
PARAM_CHECK((workSpace->area->currOffset + realLen) < workSpace->area->dataSize, return 0, PARAM_CHECK((workSpace->area->currOffset + realLen) < workSpace->area->dataSize, return 0,
"Failed to allocate currOffset %u, dataSize %u datalen %u", "Failed to allocate currOffset %u, dataSize %u datalen %u",
...@@ -348,7 +347,7 @@ uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditD ...@@ -348,7 +347,7 @@ uint32_t AddParamSecruityNode(WorkSpace *workSpace, const ParamAuditData *auditD
uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, const char *value, uint32_t valueLen) uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, const char *value, uint32_t valueLen)
{ {
PARAM_CHECK(workSpace != NULL, return 0, "Invalid param"); PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return 0, "Invalid param");
PARAM_CHECK(key != NULL && value != NULL, return 0, "Invalid param"); PARAM_CHECK(key != NULL && value != NULL, return 0, "Invalid param");
uint32_t realLen = sizeof(ParamNode) + 1 + 1; uint32_t realLen = sizeof(ParamNode) + 1 + 1;
...@@ -375,8 +374,9 @@ uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, co ...@@ -375,8 +374,9 @@ uint32_t AddParamNode(WorkSpace *workSpace, const char *key, uint32_t keyLen, co
return offset; return offset;
} }
ParamTrieNode *GetTrieNode(WorkSpace *workSpace, uint32_t offset) ParamTrieNode *GetTrieNode(const WorkSpace *workSpace, uint32_t offset)
{ {
PARAM_CHECK(workSpace != NULL && workSpace->area != NULL, return NULL, "Invalid param");
if (offset == 0 || offset > workSpace->area->dataSize) { if (offset == 0 || offset > workSpace->area->dataSize) {
return NULL; return NULL;
} }
...@@ -385,5 +385,6 @@ ParamTrieNode *GetTrieNode(WorkSpace *workSpace, uint32_t offset) ...@@ -385,5 +385,6 @@ ParamTrieNode *GetTrieNode(WorkSpace *workSpace, uint32_t offset)
void SaveIndex(uint32_t *index, uint32_t offset) void SaveIndex(uint32_t *index, uint32_t offset)
{ {
PARAM_CHECK(index != NULL, return, "Invalid index");
*index = offset; *index = offset;
} }
...@@ -14,13 +14,12 @@ ...@@ -14,13 +14,12 @@
*/ */
#include "param_utils.h" #include "param_utils.h"
#include <ctype.h> #include <ctype.h>
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <pwd.h> #include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
...@@ -43,6 +42,9 @@ void CheckAndCreateDir(const char *fileName) ...@@ -43,6 +42,9 @@ void CheckAndCreateDir(const char *fileName)
int ReadFileInDir(const char *dirPath, const char *includeExt, int ReadFileInDir(const char *dirPath, const char *includeExt,
int (*processFile)(const char *fileName, void *context), void *context) int (*processFile)(const char *fileName, void *context), void *context)
{ {
if (dirPath == NULL || processFile == NULL) {
return NULL;
}
DIR *pDir = opendir(dirPath); DIR *pDir = opendir(dirPath);
PARAM_CHECK(pDir != NULL, return -1, "Read dir :%s failed.%d", dirPath, errno); PARAM_CHECK(pDir != NULL, return -1, "Read dir :%s failed.%d", dirPath, errno);
char *fileName = malloc(PARAM_BUFFER_SIZE); char *fileName = malloc(PARAM_BUFFER_SIZE);
...@@ -84,7 +86,7 @@ char *ReadFileData(const char *fileName) ...@@ -84,7 +86,7 @@ char *ReadFileData(const char *fileName)
char *buffer = NULL; char *buffer = NULL;
int fd = -1; int fd = -1;
do { do {
fd = open(fileName, O_RDONLY); fd = open(fileName, O_RDONLY); // 阶段早,不能使用realpath
PARAM_CHECK(fd >= 0, break, "Failed to read file %s", fileName); PARAM_CHECK(fd >= 0, break, "Failed to read file %s", fileName);
buffer = (char *)malloc(MAX_DATA_BUFFER); buffer = (char *)malloc(MAX_DATA_BUFFER);
...@@ -112,6 +114,7 @@ static void TrimString(char *string, uint32_t currLen) ...@@ -112,6 +114,7 @@ static void TrimString(char *string, uint32_t currLen)
int GetSubStringInfo(const char *buff, uint32_t buffLen, char delimiter, SubStringInfo *info, int subStrNumber) int GetSubStringInfo(const char *buff, uint32_t buffLen, char delimiter, SubStringInfo *info, int subStrNumber)
{ {
PARAM_CHECK(buff == NULL && info == NULL, return 0, "Invalid buff");
size_t i = 0; size_t i = 0;
// 去掉开始的空格 // 去掉开始的空格
for (; i < strlen(buff); i++) { for (; i < strlen(buff); i++) {
......
...@@ -39,7 +39,7 @@ static int AddPersistParam(const char *name, const char *value, void *context) ...@@ -39,7 +39,7 @@ static int AddPersistParam(const char *name, const char *value, void *context)
return 0; return 0;
} }
static int SavePersistParam(WorkSpace *workSpace, ParamTrieNode *node, void *cookie) static int SavePersistParam(const WorkSpace *workSpace, const ParamTrieNode *node, void *cookie)
{ {
ParamTrieNode *current = (ParamTrieNode *)node; ParamTrieNode *current = (ParamTrieNode *)node;
if (current == NULL || current->dataIndex == 0) { if (current == NULL || current->dataIndex == 0) {
...@@ -49,7 +49,6 @@ static int SavePersistParam(WorkSpace *workSpace, ParamTrieNode *node, void *coo ...@@ -49,7 +49,6 @@ static int SavePersistParam(WorkSpace *workSpace, ParamTrieNode *node, void *coo
if (entry == NULL) { if (entry == NULL) {
return 0; return 0;
} }
PARAM_LOGD("SavePersistParam %s", entry->data);
if (strncmp(entry->data, PARAM_CONST_PREFIX, strlen(PARAM_CONST_PREFIX)) != 0) { if (strncmp(entry->data, PARAM_CONST_PREFIX, strlen(PARAM_CONST_PREFIX)) != 0) {
return 0; return 0;
} }
...@@ -62,7 +61,7 @@ static int SavePersistParam(WorkSpace *workSpace, ParamTrieNode *node, void *coo ...@@ -62,7 +61,7 @@ static int SavePersistParam(WorkSpace *workSpace, ParamTrieNode *node, void *coo
return ret; return ret;
} }
static int BatchSavePersistParam(WorkSpace *workSpace) static int BatchSavePersistParam(const WorkSpace *workSpace)
{ {
PARAM_LOGI("BatchSavePersistParam"); PARAM_LOGI("BatchSavePersistParam");
if (g_persistWorkSpace.persistParamOps.batchSaveBegin == NULL || if (g_persistWorkSpace.persistParamOps.batchSaveBegin == NULL ||
...@@ -84,8 +83,9 @@ static int BatchSavePersistParam(WorkSpace *workSpace) ...@@ -84,8 +83,9 @@ static int BatchSavePersistParam(WorkSpace *workSpace)
return ret; return ret;
} }
int InitPersistParamWorkSpace(ParamWorkSpace *workSpace) int InitPersistParamWorkSpace(const ParamWorkSpace *workSpace)
{ {
UNUSED(workSpace);
if (PARAM_TEST_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_INIT)) { if (PARAM_TEST_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_INIT)) {
return 0; return 0;
} }
...@@ -107,20 +107,17 @@ void ClosePersistParamWorkSpace(void) ...@@ -107,20 +107,17 @@ void ClosePersistParamWorkSpace(void)
int LoadPersistParam(ParamWorkSpace *workSpace) int LoadPersistParam(ParamWorkSpace *workSpace)
{ {
PARAM_CHECK(workSpace != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
int ret = InitPersistParamWorkSpace(workSpace); int ret = InitPersistParamWorkSpace(workSpace);
PARAM_CHECK(ret == 0, return ret, "Failed to init persist param"); PARAM_CHECK(ret == 0, return ret, "Failed to init persist param");
if (PARAM_TEST_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_LOADED)) { if (PARAM_TEST_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_LOADED)) {
PARAM_LOGE("Persist param has been loaded"); PARAM_LOGE("Persist param has been loaded");
return 0; return 0;
} }
ret = -1;
if (g_persistWorkSpace.persistParamOps.load != NULL) { if (g_persistWorkSpace.persistParamOps.load != NULL) {
ret = g_persistWorkSpace.persistParamOps.load(AddPersistParam, &workSpace->paramSpace); int ret = g_persistWorkSpace.persistParamOps.load(AddPersistParam, &workSpace->paramSpace);
}
if (ret == 0) {
PARAM_SET_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_LOADED); PARAM_SET_FLAG(g_persistWorkSpace.flags, WORKSPACE_FLAGS_LOADED);
} else { PARAM_CHECK(ret == 0, return ret, "Failed to load persist param");
PARAM_LOGE("Failed to load persist param ");
} }
// 刷新新增的常量到persist // 刷新新增的常量到persist
BatchSavePersistParam(&workSpace->paramSpace); BatchSavePersistParam(&workSpace->paramSpace);
...@@ -140,6 +137,7 @@ static void TimerCallbackForSave(ParamTaskPtr timer, void *context) ...@@ -140,6 +137,7 @@ static void TimerCallbackForSave(ParamTaskPtr timer, void *context)
int WritePersistParam(ParamWorkSpace *workSpace, const char *name, const char *value) int WritePersistParam(ParamWorkSpace *workSpace, const char *name, const char *value)
{ {
PARAM_CHECK(workSpace != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
PARAM_CHECK(value != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param"); PARAM_CHECK(value != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid param");
if (strncmp(name, PARAM_CONST_PREFIX, strlen(PARAM_CONST_PREFIX)) != 0) { if (strncmp(name, PARAM_CONST_PREFIX, strlen(PARAM_CONST_PREFIX)) != 0) {
return 0; return 0;
......
...@@ -14,11 +14,10 @@ ...@@ -14,11 +14,10 @@
*/ */
#include "param_service.h" #include "param_service.h"
#include <ctype.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/ipc.h> #include <sys/ipc.h>
#include <sys/msg.h> #include <sys/msg.h>
...@@ -58,7 +57,7 @@ static int AddParam(WorkSpace *workSpace, const char *name, const char *value, u ...@@ -58,7 +57,7 @@ static int AddParam(WorkSpace *workSpace, const char *name, const char *value, u
return 0; return 0;
} }
static int UpdateParam(WorkSpace *workSpace, uint32_t *dataIndex, const char *name, const char *value) static int UpdateParam(const WorkSpace *workSpace, uint32_t *dataIndex, const char *name, const char *value)
{ {
ParamNode *entry = (ParamNode *)GetTrieNode(workSpace, *dataIndex); ParamNode *entry = (ParamNode *)GetTrieNode(workSpace, *dataIndex);
PARAM_CHECK(entry != NULL, return PARAM_CODE_REACHED_MAX, "Failed to update param value %s %u", name, *dataIndex); PARAM_CHECK(entry != NULL, return PARAM_CODE_REACHED_MAX, "Failed to update param value %s %u", name, *dataIndex);
...@@ -79,7 +78,7 @@ static int UpdateParam(WorkSpace *workSpace, uint32_t *dataIndex, const char *na ...@@ -79,7 +78,7 @@ static int UpdateParam(WorkSpace *workSpace, uint32_t *dataIndex, const char *na
return 0; return 0;
} }
static int CheckParamValue(WorkSpace *workSpace, const ParamTrieNode *node, const char *name, const char *value) static int CheckParamValue(const WorkSpace *workSpace, const ParamTrieNode *node, const char *name, const char *value)
{ {
if (IS_READY_ONLY(name)) { if (IS_READY_ONLY(name)) {
PARAM_CHECK(strlen(value) < PARAM_CONST_VALUE_LEN_MAX, PARAM_CHECK(strlen(value) < PARAM_CONST_VALUE_LEN_MAX,
...@@ -96,7 +95,7 @@ static int CheckParamValue(WorkSpace *workSpace, const ParamTrieNode *node, cons ...@@ -96,7 +95,7 @@ static int CheckParamValue(WorkSpace *workSpace, const ParamTrieNode *node, cons
return 0; return 0;
} }
int WriteParam(WorkSpace *workSpace, const char *name, const char *value, uint32_t *dataIndex, int onlyAdd) int WriteParam(const WorkSpace *workSpace, const char *name, const char *value, uint32_t *dataIndex, int onlyAdd)
{ {
PARAM_CHECK(workSpace != NULL && dataIndex != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace"); PARAM_CHECK(workSpace != NULL && dataIndex != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid workSpace");
PARAM_CHECK(value != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid name or value"); PARAM_CHECK(value != NULL && name != NULL, return PARAM_CODE_INVALID_PARAM, "Invalid name or value");
...@@ -110,7 +109,7 @@ int WriteParam(WorkSpace *workSpace, const char *name, const char *value, uint32 ...@@ -110,7 +109,7 @@ int WriteParam(WorkSpace *workSpace, const char *name, const char *value, uint32
} }
return UpdateParam(workSpace, &node->dataIndex, name, value); return UpdateParam(workSpace, &node->dataIndex, name, value);
} }
return AddParam(workSpace, name, value, dataIndex); return AddParam((WorkSpace *)workSpace, name, value, dataIndex);
} }
PARAM_STATIC int AddSecurityLabel(const ParamAuditData *auditData, void *context) PARAM_STATIC int AddSecurityLabel(const ParamAuditData *auditData, void *context)
...@@ -162,7 +161,8 @@ static char *GetServiceCtrlName(const char *name, const char *value) ...@@ -162,7 +161,8 @@ static char *GetServiceCtrlName(const char *name, const char *value)
key = (char *)malloc(keySize + 1); key = (char *)malloc(keySize + 1);
PARAM_CHECK(key != NULL, return NULL, "Failed to alloc memory for %s", name); PARAM_CHECK(key != NULL, return NULL, "Failed to alloc memory for %s", name);
int ret = sprintf_s(key, keySize, "%s%s", OHOS_SERVICE_CTRL_PREFIX, powerCtrlArg[i][1]); int ret = sprintf_s(key, keySize, "%s%s", OHOS_SERVICE_CTRL_PREFIX, powerCtrlArg[i][1]);
PARAM_CHECK(ret > EOK, return NULL, "Failed to format key for %s", name); PARAM_CHECK(ret > EOK, free(key);
return NULL, "Failed to format key for %s", name);
return key; return key;
} }
} }
...@@ -173,7 +173,8 @@ static char *GetServiceCtrlName(const char *name, const char *value) ...@@ -173,7 +173,8 @@ static char *GetServiceCtrlName(const char *name, const char *value)
key = (char *)malloc(keySize + 1); key = (char *)malloc(keySize + 1);
PARAM_CHECK(key != NULL, return NULL, "Failed to alloc memory for %s", name); PARAM_CHECK(key != NULL, return NULL, "Failed to alloc memory for %s", name);
int ret = sprintf_s(key, keySize, "%s%s", OHOS_SERVICE_CTRL_PREFIX, value); int ret = sprintf_s(key, keySize, "%s%s", OHOS_SERVICE_CTRL_PREFIX, value);
PARAM_CHECK(ret > EOK, return NULL, "Failed to format key for %s", name); PARAM_CHECK(ret > EOK, free(key);
return NULL, "Failed to format key for %s", name);
return key; return key;
} }
} }
...@@ -187,7 +188,7 @@ static void CheckAndSendTrigger(ParamWorkSpace *workSpace, uint32_t dataIndex, c ...@@ -187,7 +188,7 @@ static void CheckAndSendTrigger(ParamWorkSpace *workSpace, uint32_t dataIndex, c
PARAM_CHECK(entry != NULL, return, "Failed to get data %s ", name); PARAM_CHECK(entry != NULL, return, "Failed to get data %s ", name);
uint32_t trigger = 1; uint32_t trigger = 1;
if ((atomic_load_explicit(&entry->commitId, memory_order_relaxed) & PARAM_FLAGS_TRIGGED) != PARAM_FLAGS_TRIGGED) { if ((atomic_load_explicit(&entry->commitId, memory_order_relaxed) & PARAM_FLAGS_TRIGGED) != PARAM_FLAGS_TRIGGED) {
trigger = CheckAndMarkTrigger(TRIGGER_PARAM, name) != 0 ? 1 : 0; trigger = (CheckAndMarkTrigger(TRIGGER_PARAM, name) != 0) ? 1 : 0;
} }
if (trigger) { if (trigger) {
atomic_store_explicit(&entry->commitId, atomic_store_explicit(&entry->commitId,
...@@ -198,7 +199,7 @@ static void CheckAndSendTrigger(ParamWorkSpace *workSpace, uint32_t dataIndex, c ...@@ -198,7 +199,7 @@ static void CheckAndSendTrigger(ParamWorkSpace *workSpace, uint32_t dataIndex, c
int wait = 1; int wait = 1;
if ((atomic_load_explicit(&entry->commitId, memory_order_relaxed) & PARAM_FLAGS_WAITED) != PARAM_FLAGS_WAITED) { if ((atomic_load_explicit(&entry->commitId, memory_order_relaxed) & PARAM_FLAGS_WAITED) != PARAM_FLAGS_WAITED) {
wait = CheckAndMarkTrigger(TRIGGER_PARAM_WAIT, name) != 0 ? 1 : 0; wait = (CheckAndMarkTrigger(TRIGGER_PARAM_WAIT, name) != 0) ? 1 : 0;
} }
if (wait) { if (wait) {
atomic_store_explicit(&entry->commitId, atomic_store_explicit(&entry->commitId,
...@@ -218,12 +219,12 @@ static int SystemSetParam(const char *name, const char *value, const ParamSecuri ...@@ -218,12 +219,12 @@ static int SystemSetParam(const char *name, const char *value, const ParamSecuri
char *key = GetServiceCtrlName(name, value); char *key = GetServiceCtrlName(name, value);
if (srcLabel != NULL) { if (srcLabel != NULL) {
ret = CheckParamPermission(&g_paramWorkSpace, srcLabel, (key == NULL) ? name : key, DAC_WRITE); ret = CheckParamPermission(&g_paramWorkSpace, srcLabel, (key == NULL) ? name : key, DAC_WRITE);
PARAM_CHECK(ret == 0, return ret, "Forbit to set parameter %s", name);
} }
if (key != NULL) { if (key != NULL) {
serviceCtrl = 1; serviceCtrl = 1;
free(key); free(key);
} }
PARAM_CHECK(ret == 0, return ret, "Forbit to set parameter %s", name);
uint32_t dataIndex = 0; uint32_t dataIndex = 0;
ret = WriteParam(&g_paramWorkSpace.paramSpace, name, value, &dataIndex, 0); ret = WriteParam(&g_paramWorkSpace.paramSpace, name, value, &dataIndex, 0);
PARAM_CHECK(ret == 0, return ret, "Failed to set param %d name %s %s", ret, name, value); PARAM_CHECK(ret == 0, return ret, "Failed to set param %d name %s %s", ret, name, value);
...@@ -249,7 +250,7 @@ static int SendResponseMsg(ParamTaskPtr worker, const ParamMessage *msg, int res ...@@ -249,7 +250,7 @@ static int SendResponseMsg(ParamTaskPtr worker, const ParamMessage *msg, int res
return 0; return 0;
} }
static int SendWatcherNotifyMessage(TriggerExtData *extData, int cmd, const char *content) static int SendWatcherNotifyMessage(const TriggerExtData *extData, int cmd, const char *content)
{ {
UNUSED(cmd); UNUSED(cmd);
PARAM_CHECK(content != NULL, return -1, "Invalid content"); PARAM_CHECK(content != NULL, return -1, "Invalid content");
...@@ -259,7 +260,7 @@ static int SendWatcherNotifyMessage(TriggerExtData *extData, int cmd, const char ...@@ -259,7 +260,7 @@ static int SendWatcherNotifyMessage(TriggerExtData *extData, int cmd, const char
PARAM_CHECK(msg != NULL, return -1, "Failed to create msg "); PARAM_CHECK(msg != NULL, return -1, "Failed to create msg ");
uint32_t offset = 0; uint32_t offset = 0;
int ret = 0; int ret;
char *tmp = strstr(content, "="); char *tmp = strstr(content, "=");
if (tmp != NULL) { if (tmp != NULL) {
ret = strncpy_s(msg->key, sizeof(msg->key) - 1, content, tmp - content); ret = strncpy_s(msg->key, sizeof(msg->key) - 1, content, tmp - content);
...@@ -287,7 +288,7 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg) ...@@ -287,7 +288,7 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg)
uint32_t offset = 0; uint32_t offset = 0;
ParamMsgContent *valueContent = GetNextContent(msg, &offset); ParamMsgContent *valueContent = GetNextContent(msg, &offset);
PARAM_CHECK(valueContent != NULL, return -1, "Invalid msg for %s", msg->key); PARAM_CHECK(valueContent != NULL, return -1, "Invalid msg for %s", msg->key);
int ret = 0; int ret;
ParamMsgContent *lableContent = GetNextContent(msg, &offset); ParamMsgContent *lableContent = GetNextContent(msg, &offset);
ParamSecurityLabel *srcLabel = NULL; ParamSecurityLabel *srcLabel = NULL;
if (lableContent != NULL && lableContent->contentSize != 0) { if (lableContent != NULL && lableContent->contentSize != 0) {
...@@ -306,7 +307,7 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg) ...@@ -306,7 +307,7 @@ static int HandleParamSet(const ParamTaskPtr worker, const ParamMessage *msg)
return SendResponseMsg(worker, msg, ret); return SendResponseMsg(worker, msg, ret);
} }
static ParamNode *CheckMatchParamWait(ParamWorkSpace *worksapce, const char *name, const char *value) static ParamNode *CheckMatchParamWait(const ParamWorkSpace *worksapce, const char *name, const char *value)
{ {
uint32_t nameLength = strlen(name); uint32_t nameLength = strlen(name);
ParamTrieNode *node = FindTrieNode(&worksapce->paramSpace, name, nameLength, NULL); ParamTrieNode *node = FindTrieNode(&worksapce->paramSpace, name, nameLength, NULL);
...@@ -332,13 +333,14 @@ static ParamNode *CheckMatchParamWait(ParamWorkSpace *worksapce, const char *nam ...@@ -332,13 +333,14 @@ static ParamNode *CheckMatchParamWait(ParamWorkSpace *worksapce, const char *nam
return NULL; return NULL;
} }
static int HandleParamWaitAdd(ParamWorkSpace *worksapce, const ParamTaskPtr worker, const ParamMessage *msg) static int HandleParamWaitAdd(const ParamWorkSpace *worksapce, const ParamTaskPtr worker, const ParamMessage *msg)
{ {
PARAM_CHECK(msg != NULL, return -1, "Invalid message"); PARAM_CHECK(msg != NULL, return -1, "Invalid message");
uint32_t offset = 0; uint32_t offset = 0;
uint32_t timeout = DEFAULT_PARAM_WAIT_TIMEOUT; uint32_t timeout = DEFAULT_PARAM_WAIT_TIMEOUT;
ParamMsgContent *valueContent = GetNextContent(msg, &offset); ParamMsgContent *valueContent = GetNextContent(msg, &offset);
PARAM_CHECK(valueContent != NULL, return -1, "Invalid msg"); PARAM_CHECK(valueContent != NULL, return -1, "Invalid msg");
PARAM_CHECK(valueContent->contentSize <= PARAM_CONST_VALUE_LEN_MAX, return -1, "Invalid msg");
ParamMsgContent *timeoutContent = GetNextContent(msg, &offset); ParamMsgContent *timeoutContent = GetNextContent(msg, &offset);
if (timeoutContent != NULL) { if (timeoutContent != NULL) {
timeout = *((uint32_t *)(timeoutContent->content)); timeout = *((uint32_t *)(timeoutContent->content));
...@@ -361,7 +363,7 @@ static int HandleParamWaitAdd(ParamWorkSpace *worksapce, const ParamTaskPtr work ...@@ -361,7 +363,7 @@ static int HandleParamWaitAdd(ParamWorkSpace *worksapce, const ParamTaskPtr work
} }
uint32_t buffSize = strlen(msg->key) + valueContent->contentSize + 1 + 1; uint32_t buffSize = strlen(msg->key) + valueContent->contentSize + 1 + 1;
char *condition = malloc(buffSize); char *condition = calloc(1, buffSize);
PARAM_CHECK(condition != NULL, return -1, "Failed to create condition for %s", msg->key); PARAM_CHECK(condition != NULL, return -1, "Failed to create condition for %s", msg->key);
int ret = sprintf_s(condition, buffSize - 1, "%s=%s", msg->key, valueContent->content); int ret = sprintf_s(condition, buffSize - 1, "%s=%s", msg->key, valueContent->content);
PARAM_CHECK(ret > EOK, free(condition); PARAM_CHECK(ret > EOK, free(condition);
...@@ -407,7 +409,7 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m ...@@ -407,7 +409,7 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m
{ {
PARAM_CHECK(msg != NULL, return -1, "Invalid msg"); PARAM_CHECK(msg != NULL, return -1, "Invalid msg");
PARAM_CHECK(worker != NULL, return -1, "Invalid worker"); PARAM_CHECK(worker != NULL, return -1, "Invalid worker");
int ret = 0; int ret = PARAM_CODE_INVALID_PARAM;
switch (msg->type) { switch (msg->type) {
case MSG_SET_PARAM: case MSG_SET_PARAM:
ret = HandleParamSet(worker, msg); ret = HandleParamSet(worker, msg);
...@@ -428,17 +430,18 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m ...@@ -428,17 +430,18 @@ PARAM_STATIC int ProcessMessage(const ParamTaskPtr worker, const ParamMessage *m
return 0; return 0;
} }
static int LoadDefaultParam_(const char *fileName, int mode, const char *exclude[], uint32_t count) static int LoadDefaultParam_(const char *fileName, uint32_t mode, const char *exclude[], uint32_t count)
{ {
uint32_t paramNum = 0; uint32_t paramNum = 0;
FILE *fp = fopen(fileName, "r"); FILE *fp = fopen(fileName, "r");
PARAM_CHECK(fp != NULL, return -1, "Open file %s fail", fileName); PARAM_CHECK(fp != NULL, return -1, "Open file %s fail", fileName);
char *buff = malloc(sizeof(SubStringInfo) * (SUBSTR_INFO_VALUE + 1) + PARAM_BUFFER_SIZE); char *buff = calloc(1, sizeof(SubStringInfo) * (SUBSTR_INFO_VALUE + 1) + PARAM_BUFFER_SIZE);
PARAM_CHECK(buff != NULL, (void)fclose(fp); PARAM_CHECK(buff != NULL, (void)fclose(fp);
return -1, "Failed to alloc memory for load %s", fileName); return -1, "Failed to alloc memory for load %s", fileName);
SubStringInfo *info = (SubStringInfo *)(buff + PARAM_BUFFER_SIZE); SubStringInfo *info = (SubStringInfo *)(buff + PARAM_BUFFER_SIZE);
while (fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) { while (fgets(buff, PARAM_BUFFER_SIZE, fp) != NULL) {
buff[PARAM_BUFFER_SIZE - 1] = '\0';
int subStrNumber = GetSubStringInfo(buff, strlen(buff), '=', info, SUBSTR_INFO_VALUE + 1); int subStrNumber = GetSubStringInfo(buff, strlen(buff), '=', info, SUBSTR_INFO_VALUE + 1);
if (subStrNumber <= SUBSTR_INFO_VALUE) { if (subStrNumber <= SUBSTR_INFO_VALUE) {
continue; continue;
...@@ -465,7 +468,7 @@ static int LoadDefaultParam_(const char *fileName, int mode, const char *exclude ...@@ -465,7 +468,7 @@ static int LoadDefaultParam_(const char *fileName, int mode, const char *exclude
return 0; return 0;
} }
static int OnIncomingConnect(const ParamTaskPtr server, int flags) static int OnIncomingConnect(const ParamTaskPtr server, uint32_t flags)
{ {
PARAM_LOGD("OnIncomingConnect %p", server); PARAM_LOGD("OnIncomingConnect %p", server);
ParamStreamInfo info = {}; ParamStreamInfo info = {};
...@@ -479,6 +482,7 @@ static int OnIncomingConnect(const ParamTaskPtr server, int flags) ...@@ -479,6 +482,7 @@ static int OnIncomingConnect(const ParamTaskPtr server, int flags)
PARAM_CHECK(ret == 0, return -1, "Failed to create client"); PARAM_CHECK(ret == 0, return -1, "Failed to create client");
ParamWatcher *watcher = (ParamWatcher *)ParamGetTaskUserData(client); ParamWatcher *watcher = (ParamWatcher *)ParamGetTaskUserData(client);
PARAM_CHECK(watcher != NULL, return -1, "Failed to get watcher");
ListInit(&watcher->node); ListInit(&watcher->node);
PARAM_TRIGGER_HEAD_INIT(watcher->triggerHead); PARAM_TRIGGER_HEAD_INIT(watcher->triggerHead);
ListAddTail(&GetTriggerWorkSpace()->waitList, &watcher->node); ListAddTail(&GetTriggerWorkSpace()->waitList, &watcher->node);
...@@ -490,6 +494,7 @@ static int OnIncomingConnect(const ParamTaskPtr server, int flags) ...@@ -490,6 +494,7 @@ static int OnIncomingConnect(const ParamTaskPtr server, int flags)
static void TimerCallback(ParamTaskPtr timer, void *context) static void TimerCallback(ParamTaskPtr timer, void *context)
{ {
UNUSED(context); UNUSED(context);
PARAM_CHECK(GetTriggerWorkSpace() != NULL, return, "Invalid wrokspace");
ParamWatcher *watcher = GetNextParamWatcher(GetTriggerWorkSpace(), NULL); ParamWatcher *watcher = GetNextParamWatcher(GetTriggerWorkSpace(), NULL);
while (watcher != NULL) { while (watcher != NULL) {
ParamWatcher *next = GetNextParamWatcher(GetTriggerWorkSpace(), watcher); ParamWatcher *next = GetNextParamWatcher(GetTriggerWorkSpace(), watcher);
...@@ -534,11 +539,11 @@ int LoadPersistParams(void) ...@@ -534,11 +539,11 @@ int LoadPersistParams(void)
static int ProcessParamFile(const char *fileName, void *context) static int ProcessParamFile(const char *fileName, void *context)
{ {
static const char *exclude[] = {"ctl.", "selinux.restorecon_recursive"}; static const char *exclude[] = {"ctl.", "selinux.restorecon_recursive"};
int mode = *(int *)context; uint32_t mode = *(int *)context;
return LoadDefaultParam_(fileName, mode, exclude, sizeof(exclude) / sizeof(exclude[0])); return LoadDefaultParam_(fileName, mode, exclude, sizeof(exclude) / sizeof(exclude[0]));
} }
int LoadDefaultParams(const char *fileName, int mode) int LoadDefaultParams(const char *fileName, uint32_t mode)
{ {
PARAM_CHECK(fileName != NULL, return -1, "Invalid fielname for load"); PARAM_CHECK(fileName != NULL, return -1, "Invalid fielname for load");
if (!PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT)) { if (!PARAM_TEST_FLAG(g_paramWorkSpace.flags, WORKSPACE_FLAGS_INIT)) {
...@@ -614,6 +619,7 @@ void StopParamService(void) ...@@ -614,6 +619,7 @@ void StopParamService(void)
PARAM_LOGI("StopParamService."); PARAM_LOGI("StopParamService.");
CloseParamWorkSpace(&g_paramWorkSpace); CloseParamWorkSpace(&g_paramWorkSpace);
CloseTriggerWorkSpace(); CloseTriggerWorkSpace();
ParamTaskClose(g_paramWorkSpace.serverTask);
g_paramWorkSpace.serverTask = NULL; g_paramWorkSpace.serverTask = NULL;
ParamServiceStop(); ParamServiceStop();
} }
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
*/ */
#include "trigger_checker.h" #include "trigger_checker.h"
#include <ctype.h>
#include <ctype.h>
#include "init_param.h" #include "init_param.h"
#include "trigger_manager.h" #include "trigger_manager.h"
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
int CalculatorInit(LogicCalculator *calculator, int dataNumber, int dataUnit, int needCondition) int CalculatorInit(LogicCalculator *calculator, int dataNumber, int dataUnit, int needCondition)
{ {
PARAM_CHECK(calculator != NULL, return -1, "Invalid param"); PARAM_CHECK(calculator != NULL, return -1, "Invalid param");
PARAM_CHECK(dataUnit <= (int)sizeof(LogicData), return -1, "Invalid param");
PARAM_CHECK(dataNumber <= MAX_CALC_PARAM, return -1, "Invalid param");
int dataSize = dataUnit * dataNumber; int dataSize = dataUnit * dataNumber;
if (needCondition) { if (needCondition) {
dataSize += MAX_DATA_BUFFER_MAX; dataSize += MAX_DATA_BUFFER_MAX;
...@@ -86,7 +88,7 @@ static int CalculatorPush(LogicCalculator *calculator, const void *data) ...@@ -86,7 +88,7 @@ static int CalculatorPush(LogicCalculator *calculator, const void *data)
{ {
PARAM_CHECK(calculator != NULL, return -1, "Invalid param"); PARAM_CHECK(calculator != NULL, return -1, "Invalid param");
PARAM_CHECK(calculator->endIndex < calculator->dataNumber, return -1, "More data for calculator support"); PARAM_CHECK(calculator->endIndex < calculator->dataNumber, return -1, "More data for calculator support");
char *tmpData = (calculator->data + calculator->dataUnit * calculator->endIndex); char *tmpData = (char *)calculator->data + calculator->dataUnit * calculator->endIndex;
int ret = memcpy_s(tmpData, calculator->dataUnit, data, calculator->dataUnit); int ret = memcpy_s(tmpData, calculator->dataUnit, data, calculator->dataUnit);
PARAM_CHECK(ret == EOK, return -1, "Failed to copy logic data"); PARAM_CHECK(ret == EOK, return -1, "Failed to copy logic data");
calculator->endIndex++; calculator->endIndex++;
...@@ -100,7 +102,7 @@ static int CalculatorPop(LogicCalculator *calculator, void *data) ...@@ -100,7 +102,7 @@ static int CalculatorPop(LogicCalculator *calculator, void *data)
if (calculator->endIndex == 0) { if (calculator->endIndex == 0) {
return -1; return -1;
} }
char *tmpData = calculator->data + calculator->dataUnit * (calculator->endIndex - 1); char *tmpData = (char *)calculator->data + calculator->dataUnit * (calculator->endIndex - 1);
int ret = memcpy_s(data, calculator->dataUnit, tmpData, calculator->dataUnit); int ret = memcpy_s(data, calculator->dataUnit, tmpData, calculator->dataUnit);
PARAM_CHECK(ret == EOK, return -1, "Failed to copy logic data"); PARAM_CHECK(ret == EOK, return -1, "Failed to copy logic data");
calculator->endIndex--; calculator->endIndex--;
...@@ -126,7 +128,6 @@ static int PrefixAdd(char *prefix, uint32_t *prefixIndex, uint32_t prefixLen, ch ...@@ -126,7 +128,6 @@ static int PrefixAdd(char *prefix, uint32_t *prefixIndex, uint32_t prefixLen, ch
static int HandleOperationOr(LogicCalculator *calculator, char *prefix, uint32_t *prefixIndex, uint32_t prefixLen) static int HandleOperationOr(LogicCalculator *calculator, char *prefix, uint32_t *prefixIndex, uint32_t prefixLen)
{ {
int ret = 0;
char e; char e;
prefix[(*prefixIndex)++] = ' '; prefix[(*prefixIndex)++] = ' ';
if (CalculatorLength(calculator) == 0) { if (CalculatorLength(calculator) == 0) {
...@@ -137,7 +138,7 @@ static int HandleOperationOr(LogicCalculator *calculator, char *prefix, uint32_t ...@@ -137,7 +138,7 @@ static int HandleOperationOr(LogicCalculator *calculator, char *prefix, uint32_t
if (e == '(') { if (e == '(') {
CalculatorPushChar(calculator, e); CalculatorPushChar(calculator, e);
} else { } else {
ret = PrefixAdd(prefix, prefixIndex, prefixLen, e); int ret = PrefixAdd(prefix, prefixIndex, prefixLen, e);
PARAM_CHECK(ret == 0, return -1, "Invalid prefix"); PARAM_CHECK(ret == 0, return -1, "Invalid prefix");
} }
} while (CalculatorLength(calculator) > 0 && e != '('); } while (CalculatorLength(calculator) > 0 && e != '(');
...@@ -161,7 +162,7 @@ static int CompareValue(const char *condition, const char *value) ...@@ -161,7 +162,7 @@ static int CompareValue(const char *condition, const char *value)
return 0; return 0;
} }
static int ComputeSubCondition(LogicCalculator *calculator, LogicData *data, const char *condition) static int ComputeSubCondition(const LogicCalculator *calculator, LogicData *data, const char *condition)
{ {
if (!LOGIC_DATA_TEST_FLAG(data, LOGIC_DATA_FLAGS_ORIGINAL)) { if (!LOGIC_DATA_TEST_FLAG(data, LOGIC_DATA_FLAGS_ORIGINAL)) {
return LOGIC_DATA_TEST_FLAG(data, LOGIC_DATA_FLAGS_TRUE); return LOGIC_DATA_TEST_FLAG(data, LOGIC_DATA_FLAGS_TRUE);
...@@ -215,6 +216,7 @@ int GetValueFromContent(const char *content, uint32_t contentSize, uint32_t star ...@@ -215,6 +216,7 @@ int GetValueFromContent(const char *content, uint32_t contentSize, uint32_t star
int ComputeCondition(LogicCalculator *calculator, const char *condition) int ComputeCondition(LogicCalculator *calculator, const char *condition)
{ {
PARAM_CHECK(calculator != NULL && condition != NULL, return -1, "Invalid calculator");
uint32_t currIndex = 0; uint32_t currIndex = 0;
uint32_t start = 0; uint32_t start = 0;
int noneOper = 1; int noneOper = 1;
...@@ -266,8 +268,9 @@ int ComputeCondition(LogicCalculator *calculator, const char *condition) ...@@ -266,8 +268,9 @@ int ComputeCondition(LogicCalculator *calculator, const char *condition)
int ConvertInfixToPrefix(const char *condition, char *prefix, uint32_t prefixLen) int ConvertInfixToPrefix(const char *condition, char *prefix, uint32_t prefixLen)
{ {
PARAM_CHECK(condition != NULL, return -1, "Invalid condition");
char e = 0; char e = 0;
int ret = 0; int ret;
uint32_t curr = 0; uint32_t curr = 0;
uint32_t prefixIndex = 0; uint32_t prefixIndex = 0;
LogicCalculator calculator; LogicCalculator calculator;
...@@ -319,8 +322,10 @@ int ConvertInfixToPrefix(const char *condition, char *prefix, uint32_t prefixLen ...@@ -319,8 +322,10 @@ int ConvertInfixToPrefix(const char *condition, char *prefix, uint32_t prefixLen
int CheckMatchSubCondition(const char *condition, const char *input, int length) int CheckMatchSubCondition(const char *condition, const char *input, int length)
{ {
PARAM_CHECK(condition != NULL, return 0, "Invalid condition");
PARAM_CHECK(input != NULL, return 0, "Invalid input");
char *tmp = strstr(condition, input); char *tmp = strstr(condition, input);
if ((tmp != NULL) && (strlen(tmp) > length) && (tmp[length] == '=')) { if ((tmp != NULL) && ((int)strlen(tmp) > length) && (tmp[length] == '=')) {
return 1; return 1;
} }
return 0; return 0;
......
...@@ -15,11 +15,8 @@ ...@@ -15,11 +15,8 @@
#include "trigger_manager.h" #include "trigger_manager.h"
#include <ctype.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -35,10 +32,10 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content) ...@@ -35,10 +32,10 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content)
{ {
PARAM_CHECK(trigger != NULL, return -1, "trigger is null"); PARAM_CHECK(trigger != NULL, return -1, "trigger is null");
uint32_t size = sizeof(CommandNode); uint32_t size = sizeof(CommandNode);
size += (content == NULL || strlen(content) == 0) ? 1 : strlen(content) + 1; size += (content == NULL) ? 1 : strlen(content) + 1;
size = PARAM_ALIGN(size); size = PARAM_ALIGN(size);
CommandNode *node = (CommandNode *)malloc(size); CommandNode *node = (CommandNode *)calloc(1, size);
PARAM_CHECK(node != NULL, return -1, "Failed to alloc memory for command"); PARAM_CHECK(node != NULL, return -1, "Failed to alloc memory for command");
node->cmdKeyIndex = cmdKeyIndex; node->cmdKeyIndex = cmdKeyIndex;
node->next = NULL; node->next = NULL;
...@@ -46,13 +43,15 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content) ...@@ -46,13 +43,15 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content)
if (content != NULL && strlen(content) != 0) { if (content != NULL && strlen(content) != 0) {
int ret = memcpy_s(node->content, size, content, strlen(content)); int ret = memcpy_s(node->content, size, content, strlen(content));
node->content[strlen(content)] = '\0'; node->content[strlen(content)] = '\0';
PARAM_CHECK(ret == EOK, return 0, "Failed to copy command"); PARAM_CHECK(ret == EOK, free(node);
return 0, "Failed to copy command");
} }
// 插入队列 // 插入队列
if (trigger->firstCmd == NULL) { if (trigger->firstCmd == NULL) {
trigger->firstCmd = node; trigger->firstCmd = node;
trigger->lastCmd = node; trigger->lastCmd = node;
} else { } else {
PARAM_CHECK(trigger->lastCmd != NULL, return 0, "Invalid last cmd");
trigger->lastCmd->next = node; trigger->lastCmd->next = node;
trigger->lastCmd = node; trigger->lastCmd = node;
} }
...@@ -60,8 +59,9 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content) ...@@ -60,8 +59,9 @@ int AddCommand(TriggerNode *trigger, uint32_t cmdKeyIndex, const char *content)
return 0; return 0;
} }
CommandNode *GetNextCmdNode(TriggerNode *trigger, CommandNode *curr) CommandNode *GetNextCmdNode(const TriggerNode *trigger, const CommandNode *curr)
{ {
PARAM_CHECK(trigger != NULL, return NULL, "trigger is null");
if (curr == NULL) { if (curr == NULL) {
return trigger->firstCmd; return trigger->firstCmd;
} }
...@@ -79,7 +79,7 @@ TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char ...@@ -79,7 +79,7 @@ TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char
conditionLen = PARAM_ALIGN(strlen(condition) + 1) + CONDITION_EXTEND_LEN; conditionLen = PARAM_ALIGN(strlen(condition) + 1) + CONDITION_EXTEND_LEN;
} }
TriggerNode *node = (TriggerNode *)malloc(triggerNodeLen + conditionLen + extDataSize); TriggerNode *node = (TriggerNode *)calloc(1, triggerNodeLen + conditionLen + extDataSize);
PARAM_CHECK(node != NULL, return NULL, "Failed to alloc memory for trigger"); PARAM_CHECK(node != NULL, return NULL, "Failed to alloc memory for trigger");
int ret = memcpy_s(node->name, triggerNodeLen - sizeof(TriggerNode), name, nameLen); int ret = memcpy_s(node->name, triggerNodeLen - sizeof(TriggerNode), name, nameLen);
PARAM_CHECK(ret == EOK, free(node); PARAM_CHECK(ret == EOK, free(node);
...@@ -107,6 +107,7 @@ TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char ...@@ -107,6 +107,7 @@ TriggerNode *AddTrigger(TriggerHeader *triggerHead, const char *name, const char
void ClearTrigger(TriggerHeader *head) void ClearTrigger(TriggerHeader *head)
{ {
PARAM_CHECK(head != NULL, return, "head is null");
ListNode *node = head->triggerList.next; ListNode *node = head->triggerList.next;
while (node != &head->triggerList) { while (node != &head->triggerList) {
ListRemove(node); ListRemove(node);
...@@ -120,7 +121,7 @@ void ClearTrigger(TriggerHeader *head) ...@@ -120,7 +121,7 @@ void ClearTrigger(TriggerHeader *head)
void FreeTrigger(TriggerNode *trigger) void FreeTrigger(TriggerNode *trigger)
{ {
PARAM_CHECK(trigger != NULL, return, "trigger is null"); PARAM_CHECK(trigger != NULL && trigger->triggerHead != NULL, return, "trigger is null");
PARAM_LOGD("FreeTrigger %s", trigger->name); PARAM_LOGD("FreeTrigger %s", trigger->name);
TriggerHeader *triggerHead = trigger->triggerHead; TriggerHeader *triggerHead = trigger->triggerHead;
CommandNode *cmd = trigger->firstCmd; CommandNode *cmd = trigger->firstCmd;
...@@ -150,8 +151,9 @@ void FreeTrigger(TriggerNode *trigger) ...@@ -150,8 +151,9 @@ void FreeTrigger(TriggerNode *trigger)
free(trigger); free(trigger);
} }
static TriggerNode *GetNextTrigger(TriggerHeader *triggerHead, TriggerNode *curr) static TriggerNode *GetNextTrigger(const TriggerHeader *triggerHead, const TriggerNode *curr)
{ {
PARAM_CHECK(triggerHead != NULL, return NULL, "Invalid triggerHead");
ListNode *node = NULL; ListNode *node = NULL;
if (curr != NULL) { if (curr != NULL) {
node = curr->node.next; node = curr->node.next;
...@@ -164,12 +166,13 @@ static TriggerNode *GetNextTrigger(TriggerHeader *triggerHead, TriggerNode *curr ...@@ -164,12 +166,13 @@ static TriggerNode *GetNextTrigger(TriggerHeader *triggerHead, TriggerNode *curr
return NULL; return NULL;
} }
static const char *GetTriggerCondition(TriggerWorkSpace *workSpace, TriggerNode *trigger) static const char *GetTriggerCondition(const TriggerWorkSpace *workSpace, const TriggerNode *trigger)
{ {
return trigger->condition == NULL ? "" : trigger->condition; UNUSED(workSpace);
return (trigger == NULL || trigger->condition == NULL) ? "" : trigger->condition;
} }
TriggerNode *GetTriggerByName(TriggerWorkSpace *workSpace, const char *triggerName) TriggerNode *GetTriggerByName(const TriggerWorkSpace *workSpace, const char *triggerName)
{ {
PARAM_CHECK(workSpace != NULL && triggerName != NULL, return NULL, "Invalid param"); PARAM_CHECK(workSpace != NULL && triggerName != NULL, return NULL, "Invalid param");
for (size_t i = 0; i < sizeof(workSpace->triggerHead) / sizeof(workSpace->triggerHead[0]); i++) { for (size_t i = 0; i < sizeof(workSpace->triggerHead) / sizeof(workSpace->triggerHead[0]); i++) {
...@@ -184,16 +187,17 @@ TriggerNode *GetTriggerByName(TriggerWorkSpace *workSpace, const char *triggerNa ...@@ -184,16 +187,17 @@ TriggerNode *GetTriggerByName(TriggerWorkSpace *workSpace, const char *triggerNa
return NULL; return NULL;
} }
int ExecuteQueuePush(TriggerWorkSpace *workSpace, TriggerNode *trigger) int ExecuteQueuePush(TriggerWorkSpace *workSpace, const TriggerNode *trigger)
{ {
PARAM_CHECK(workSpace != NULL, return -1, "Invalid area"); PARAM_CHECK(workSpace != NULL, return -1, "Invalid workSpace");
uint32_t index = workSpace->executeQueue.endIndex++ % workSpace->executeQueue.queueCount; uint32_t index = workSpace->executeQueue.endIndex++ % workSpace->executeQueue.queueCount;
workSpace->executeQueue.executeQueue[index] = trigger; workSpace->executeQueue.executeQueue[index] = (TriggerNode *)trigger;
return 0; return 0;
} }
TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace) TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace)
{ {
PARAM_CHECK(workSpace != NULL, return NULL, "Invalid workSpace");
TriggerNode *trigger = NULL; TriggerNode *trigger = NULL;
do { do {
if (workSpace->executeQueue.endIndex <= workSpace->executeQueue.startIndex) { if (workSpace->executeQueue.endIndex <= workSpace->executeQueue.startIndex) {
...@@ -207,16 +211,15 @@ TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace) ...@@ -207,16 +211,15 @@ TriggerNode *ExecuteQueuePop(TriggerWorkSpace *workSpace)
return trigger; return trigger;
} }
int ExecuteQueueSize(TriggerWorkSpace *workSpace)
{
PARAM_CHECK(workSpace != NULL, return 0, "Invalid param");
return workSpace->executeQueue.endIndex - workSpace->executeQueue.startIndex;
}
static int CheckBootTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *calculator, static int CheckBootTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *calculator,
TriggerNode *trigger, const char *content, uint32_t contentSize) TriggerNode *trigger, const char *content, uint32_t contentSize)
{ {
if (strncmp(trigger->name, (char *)content, contentSize) == 0) { UNUSED(workSpace);
UNUSED(calculator);
UNUSED(content);
UNUSED(contentSize);
PARAM_CHECK(trigger != NULL, return -1, "Invalid trigger");
if (strncmp(trigger->name, content, contentSize) == 0) {
return 1; return 1;
} }
return 0; return 0;
...@@ -225,7 +228,12 @@ static int CheckBootTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *c ...@@ -225,7 +228,12 @@ static int CheckBootTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *c
static int CheckWatcherTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *calculator, static int CheckWatcherTriggerMatch(TriggerWorkSpace *workSpace, LogicCalculator *calculator,
TriggerNode *trigger, const char *content, uint32_t contentSize) TriggerNode *trigger, const char *content, uint32_t contentSize)
{ {
if (strncmp(trigger->name, (char *)content, strlen(trigger->name)) == 0) { UNUSED(workSpace);
UNUSED(calculator);
UNUSED(content);
UNUSED(contentSize);
PARAM_CHECK(trigger != NULL, return -1, "Invalid trigger");
if (strncmp(trigger->name, content, strlen(trigger->name)) == 0) {
return 1; return 1;
} }
return 0; return 0;
...@@ -314,7 +322,7 @@ int CheckTrigger(TriggerWorkSpace *workSpace, int type, ...@@ -314,7 +322,7 @@ int CheckTrigger(TriggerWorkSpace *workSpace, int type,
PARAM_CHECK(workSpace != NULL && content != NULL && triggerExecuter != NULL, PARAM_CHECK(workSpace != NULL && content != NULL && triggerExecuter != NULL,
return -1, "Failed arg for trigger"); return -1, "Failed arg for trigger");
PARAM_LOGD("CheckTrigger type: %d content: %s ", type, content); PARAM_LOGD("CheckTrigger type: %d content: %s ", type, content);
int ret = 0; int ret;
LogicCalculator calculator; LogicCalculator calculator;
CalculatorInit(&calculator, MAX_CONDITION_NUMBER, sizeof(LogicData), 1); CalculatorInit(&calculator, MAX_CONDITION_NUMBER, sizeof(LogicData), 1);
calculator.triggerExecuter = triggerExecuter; calculator.triggerExecuter = triggerExecuter;
...@@ -345,11 +353,15 @@ int CheckTrigger(TriggerWorkSpace *workSpace, int type, ...@@ -345,11 +353,15 @@ int CheckTrigger(TriggerWorkSpace *workSpace, int type,
return 0; return 0;
} }
int MarkTriggerToParam(TriggerWorkSpace *workSpace, TriggerHeader *triggerHead, const char *name) int MarkTriggerToParam(const TriggerWorkSpace *workSpace, const TriggerHeader *triggerHead, const char *name)
{ {
int ret = 0; int ret = 0;
TriggerNode *trigger = GetNextTrigger(triggerHead, NULL); TriggerNode *trigger = GetNextTrigger(triggerHead, NULL);
while (trigger != NULL) { while (trigger != NULL) {
if (GetTriggerCondition(workSpace, trigger) == NULL) {
trigger = GetNextTrigger(triggerHead, trigger);
continue;
}
const char *tmp = strstr(GetTriggerCondition(workSpace, trigger), name); const char *tmp = strstr(GetTriggerCondition(workSpace, trigger), name);
if (tmp != NULL && strncmp(tmp + strlen(name), "=", 1) == 0) { if (tmp != NULL && strncmp(tmp + strlen(name), "=", 1) == 0) {
TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_RELATED); TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_RELATED);
...@@ -361,8 +373,9 @@ int MarkTriggerToParam(TriggerWorkSpace *workSpace, TriggerHeader *triggerHead, ...@@ -361,8 +373,9 @@ int MarkTriggerToParam(TriggerWorkSpace *workSpace, TriggerHeader *triggerHead,
} }
ParamWatcher *GetNextParamWatcher(TriggerWorkSpace *workSpace, ParamWatcher *curr) ParamWatcher *GetNextParamWatcher(const TriggerWorkSpace *workSpace, const ParamWatcher *curr)
{ {
PARAM_CHECK(workSpace != NULL, return NULL, "Invalid workSpace");
ListNode *node = NULL; ListNode *node = NULL;
if (curr != NULL) { if (curr != NULL) {
node = curr->node.next; node = curr->node.next;
...@@ -400,7 +413,7 @@ TriggerNode *AddWatcherTrigger(ParamWatcher *watcher, ...@@ -400,7 +413,7 @@ TriggerNode *AddWatcherTrigger(ParamWatcher *watcher,
return trigger; return trigger;
} }
void DelWatcherTrigger(ParamWatcher *watcher, uint32_t watcherId) void DelWatcherTrigger(const ParamWatcher *watcher, uint32_t watcherId)
{ {
PARAM_CHECK(watcher != NULL, return, "Failed to add watcher "); PARAM_CHECK(watcher != NULL, return, "Failed to add watcher ");
TriggerNode *trigger = GetNextTrigger(&watcher->triggerHead, NULL); TriggerNode *trigger = GetNextTrigger(&watcher->triggerHead, NULL);
...@@ -416,7 +429,7 @@ void DelWatcherTrigger(ParamWatcher *watcher, uint32_t watcherId) ...@@ -416,7 +429,7 @@ void DelWatcherTrigger(ParamWatcher *watcher, uint32_t watcherId)
} }
} }
void ClearWatcherTrigger(ParamWatcher *watcher) void ClearWatcherTrigger(const ParamWatcher *watcher)
{ {
PARAM_CHECK(watcher != NULL, return, "Invalid watcher "); PARAM_CHECK(watcher != NULL, return, "Invalid watcher ");
TriggerNode *trigger = GetNextTrigger(&watcher->triggerHead, NULL); TriggerNode *trigger = GetNextTrigger(&watcher->triggerHead, NULL);
...@@ -428,42 +441,45 @@ void ClearWatcherTrigger(ParamWatcher *watcher) ...@@ -428,42 +441,45 @@ void ClearWatcherTrigger(ParamWatcher *watcher)
} }
} }
#define DUMP_DEBUG PARAM_LOGD static void DumpTriggerQueue(const TriggerWorkSpace *workSpace, int index)
static void DumpTriggerQueue(TriggerWorkSpace *workSpace, int index)
{ {
PARAM_CHECK(workSpace != NULL, return, "Invalid workSpace ");
TriggerNode *trigger = GetNextTrigger(&workSpace->triggerHead[index], NULL); TriggerNode *trigger = GetNextTrigger(&workSpace->triggerHead[index], NULL);
while (trigger != NULL) { while (trigger != NULL) {
DUMP_DEBUG("trigger 0x%08x", trigger->flags); printf("trigger 0x%08x \n", trigger->flags);
DUMP_DEBUG("trigger name %s ", trigger->name); printf("trigger name %s \n", trigger->name);
DUMP_DEBUG("trigger condition %s ", trigger->condition); if (trigger->condition != NULL) {
printf("trigger condition %s \n", trigger->condition);
}
CommandNode *cmd = GetNextCmdNode(trigger, NULL); CommandNode *cmd = GetNextCmdNode(trigger, NULL);
while (cmd != NULL) { while (cmd != NULL) {
DUMP_DEBUG("\t command name %s", GetCmdKey(cmd->cmdKeyIndex)); printf("\t command name %s \n", GetCmdKey(cmd->cmdKeyIndex));
DUMP_DEBUG("\t command args %s", cmd->content); printf("\t command args %s \n", cmd->content);
cmd = GetNextCmdNode(trigger, cmd); cmd = GetNextCmdNode(trigger, cmd);
} }
trigger = GetNextTrigger(&workSpace->triggerHead[index], trigger); trigger = GetNextTrigger(&workSpace->triggerHead[index], trigger);
} }
} }
void DumpTrigger(TriggerWorkSpace *workSpace) void DumpTrigger(const TriggerWorkSpace *workSpace)
{ {
DUMP_DEBUG("Ready to dump all trigger memory"); PARAM_CHECK(workSpace != NULL, return, "Invalid workSpace ");
DUMP_DEBUG("workspace queue BOOT info:"); printf("Ready to dump all trigger memory \n");
printf("workspace queue BOOT info:\n");
DumpTriggerQueue(workSpace, TRIGGER_BOOT); DumpTriggerQueue(workSpace, TRIGGER_BOOT);
DUMP_DEBUG("workspace queue parameter info:"); printf("workspace queue parameter info:\n");
DumpTriggerQueue(workSpace, TRIGGER_PARAM); DumpTriggerQueue(workSpace, TRIGGER_PARAM);
DUMP_DEBUG("workspace queue other info:"); printf("workspace queue other info:\n");
DumpTriggerQueue(workSpace, TRIGGER_UNKNOW); DumpTriggerQueue(workSpace, TRIGGER_UNKNOW);
DUMP_DEBUG("workspace queue execute info:"); printf("workspace queue execute info:\n");
DUMP_DEBUG("queue info count: %u start: %u end: %u", printf("queue info count: %u start: %u end: %u\n",
workSpace->executeQueue.queueCount, workSpace->executeQueue.startIndex, workSpace->executeQueue.endIndex); workSpace->executeQueue.queueCount, workSpace->executeQueue.startIndex, workSpace->executeQueue.endIndex);
for (uint32_t index = workSpace->executeQueue.startIndex; index < workSpace->executeQueue.endIndex; index++) { for (uint32_t index = workSpace->executeQueue.startIndex; index < workSpace->executeQueue.endIndex; index++) {
TriggerNode *trigger = workSpace->executeQueue.executeQueue[index % workSpace->executeQueue.queueCount]; TriggerNode *trigger = workSpace->executeQueue.executeQueue[index % workSpace->executeQueue.queueCount];
if (trigger != 0) { if (trigger != 0) {
DUMP_DEBUG("queue node trigger name: %s ", trigger->name); printf("queue node trigger name: %s \n", trigger->name);
} }
} }
} }
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
#include <pthread.h>
#include <unistd.h> #include <unistd.h>
#include "init_cmds.h" #include "init_cmds.h"
...@@ -37,7 +37,7 @@ void DoTriggerExec(const char *triggerName) ...@@ -37,7 +37,7 @@ void DoTriggerExec(const char *triggerName)
} }
} }
static void DoCmdExec(TriggerNode *trigger, CommandNode *cmd, const char *content, uint32_t size) static void DoCmdExec(const TriggerNode *trigger, const CommandNode *cmd, const char *content, uint32_t size)
{ {
if (cmd->cmdKeyIndex == CMD_INDEX_FOR_PARA_WAIT || cmd->cmdKeyIndex == CMD_INDEX_FOR_PARA_WATCH) { if (cmd->cmdKeyIndex == CMD_INDEX_FOR_PARA_WAIT || cmd->cmdKeyIndex == CMD_INDEX_FOR_PARA_WATCH) {
TriggerExtData *extData = TRIGGER_GET_EXT_DATA(trigger, TriggerExtData); TriggerExtData *extData = TRIGGER_GET_EXT_DATA(trigger, TriggerExtData);
...@@ -59,7 +59,7 @@ static void DoCmdExec(TriggerNode *trigger, CommandNode *cmd, const char *conten ...@@ -59,7 +59,7 @@ static void DoCmdExec(TriggerNode *trigger, CommandNode *cmd, const char *conten
#endif #endif
} }
static int ExecuteTrigger(TriggerWorkSpace *workSpace, TriggerNode *trigger) static int ExecuteTrigger(const TriggerWorkSpace *workSpace, const TriggerNode *trigger)
{ {
PARAM_CHECK(workSpace != NULL && trigger != NULL, return -1, "Invalid trigger"); PARAM_CHECK(workSpace != NULL && trigger != NULL, return -1, "Invalid trigger");
PARAM_CHECK(workSpace->cmdExec != NULL, return -1, "Invalid cmdExec"); PARAM_CHECK(workSpace->cmdExec != NULL, return -1, "Invalid cmdExec");
...@@ -152,7 +152,7 @@ static void ProcessBeforeEvent(uint64_t eventId, const char *content, uint32_t s ...@@ -152,7 +152,7 @@ static void ProcessBeforeEvent(uint64_t eventId, const char *content, uint32_t s
break; break;
} }
default: default:
PARAM_LOGI("CheckTriggers: %lu", eventId); PARAM_LOGI("CheckTriggers: %llu", eventId);
break; break;
} }
} }
...@@ -205,6 +205,8 @@ void PostParamTrigger(int type, const char *name, const char *value) ...@@ -205,6 +205,8 @@ void PostParamTrigger(int type, const char *name, const char *value)
{ {
PARAM_CHECK(name != NULL && value != NULL, return, "Invalid param"); PARAM_CHECK(name != NULL && value != NULL, return, "Invalid param");
uint32_t bufferSize = strlen(name) + strlen(value) + 1 + 1 + 1; uint32_t bufferSize = strlen(name) + strlen(value) + 1 + 1 + 1;
PARAM_CHECK(bufferSize < (PARAM_CONST_VALUE_LEN_MAX + PARAM_NAME_LEN_MAX + 1 + 1 + 1),
return, "bufferSize is longest %d", bufferSize);
char *buffer = (char *)malloc(bufferSize); char *buffer = (char *)malloc(bufferSize);
PARAM_CHECK(buffer != NULL, return, "Failed to alloc memory for param %s", name); PARAM_CHECK(buffer != NULL, return, "Failed to alloc memory for param %s", name);
int ret = sprintf_s(buffer, bufferSize - 1, "%s=%s", name, value); int ret = sprintf_s(buffer, bufferSize - 1, "%s=%s", name, value);
...@@ -237,7 +239,7 @@ static int GetTriggerType(const char *type) ...@@ -237,7 +239,7 @@ static int GetTriggerType(const char *type)
return TRIGGER_UNKNOW; return TRIGGER_UNKNOW;
} }
static int ParseTrigger_(TriggerWorkSpace *workSpace, cJSON *triggerItem) static int ParseTrigger_(const TriggerWorkSpace *workSpace, const cJSON *triggerItem)
{ {
PARAM_CHECK(triggerItem != NULL, return -1, "Invalid file"); PARAM_CHECK(triggerItem != NULL, return -1, "Invalid file");
PARAM_CHECK(workSpace != NULL, return -1, "Failed to create trigger list"); PARAM_CHECK(workSpace != NULL, return -1, "Failed to create trigger list");
...@@ -246,17 +248,17 @@ static int ParseTrigger_(TriggerWorkSpace *workSpace, cJSON *triggerItem) ...@@ -246,17 +248,17 @@ static int ParseTrigger_(TriggerWorkSpace *workSpace, cJSON *triggerItem)
char *condition = cJSON_GetStringValue(cJSON_GetObjectItem(triggerItem, "condition")); char *condition = cJSON_GetStringValue(cJSON_GetObjectItem(triggerItem, "condition"));
int type = GetTriggerType(name); int type = GetTriggerType(name);
PARAM_CHECK(type < TRIGGER_MAX, return -1, "Failed to get trigger index"); PARAM_CHECK(type < TRIGGER_MAX, return -1, "Failed to get trigger index");
TriggerHeader *header = (TriggerHeader *)&workSpace->triggerHead[type];
TriggerNode *trigger = GetTriggerByName(workSpace, name); TriggerNode *trigger = GetTriggerByName(workSpace, name);
if (trigger == NULL) { if (trigger == NULL) {
trigger = AddTrigger(&workSpace->triggerHead[type], name, condition, 0); trigger = AddTrigger(header, name, condition, 0);
PARAM_CHECK(trigger != NULL, return -1, "Failed to create trigger %s", name); PARAM_CHECK(trigger != NULL, return -1, "Failed to create trigger %s", name);
} }
if (type == TRIGGER_BOOT) { // 设置trigger立刻删除,如果是boot if (type == TRIGGER_BOOT) { // 设置trigger立刻删除,如果是boot
TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_ONCE); TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_ONCE);
TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_SUBTRIGGER); TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_SUBTRIGGER);
} }
PARAM_LOGD("ParseTrigger %s type %d count %d", name, type, workSpace->triggerHead[type].triggerCount); PARAM_LOGD("ParseTrigger %s type %d count %d", name, type, header->triggerCount);
// 添加命令行 // 添加命令行
cJSON *cmdItems = cJSON_GetObjectItem(triggerItem, CMDS_ARR_NAME_IN_JSON); cJSON *cmdItems = cJSON_GetObjectItem(triggerItem, CMDS_ARR_NAME_IN_JSON);
...@@ -264,11 +266,11 @@ static int ParseTrigger_(TriggerWorkSpace *workSpace, cJSON *triggerItem) ...@@ -264,11 +266,11 @@ static int ParseTrigger_(TriggerWorkSpace *workSpace, cJSON *triggerItem)
int cmdLinesCnt = cJSON_GetArraySize(cmdItems); int cmdLinesCnt = cJSON_GetArraySize(cmdItems);
PARAM_CHECK(cmdLinesCnt > 0, return -1, "Command array size must positive %s", name); PARAM_CHECK(cmdLinesCnt > 0, return -1, "Command array size must positive %s", name);
int ret = 0; int ret;
uint32_t cmdKeyIndex = 0; uint32_t cmdKeyIndex = 0;
for (int i = 0; i < cmdLinesCnt; ++i) { for (int i = 0; (i < cmdLinesCnt) && (i < TRIGGER_MAX_CMD); ++i) {
char *cmdLineStr = cJSON_GetStringValue(cJSON_GetArrayItem(cmdItems, i)); char *cmdLineStr = cJSON_GetStringValue(cJSON_GetArrayItem(cmdItems, i));
PARAM_CHECK(cmdLinesCnt > 0, continue, "Command is null"); PARAM_CHECK(cmdLineStr != NULL, continue, "Command is null");
size_t cmdLineLen = strlen(cmdLineStr); size_t cmdLineLen = strlen(cmdLineStr);
const char *matchCmd = GetMatchCmd(cmdLineStr, &cmdKeyIndex); const char *matchCmd = GetMatchCmd(cmdLineStr, &cmdKeyIndex);
...@@ -293,7 +295,7 @@ int ParseTriggerConfig(const cJSON *fileRoot) ...@@ -293,7 +295,7 @@ int ParseTriggerConfig(const cJSON *fileRoot)
int size = cJSON_GetArraySize(triggers); int size = cJSON_GetArraySize(triggers);
PARAM_CHECK(size > 0, return -1, "Trigger array size must positive"); PARAM_CHECK(size > 0, return -1, "Trigger array size must positive");
for (int i = 0; i < size; ++i) { for (int i = 0; i < size && i < TRIGGER_MAX_CMD; ++i) {
cJSON *item = cJSON_GetArrayItem(triggers, i); cJSON *item = cJSON_GetArrayItem(triggers, i);
ParseTrigger_(&g_triggerWorkSpace, item); ParseTrigger_(&g_triggerWorkSpace, item);
} }
...@@ -337,7 +339,9 @@ void CloseTriggerWorkSpace(void) ...@@ -337,7 +339,9 @@ void CloseTriggerWorkSpace(void)
ClearTrigger(&g_triggerWorkSpace.triggerHead[i]); ClearTrigger(&g_triggerWorkSpace.triggerHead[i]);
} }
free(g_triggerWorkSpace.executeQueue.executeQueue); free(g_triggerWorkSpace.executeQueue.executeQueue);
g_triggerWorkSpace.executeQueue.executeQueue = NULL;
ParamTaskClose(g_triggerWorkSpace.eventHandle); ParamTaskClose(g_triggerWorkSpace.eventHandle);
g_triggerWorkSpace.eventHandle = NULL;
} }
int CheckAndMarkTrigger(int type, const char *name) int CheckAndMarkTrigger(int type, const char *name)
......
...@@ -55,9 +55,9 @@ private: ...@@ -55,9 +55,9 @@ private:
} }
private: private:
uint32_t watcherId_{ 0 }; uint32_t watcherId_ { 0 };
std::string keyPrefix_{}; std::string keyPrefix_ {};
ParameterChangePtr callback_{ nullptr }; ParameterChangePtr callback_ { nullptr };
void *context_ { nullptr }; void *context_ { nullptr };
}; };
...@@ -77,8 +77,8 @@ private: ...@@ -77,8 +77,8 @@ private:
void ResetService(const wptr<IRemoteObject> &remote); void ResetService(const wptr<IRemoteObject> &remote);
sptr<IWatcherManager> GetService(); sptr<IWatcherManager> GetService();
std::mutex lock_; std::mutex lock_;
sptr<IWatcherManager> watcherManager_{}; sptr<IWatcherManager> watcherManager_ {};
sptr<IRemoteObject::DeathRecipient> deathRecipient_{}; sptr<IRemoteObject::DeathRecipient> deathRecipient_ {};
std::mutex mutex_; std::mutex mutex_;
std::map<std::string, ParamWatcherKitPtr> watchers_; std::map<std::string, ParamWatcherKitPtr> watchers_;
......
...@@ -29,7 +29,6 @@ namespace init_param { ...@@ -29,7 +29,6 @@ namespace init_param {
REGISTER_SYSTEM_ABILITY_BY_ID(WatcherManager, PARAM_WATCHER_DISTRIBUTED_SERVICE_ID, true) REGISTER_SYSTEM_ABILITY_BY_ID(WatcherManager, PARAM_WATCHER_DISTRIBUTED_SERVICE_ID, true)
const static int32_t INVALID_SOCKET = -1; const static int32_t INVALID_SOCKET = -1;
const static int32_t SLEEP_TIME = 2000;
uint32_t WatcherManager::AddWatcher(const std::string &keyPrefix, const sptr<IWatcher> &watcher) uint32_t WatcherManager::AddWatcher(const std::string &keyPrefix, const sptr<IWatcher> &watcher)
{ {
WATCHER_CHECK(watcher != nullptr, return 0, "Invalid remove watcher for %s", keyPrefix.c_str()); WATCHER_CHECK(watcher != nullptr, return 0, "Invalid remove watcher for %s", keyPrefix.c_str());
...@@ -94,9 +93,10 @@ int WatcherManager::SendMessage(WatcherGroupPtr group, int type) ...@@ -94,9 +93,10 @@ int WatcherManager::SendMessage(WatcherGroupPtr group, int type)
return 0; return 0;
} }
void WatcherManager::ProcessWatcherMessage(const char *buffer, uint32_t dataSize) void WatcherManager::ProcessWatcherMessage(const std::vector<char> &buffer, uint32_t dataSize)
{ {
ParamMessage *msg = (ParamMessage *)buffer; ParamMessage *msg = (ParamMessage *)buffer.data();
PARAM_CHECK(msg != NULL, return, "Invalid msg");
uint32_t offset = 0; uint32_t offset = 0;
if (msg->type != MSG_NOTIFY_PARAM) { if (msg->type != MSG_NOTIFY_PARAM) {
return; return;
...@@ -194,8 +194,7 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, ParamWatcherP ...@@ -194,8 +194,7 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, ParamWatcherP
std::vector<char> buffer(PARAM_NAME_LEN_MAX + PARAM_CONST_VALUE_LEN_MAX); std::vector<char> buffer(PARAM_NAME_LEN_MAX + PARAM_CONST_VALUE_LEN_MAX);
struct Context context = {buffer.data(), watcher, keyPrefix}; struct Context context = {buffer.data(), watcher, keyPrefix};
// walk watcher // walk watcher
SystemTraversalParameter( SystemTraversalParameter([](ParamHandle handle, void *cookie) {
[](ParamHandle handle, void *cookie) {
struct Context *context = (struct Context *)(cookie); struct Context *context = (struct Context *)(cookie);
SystemGetParameterName(handle, context->buffer, PARAM_NAME_LEN_MAX); SystemGetParameterName(handle, context->buffer, PARAM_NAME_LEN_MAX);
if (!FilterParam(context->buffer, context->keyPrefix)) { if (!FilterParam(context->buffer, context->keyPrefix)) {
...@@ -211,11 +210,10 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, ParamWatcherP ...@@ -211,11 +210,10 @@ void WatcherManager::SendLocalChange(const std::string &keyPrefix, ParamWatcherP
void WatcherManager::RunLoop() void WatcherManager::RunLoop()
{ {
const int32_t RECV_BUFFER_MAX = 5 * 1024; const int32_t RECV_BUFFER_MAX = 5 * 1024;
char *buffer = (char *)malloc(RECV_BUFFER_MAX); std::vector<char> buffer(RECV_BUFFER_MAX, 0);
PARAM_CHECK(buffer != NULL, return, "Failed to create buffer for recv");
while (!stop) { while (!stop) {
int fd = GetServerFd(false); int fd = GetServerFd(false);
ssize_t recvLen = recv(fd, buffer, RECV_BUFFER_MAX, 0); ssize_t recvLen = recv(fd, buffer.data(), RECV_BUFFER_MAX, 0);
if (recvLen <= 0) { if (recvLen <= 0) {
if (errno == EAGAIN) { // 超时,继续等待 if (errno == EAGAIN) { // 超时,继续等待
continue; continue;
...@@ -241,6 +239,7 @@ void WatcherManager::StartLoop() ...@@ -241,6 +239,7 @@ void WatcherManager::StartLoop()
int WatcherManager::GetServerFd(bool retry) int WatcherManager::GetServerFd(bool retry)
{ {
const int32_t SLEEP_TIME = 2000;
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
if (retry && serverFd_ != INVALID_SOCKET) { if (retry && serverFd_ != INVALID_SOCKET) {
close(serverFd_); close(serverFd_);
...@@ -249,7 +248,7 @@ int WatcherManager::GetServerFd(bool retry) ...@@ -249,7 +248,7 @@ int WatcherManager::GetServerFd(bool retry)
if (serverFd_ != INVALID_SOCKET) { if (serverFd_ != INVALID_SOCKET) {
return serverFd_; return serverFd_;
} }
struct timeval time; struct timeval time {};
time.tv_sec = 1; time.tv_sec = 1;
time.tv_usec = 0; time.tv_usec = 0;
do { do {
......
...@@ -101,7 +101,7 @@ private: ...@@ -101,7 +101,7 @@ private:
void RunLoop(); void RunLoop();
void StartLoop(); void StartLoop();
void SendLocalChange(const std::string &keyPrefix, ParamWatcherPtr watcher); void SendLocalChange(const std::string &keyPrefix, ParamWatcherPtr watcher);
void ProcessWatcherMessage(const char *buffer, uint32_t dataSize); void ProcessWatcherMessage(const std::vector<char> &buffer, uint32_t dataSize);
int SendMessage(WatcherGroupPtr group, int type); int SendMessage(WatcherGroupPtr group, int type);
int GetServerFd(bool retry); int GetServerFd(bool retry);
private: private:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册