chore: improve parameter validation for API

This commit is contained in:
hxy7yx
2024-02-19 17:42:49 +08:00
parent 7bfe936ae9
commit cb4d477400
9 changed files with 318 additions and 126 deletions
+2 -2
View File
@@ -133,8 +133,8 @@ Update tag, it should return success.
Delete tag from non-existent group, it should return success
${res}= Del Tags modbus-node group1 "tag1"
Check Response Status ${res} 200
Check Error Code ${res} ${NEU_ERR_SUCCESS}
Check Response Status ${res} 404
Check Error Code ${res} ${NEU_ERR_GROUP_NOT_EXIST}
Update non-existent tag, it should return failure.
${res}= Update Tags modbus-node group ${tag4}
+29
View File
@@ -62,6 +62,35 @@
#define NEU_LOG_LEVEL_ERROR "error"
#define NEU_LOG_LEVEL_FATAL "fatal"
#define CHECK_NODE_NAME_LENGTH_ERR \
do { \
NEU_JSON_RESPONSE_ERROR(NEU_ERR_NODE_NAME_TOO_LONG, { \
neu_http_response(aio, NEU_ERR_NODE_NAME_TOO_LONG, result_error); \
}); \
} while (0)
#define CHECK_GROUP_NAME_LENGTH_ERR \
do { \
NEU_JSON_RESPONSE_ERROR(NEU_ERR_GROUP_NAME_TOO_LONG, { \
neu_http_response(aio, NEU_ERR_GROUP_NAME_TOO_LONG, result_error); \
}); \
} while (0)
#define CHECK_TAG_NAME_LENGTH_ERR \
do { \
NEU_JSON_RESPONSE_ERROR(NEU_ERR_TAG_NAME_TOO_LONG, { \
neu_http_response(aio, NEU_ERR_TAG_NAME_TOO_LONG, result_error); \
}); \
} while (0)
#define CHECK_GROUP_INTERVAL_ERR \
do { \
NEU_JSON_RESPONSE_ERROR(NEU_ERR_GROUP_PARAMETER_INVALID, { \
neu_http_response(aio, NEU_ERR_GROUP_PARAMETER_INVALID, \
result_error); \
}); \
} while (0)
extern int default_log_level;
extern bool disable_jwt;
extern char host_port[32];
+49 -41
View File
@@ -43,11 +43,7 @@ void handle_add_adapter(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_add_node_req_t, neu_json_decode_add_node_req, {
if (strlen(req->name) >= NEU_NODE_NAME_LEN) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_NODE_NAME_TOO_LONG, {
neu_http_response(aio, NEU_ERR_NODE_NAME_TOO_LONG,
result_error);
});
CHECK_NODE_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
@@ -121,18 +117,22 @@ void handle_del_adapter(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_del_node_req_t, neu_json_decode_del_node_req, {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_del_node_t cmd = { 0 };
if (strlen(req->name) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_del_node_t cmd = { 0 };
header.ctx = aio;
header.type = NEU_REQ_DEL_NODE;
strcpy(cmd.node, req->name);
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
header.ctx = aio;
header.type = NEU_REQ_DEL_NODE;
strcpy(cmd.node, req->name);
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
}
})
}
@@ -210,20 +210,24 @@ void handle_set_node_setting(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_node_setting_req_t, neu_json_decode_node_setting_req, {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_node_setting_t cmd = { 0 };
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_node_setting_t cmd = { 0 };
header.ctx = aio;
header.type = NEU_REQ_NODE_SETTING;
strcpy(cmd.node, req->node);
cmd.setting = req->setting;
req->setting = NULL; // ownership moved
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
header.ctx = aio;
header.type = NEU_REQ_NODE_SETTING;
strcpy(cmd.node, req->node);
cmd.setting = req->setting;
req->setting = NULL; // ownership moved
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
}
})
}
@@ -287,20 +291,24 @@ void handle_node_ctl(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_node_ctl_req_t, neu_json_decode_node_ctl_req, {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_node_ctl_t cmd = { 0 };
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_node_ctl_t cmd = { 0 };
header.ctx = aio;
header.type = NEU_REQ_NODE_CTL;
strcpy(cmd.node, req->node);
cmd.ctl = req->cmd;
header.ctx = aio;
header.type = NEU_REQ_NODE_CTL;
strcpy(cmd.node, req->node);
cmd.ctl = req->cmd;
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
}
})
}
+41 -13
View File
@@ -36,11 +36,10 @@ void handle_add_tags(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_add_tags_req_t, neu_json_decode_add_tags_req, {
if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_GROUP_NAME_TOO_LONG, {
neu_http_response(aio, NEU_ERR_GROUP_NAME_TOO_LONG,
result_error);
});
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
CHECK_GROUP_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
@@ -110,6 +109,11 @@ void handle_add_gtags(nng_aio *aio)
header.ctx = aio;
header.type = NEU_REQ_ADD_GTAG;
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
for (int i = 0; i < req->n_group; i++) {
if (strlen(req->groups[i].group) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
@@ -123,8 +127,8 @@ void handle_add_gtags(nng_aio *aio)
strcpy(cmd.driver, req->node);
cmd.n_group = req->n_group;
cmd.groups = calloc(req->n_group, sizeof(neu_gdatatag_t));
cmd.groups = calloc(req->n_group, sizeof(neu_gdatatag_t));
for (int i = 0; i < req->n_group; i++) {
strcpy(cmd.groups[i].group, req->groups[i].group);
cmd.groups[i].n_tag = req->groups[i].n_tag;
@@ -166,11 +170,9 @@ void handle_add_gtags(nng_aio *aio)
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
@@ -179,9 +181,8 @@ void handle_add_gtags_resp(nng_aio *aio, neu_resp_add_tag_t *resp)
{
neu_json_add_gtag_res_t res = { 0 };
char * result = NULL;
res.error = resp->error;
res.index = resp->index;
res.error = resp->error;
res.index = resp->index;
neu_json_encode_by_fn(&res, neu_json_encode_au_gtags_resp, &result);
NEU_JSON_RESPONSE_ERROR(resp->error,
@@ -198,13 +199,33 @@ void handle_del_tags(nng_aio *aio)
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_del_tag_t cmd = { 0 };
int err_type;
header.ctx = aio;
header.type = NEU_REQ_DEL_TAG;
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
goto error;
}
strcpy(cmd.driver, req->node);
strcpy(cmd.group, req->group);
cmd.n_tag = req->n_tags;
cmd.tags = calloc(req->n_tags, sizeof(char *));
for (int i = 0; i < req->n_tags; i++) {
if (strlen(req->tags[i]) >= NEU_TAG_ADDRESS_LEN) {
err_type = NEU_ERR_TAG_NAME_TOO_LONG;
goto error;
}
}
cmd.tags = calloc(req->n_tags, sizeof(char *));
for (int i = 0; i < req->n_tags; i++) {
cmd.tags[i] = strdup(req->tags[i]);
@@ -216,6 +237,12 @@ void handle_del_tags(nng_aio *aio)
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
@@ -231,6 +258,7 @@ void handle_update_tags(nng_aio *aio)
header.ctx = aio;
header.type = NEU_REQ_UPDATE_TAG;
strcpy(cmd.driver, req->node);
strcpy(cmd.group, req->group);
cmd.n_tag = req->n_tag;
@@ -345,4 +373,4 @@ void handle_get_tags_resp(nng_aio *aio, neu_resp_get_tag_t *tags)
free(result);
free(tags_res.tags);
utarray_free(tags->tags);
}
}
+76 -29
View File
@@ -32,27 +32,21 @@
void handle_add_group_config(nng_aio *aio)
{
neu_plugin_t *plugin = neu_rest_get_plugin();
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_add_group_config_req_t,
neu_json_decode_add_group_config_req, {
if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_GROUP_NAME_TOO_LONG, {
neu_http_response(aio, NEU_ERR_GROUP_NAME_TOO_LONG,
result_error);
});
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
CHECK_GROUP_NAME_LENGTH_ERR;
} else if (req->interval < NEU_GROUP_INTERVAL_LIMIT) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_GROUP_PARAMETER_INVALID, {
neu_http_response(aio, NEU_ERR_GROUP_PARAMETER_INVALID,
result_error);
});
CHECK_GROUP_INTERVAL_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_add_group_t cmd = { 0 };
header.ctx = aio;
header.type = NEU_REQ_ADD_GROUP;
header.ctx = aio;
header.type = NEU_REQ_ADD_GROUP;
strcpy(cmd.driver, req->node);
strcpy(cmd.group, req->group);
cmd.interval = req->interval;
@@ -135,23 +129,28 @@ void handle_update_group(nng_aio *aio)
void handle_del_group_config(nng_aio *aio)
{
neu_plugin_t *plugin = neu_rest_get_plugin();
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_del_group_config_req_t,
neu_json_decode_del_group_config_req, {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_del_group_t cmd = { 0 };
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
CHECK_GROUP_NAME_LENGTH_ERR;
} else {
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_del_group_t cmd = { 0 };
header.ctx = aio;
header.type = NEU_REQ_DEL_GROUP;
strcpy(cmd.driver, req->node);
strcpy(cmd.group, req->group);
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
header.ctx = aio;
header.type = NEU_REQ_DEL_GROUP;
strcpy(cmd.driver, req->node);
strcpy(cmd.group, req->group);
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
}
})
}
@@ -250,6 +249,18 @@ static inline int send_subscribe(nng_aio *aio, neu_reqresp_type_e type,
.type = type,
};
if (strlen(req->app) >= NEU_NODE_NAME_LEN) {
return NEU_ERR_NODE_NAME_TOO_LONG;
}
if (strlen(req->driver) >= NEU_NODE_NAME_LEN) {
return NEU_ERR_NODE_NAME_TOO_LONG;
}
if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
return NEU_ERR_GROUP_NAME_TOO_LONG;
}
neu_req_subscribe_t cmd = { 0 };
strcpy(cmd.app, req->app);
strcpy(cmd.driver, req->driver);
@@ -291,14 +302,30 @@ void handle_grp_update_subscribe(nng_aio *aio)
void handle_grp_unsubscribe(nng_aio *aio)
{
neu_plugin_t *plugin = neu_rest_get_plugin();
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_unsubscribe_req_t, neu_json_decode_unsubscribe_req, {
int ret = 0;
neu_req_unsubscribe_t cmd = { 0 };
neu_reqresp_head_t header = { 0 };
header.ctx = aio;
header.type = NEU_REQ_UNSUBSCRIBE_GROUP;
int err_type;
header.ctx = aio;
header.type = NEU_REQ_UNSUBSCRIBE_GROUP;
if (strlen(req->app) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->driver) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->group) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
goto error;
}
strcpy(cmd.app, req->app);
strcpy(cmd.driver, req->driver);
strcpy(cmd.group, req->group);
@@ -308,6 +335,12 @@ void handle_grp_unsubscribe(nng_aio *aio)
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
@@ -321,6 +354,20 @@ static inline int send_subscribe_groups(nng_aio * aio,
.type = NEU_REQ_SUBSCRIBE_GROUPS,
};
if (strlen(req->app) >= NEU_NODE_NAME_LEN) {
return NEU_ERR_NODE_NAME_TOO_LONG;
}
for (int i = 0; i < req->n_group; i++) {
if (strlen(req->groups[i].driver) >= NEU_NODE_NAME_LEN) {
return NEU_ERR_NODE_NAME_TOO_LONG;
}
if (strlen(req->groups[i].group) >= NEU_GROUP_NAME_LEN) {
return NEU_ERR_GROUP_NAME_TOO_LONG;
}
}
neu_req_subscribe_groups_t cmd = {
.app = req->app,
.n_group = req->n_group,
+41 -35
View File
@@ -49,46 +49,52 @@ void handle_log_level(nng_aio *aio)
NEU_PROCESS_HTTP_REQUEST_VALIDATE_JWT(
aio, neu_json_update_log_level_req_t,
neu_json_decode_update_log_level_req, {
neu_reqresp_head_t header = { 0 };
neu_req_update_log_level_t cmd = { 0 };
int log_level = -1;
if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_DEBUG)) {
log_level = ZLOG_LEVEL_DEBUG;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_INFO)) {
log_level = ZLOG_LEVEL_INFO;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_NOTICE)) {
log_level = ZLOG_LEVEL_NOTICE;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_WARN)) {
log_level = ZLOG_LEVEL_WARN;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_ERROR)) {
log_level = ZLOG_LEVEL_ERROR;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_FATAL)) {
log_level = ZLOG_LEVEL_FATAL;
if (req->node_name != NULL &&
strlen(req->node_name) > NEU_NODE_NAME_LEN) {
CHECK_NODE_NAME_LENGTH_ERR;
} else {
nlog_error("Failed to modify log_level of the node, "
"node_name:%s, log_level: %s",
req->node_name, req->log_level);
}
neu_reqresp_head_t header = { 0 };
neu_req_update_log_level_t cmd = { 0 };
int log_level = -1;
if (log_level == -1) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_PARAM_IS_WRONG, {
neu_http_response(aio, error_code.error, result_error);
});
} else {
header.ctx = aio;
header.type = NEU_REQ_UPDATE_LOG_LEVEL;
cmd.core = req->core;
cmd.log_level = log_level;
if (req->node_name != NULL) {
strcpy(cmd.node, req->node_name);
if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_DEBUG)) {
log_level = ZLOG_LEVEL_DEBUG;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_INFO)) {
log_level = ZLOG_LEVEL_INFO;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_NOTICE)) {
log_level = ZLOG_LEVEL_NOTICE;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_WARN)) {
log_level = ZLOG_LEVEL_WARN;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_ERROR)) {
log_level = ZLOG_LEVEL_ERROR;
} else if (0 == strcmp(req->log_level, NEU_LOG_LEVEL_FATAL)) {
log_level = ZLOG_LEVEL_FATAL;
} else {
nlog_error("Failed to modify log_level of the node, "
"node_name:%s, log_level: %s",
req->node_name, req->log_level);
}
int ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
if (log_level == -1) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_PARAM_IS_WRONG, {
neu_http_response(aio, error_code.error, result_error);
});
} else {
header.ctx = aio;
header.type = NEU_REQ_UPDATE_LOG_LEVEL;
cmd.core = req->core;
cmd.log_level = log_level;
if (req->node_name != NULL) {
strcpy(cmd.node, req->node_name);
}
int ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
neu_http_response(aio, NEU_ERR_IS_BUSY,
result_error);
});
}
}
}
})
+64 -1
View File
@@ -37,10 +37,25 @@ void handle_read(nng_aio *aio)
int ret = 0;
neu_reqresp_head_t header = { 0 };
neu_req_read_group_t cmd = { 0 };
int err_type;
header.ctx = aio;
header.type = NEU_REQ_READ_GROUP;
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->node) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
goto error;
}
if (strlen(req->node) >= NEU_TAG_NAME_LEN) {
err_type = NEU_ERR_TAG_NAME_TOO_LONG;
goto error;
}
cmd.driver = req->node;
cmd.group = req->group;
cmd.name = req->name;
@@ -55,6 +70,13 @@ void handle_read(nng_aio *aio)
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
@@ -66,6 +88,7 @@ void handle_write(nng_aio *aio)
aio, neu_json_write_req_t, neu_json_decode_write_req, {
neu_reqresp_head_t header = { 0 };
neu_req_write_tag_t cmd = { 0 };
int err_type;
if (req->t == NEU_JSON_STR &&
strlen(req->value.val_str) >= NEU_VALUE_SIZE) {
@@ -92,6 +115,21 @@ void handle_write(nng_aio *aio)
header.ctx = aio;
header.type = NEU_REQ_WRITE_TAG;
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->node) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
goto error;
}
if (strlen(req->node) >= NEU_TAG_NAME_LEN) {
err_type = NEU_ERR_TAG_NAME_TOO_LONG;
goto error;
}
cmd.driver = req->node;
cmd.group = req->group;
cmd.tag = req->tag;
@@ -134,6 +172,13 @@ void handle_write(nng_aio *aio)
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
@@ -145,6 +190,7 @@ void handle_write_tags(nng_aio *aio)
aio, neu_json_write_tags_req_t, neu_json_decode_write_tags_req, {
neu_reqresp_head_t header = { 0 };
neu_req_write_tags_t cmd = { 0 };
int err_type;
for (int i = 0; i < req->n_tag; i++) {
if (req->tags[i].t == NEU_JSON_STR) {
@@ -164,6 +210,16 @@ void handle_write_tags(nng_aio *aio)
header.ctx = aio;
header.type = NEU_REQ_WRITE_TAGS;
if (strlen(req->node) >= NEU_NODE_NAME_LEN) {
err_type = NEU_ERR_NODE_NAME_TOO_LONG;
goto error;
}
if (strlen(req->node) >= NEU_GROUP_NAME_LEN) {
err_type = NEU_ERR_GROUP_NAME_TOO_LONG;
goto error;
}
cmd.driver = req->node;
cmd.group = req->group;
cmd.n_tag = req->n_tag;
@@ -213,6 +269,13 @@ void handle_write_tags(nng_aio *aio)
neu_http_response(aio, NEU_ERR_IS_BUSY, result_error);
});
}
goto success;
error:
NEU_JSON_RESPONSE_ERROR(
err_type, { neu_http_response(aio, err_type, result_error); });
success:;
})
}
+16 -4
View File
@@ -990,6 +990,9 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data)
if (0 == ret) {
adapter_storage_del_tag(cmd->driver, cmd->group,
cmd->tags[i]);
} else {
error.error = ret;
break;
}
}
} else {
@@ -1107,15 +1110,24 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data)
neu_resp_update_tag_t resp = { 0 };
if (adapter->module->type == NEU_NA_TYPE_DRIVER) {
for (int i = 0; i < cmd->n_tag; i++) {
int ret = neu_adapter_driver_update_tag(
int ret = neu_adapter_driver_validate_tag(
(neu_adapter_driver_t *) adapter, cmd->group,
&cmd->tags[i]);
if (ret == 0) {
adapter_storage_update_tag(cmd->driver, cmd->group,
&cmd->tags[i]);
ret = neu_adapter_driver_update_tag(
(neu_adapter_driver_t *) adapter, cmd->group,
&cmd->tags[i]);
if (ret == 0) {
adapter_storage_update_tag(cmd->driver, cmd->group,
&cmd->tags[i]);
resp.index += 1;
resp.index += 1;
} else {
resp.error = ret;
break;
}
} else {
resp.error = ret;
break;
-1
View File
@@ -1,5 +1,4 @@
#include <gtest/gtest.h>
#include <vector>
extern "C" {
#include "utils/async_queue.h"