mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
B#10122: Fix VendorConfig file download
This commit is contained in:
parent
0ddc0df71d
commit
84074d23fb
5 changed files with 162 additions and 250 deletions
11
common.c
11
common.c
|
|
@ -389,12 +389,11 @@ void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name)
|
||||||
if (if_wan == NULL)
|
if (if_wan == NULL)
|
||||||
if_wan = "wan";
|
if_wan = "wan";
|
||||||
|
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = cwmp_uci_standard_init();
|
||||||
int ret = cwmp_uci_standard_init(&conf_path);
|
if (uci_ctx == NULL)
|
||||||
if (ret != 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cwmp_uci_foreach_sections("firewall", "zone", conf_path.uci_ctx, s)
|
cwmp_uci_foreach_sections("firewall", "zone", uci_ctx, s)
|
||||||
{
|
{
|
||||||
cwmp_uci_get_value_by_section_string(s, "network", &network);
|
cwmp_uci_get_value_by_section_string(s, "network", &network);
|
||||||
if (network == NULL)
|
if (network == NULL)
|
||||||
|
|
@ -404,7 +403,7 @@ void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name)
|
||||||
if (strcmp(net, if_wan) == 0) {
|
if (strcmp(net, if_wan) == 0) {
|
||||||
cwmp_uci_get_value_by_section_string(s, "name", zone_name);
|
cwmp_uci_get_value_by_section_string(s, "name", zone_name);
|
||||||
icwmp_free(network);
|
icwmp_free(network);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
net = strtok(NULL, " ");
|
net = strtok(NULL, " ");
|
||||||
|
|
@ -412,7 +411,7 @@ void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name)
|
||||||
icwmp_free(network);
|
icwmp_free(network);
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
350
cwmp_uci.c
350
cwmp_uci.c
|
|
@ -15,6 +15,11 @@
|
||||||
#include "cwmp_uci.h"
|
#include "cwmp_uci.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
|
struct uci_paths uci_save_conf_paths[] = {
|
||||||
|
[UCI_STANDARD_CONFIG] = { "/etc/config", "/tmp/.uci" },
|
||||||
|
[UCI_VARSTATE_CONFIG] = { "/var/state", NULL },
|
||||||
|
[UCI_ETCICWMPD_CONFIG] = { "/etc/icwmpd", NULL }
|
||||||
|
};
|
||||||
/*
|
/*
|
||||||
* UCI LOOKUP
|
* UCI LOOKUP
|
||||||
*/
|
*/
|
||||||
|
|
@ -100,80 +105,40 @@ lookup:
|
||||||
* UCI INIT EXIT
|
* UCI INIT EXIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int cwmp_uci_standard_init(struct uci_paths *conf_path)
|
static struct uci_context *_init_uci_by_type(uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
if (conf_path == NULL)
|
struct uci_context *uci_ctx = uci_alloc_context();
|
||||||
return -1;
|
if (uci_ctx == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
memset(conf_path, 0, sizeof(struct uci_paths));
|
uci_add_delta_path(uci_ctx, uci_ctx->savedir);
|
||||||
|
uci_set_savedir(uci_ctx, uci_save_conf_paths[uci_type].save_dir);
|
||||||
conf_path->uci_ctx = NULL;
|
uci_set_confdir(uci_ctx, uci_save_conf_paths[uci_type].conf_dir);
|
||||||
conf_path->conf_dir = "/etc/config";
|
return uci_ctx;
|
||||||
conf_path->save_dir = "/tmp/.uci";
|
|
||||||
|
|
||||||
conf_path->uci_ctx = uci_alloc_context();
|
|
||||||
if (conf_path->uci_ctx == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
uci_add_delta_path(conf_path->uci_ctx, conf_path->uci_ctx->savedir);
|
|
||||||
uci_set_savedir(conf_path->uci_ctx, conf_path->save_dir);
|
|
||||||
uci_set_confdir(conf_path->uci_ctx, conf_path->conf_dir);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_varstate_init(struct uci_paths *conf_path)
|
struct uci_context *cwmp_uci_standard_init()
|
||||||
{
|
{
|
||||||
if (conf_path == NULL)
|
return _init_uci_by_type(UCI_STANDARD_CONFIG);
|
||||||
return -1;
|
|
||||||
|
|
||||||
memset(conf_path, 0, sizeof(struct uci_paths));
|
|
||||||
|
|
||||||
conf_path->uci_ctx = NULL;
|
|
||||||
conf_path->conf_dir = "/var/state";
|
|
||||||
conf_path->save_dir = NULL;
|
|
||||||
|
|
||||||
conf_path->uci_ctx = uci_alloc_context();
|
|
||||||
if (conf_path->uci_ctx == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
uci_add_delta_path(conf_path->uci_ctx, conf_path->uci_ctx->savedir);
|
|
||||||
uci_set_savedir(conf_path->uci_ctx, conf_path->save_dir);
|
|
||||||
uci_set_confdir(conf_path->uci_ctx, conf_path->conf_dir);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_etccwmpd_init(struct uci_paths *conf_path)
|
struct uci_context *cwmp_uci_varstate_init()
|
||||||
{
|
{
|
||||||
if (conf_path == NULL)
|
return _init_uci_by_type(UCI_VARSTATE_CONFIG);
|
||||||
return -1;
|
|
||||||
|
|
||||||
memset(conf_path, 0, sizeof(struct uci_paths));
|
|
||||||
|
|
||||||
conf_path->uci_ctx = NULL;
|
|
||||||
conf_path->conf_dir = "/etc/icwmpd";
|
|
||||||
conf_path->save_dir = NULL;
|
|
||||||
|
|
||||||
conf_path->uci_ctx = uci_alloc_context();
|
|
||||||
if (conf_path->uci_ctx == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
uci_add_delta_path(conf_path->uci_ctx, conf_path->uci_ctx->savedir);
|
|
||||||
uci_set_savedir(conf_path->uci_ctx, conf_path->save_dir);
|
|
||||||
uci_set_confdir(conf_path->uci_ctx, conf_path->conf_dir);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct uci_context *cwmp_uci_etccwmpd_init()
|
||||||
void cwmp_uci_exit(struct uci_paths *conf_path)
|
|
||||||
{
|
{
|
||||||
if (conf_path == NULL)
|
return _init_uci_by_type(UCI_ETCICWMPD_CONFIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwmp_uci_exit(struct uci_context *uci_ctx)
|
||||||
|
{
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (conf_path->uci_ctx == NULL)
|
uci_free_context(uci_ctx);
|
||||||
return;
|
uci_ctx = NULL;
|
||||||
|
|
||||||
uci_free_context(conf_path->uci_ctx);
|
|
||||||
conf_path->uci_ctx = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -238,18 +203,18 @@ int cwmp_uci_get_value_by_path(char *path, struct uci_context *uci_ctx, char **v
|
||||||
int uci_get_state_value(char *path, char **value)
|
int uci_get_state_value(char *path, char **value)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (path == NULL) {
|
if (path == NULL) {
|
||||||
*value = NULL;
|
*value = NULL;
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwmp_uci_varstate_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_varstate_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
error = cwmp_uci_get_value_by_path(path, conf_path.uci_ctx, value);
|
error = cwmp_uci_get_value_by_path(path, uci_ctx, value);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
@ -257,18 +222,18 @@ int uci_get_state_value(char *path, char **value)
|
||||||
int uci_get_value(char *path, char **value)
|
int uci_get_value(char *path, char **value)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (path == NULL) {
|
if (path == NULL) {
|
||||||
*value = NULL;
|
*value = NULL;
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwmp_uci_standard_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_standard_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
error = cwmp_uci_get_value_by_path(path, conf_path.uci_ctx, value);
|
error = cwmp_uci_get_value_by_path(path, uci_ctx, value);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
@ -370,26 +335,24 @@ int cwmp_uci_set_value_string(char *package, char *section, char *option, char *
|
||||||
|
|
||||||
int cwmp_uci_set_value(char *package, char *section, char *option, char *value)
|
int cwmp_uci_set_value(char *package, char *section, char *option, char *value)
|
||||||
{
|
{
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = cwmp_uci_standard_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
if (cwmp_uci_standard_init(&conf_path) != 0)
|
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
int ret = cwmp_uci_set_value_string(package, section, option, value, conf_path.uci_ctx);
|
int ret = cwmp_uci_set_value_string(package, section, option, value, uci_ctx);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_set_varstate_value(char *package, char*section, char *option, char *value)
|
int cwmp_uci_set_varstate_value(char *package, char*section, char *option, char *value)
|
||||||
{
|
{
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = cwmp_uci_varstate_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
if (cwmp_uci_varstate_init(&conf_path) != 0)
|
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
int ret = cwmp_uci_set_value_string(package, section, option, value, conf_path.uci_ctx);
|
int ret = cwmp_uci_set_value_string(package, section, option, value, uci_ctx);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -420,26 +383,24 @@ int uci_set_value_by_path(char *path, char *value, struct uci_context *uci_ctx)
|
||||||
|
|
||||||
int cwmp_uci_set_value_by_path(char *path, char *value)
|
int cwmp_uci_set_value_by_path(char *path, char *value)
|
||||||
{
|
{
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = cwmp_uci_standard_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
if (cwmp_uci_standard_init(&conf_path) != 0)
|
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
int ret = uci_set_value_by_path(path, value, conf_path.uci_ctx);
|
int ret = uci_set_value_by_path(path, value, uci_ctx);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_set_varstate_value_by_path(char *path, char *value)
|
int cwmp_uci_set_varstate_value_by_path(char *path, char *value)
|
||||||
{
|
{
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = cwmp_uci_varstate_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
if (cwmp_uci_varstate_init(&conf_path) != 0)
|
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
int ret = uci_set_value_by_path(path, value, conf_path.uci_ctx);
|
int ret = uci_set_value_by_path(path, value, uci_ctx);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
@ -570,83 +531,61 @@ int cwmp_uci_get_option_value_list(char *package, char *section, char *option, s
|
||||||
return option_type;
|
return option_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _init_uci_by_type(uci_config_paths uci_type, struct uci_paths *conf)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (uci_type == UCI_STANDARD_CONFIG) {
|
|
||||||
ret = cwmp_uci_standard_init(conf);
|
|
||||||
} else if (uci_type == UCI_ETCICWMPD_CONFIG) {
|
|
||||||
ret = cwmp_uci_etccwmpd_init(conf);
|
|
||||||
} else if (uci_type == UCI_VARSTATE_CONFIG) {
|
|
||||||
ret = cwmp_uci_varstate_init(conf);
|
|
||||||
} else {
|
|
||||||
CWMP_LOG(INFO, "Failed to init the config type[%d]", uci_type);
|
|
||||||
ret = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cwmp_uci_add_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
int cwmp_uci_add_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
int error = UCI_OK;
|
int error = UCI_OK;
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (package == NULL || section == NULL || option == NULL) {
|
if (package == NULL || section == NULL || option == NULL) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr(conf_path.uci_ctx, &ptr, package, section, option, value)) {
|
if (cwmp_uci_lookup_ptr(uci_ctx, &ptr, package, section, option, value)) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_PARSE;
|
return UCI_ERR_PARSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = uci_add_list(conf_path.uci_ctx, &ptr);
|
error = uci_add_list(uci_ctx, &ptr);
|
||||||
if (error != UCI_OK) {
|
if (error != UCI_OK) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
uci_commit(conf_path.uci_ctx, &ptr.p, false);
|
uci_commit(uci_ctx, &ptr.p, false);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_OK;
|
return UCI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_del_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
int cwmp_uci_del_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (package == NULL || section == NULL || option == NULL) {
|
if (package == NULL || section == NULL || option == NULL) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr(conf_path.uci_ctx, &ptr, package, section, option, value)) {
|
if (cwmp_uci_lookup_ptr(uci_ctx, &ptr, package, section, option, value)) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uci_del_list(conf_path.uci_ctx, &ptr) != UCI_OK) {
|
if (uci_del_list(uci_ctx, &ptr) != UCI_OK) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uci_commit(conf_path.uci_ctx, &ptr.p, false);
|
uci_commit(uci_ctx, &ptr.p, false);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -654,32 +593,30 @@ int uci_add_list_value(char *cmd, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr;
|
struct uci_ptr ptr;
|
||||||
int error = UCI_OK;
|
int error = UCI_OK;
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (cmd == NULL)
|
if (cmd == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (uci_lookup_ptr(conf_path.uci_ctx, &ptr, cmd, true) != UCI_OK) {
|
if (uci_lookup_ptr(uci_ctx, &ptr, cmd, true) != UCI_OK) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_PARSE;
|
return UCI_ERR_PARSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = uci_add_list(conf_path.uci_ctx, &ptr);
|
error = uci_add_list(uci_ctx, &ptr);
|
||||||
|
|
||||||
if (error == UCI_OK) {
|
if (error == UCI_OK) {
|
||||||
error = uci_save(conf_path.uci_ctx, ptr.p);
|
error = uci_save(uci_ctx, ptr.p);
|
||||||
} else {
|
} else {
|
||||||
CWMP_LOG(ERROR, "UCI delete not succeed %s", cmd);
|
CWMP_LOG(ERROR, "UCI delete not succeed %s", cmd);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -693,9 +630,8 @@ static int cwmp_uci_rename_section_by_section(struct uci_section *s, char *value
|
||||||
if (s == NULL || value == NULL || uci_ctx == NULL)
|
if (s == NULL || value == NULL || uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr_by_section(uci_ctx, &up, s, NULL, value) == -1) {
|
if (cwmp_uci_lookup_ptr_by_section(uci_ctx, &up, s, NULL, value) == -1)
|
||||||
return UCI_ERR_PARSE;
|
return UCI_ERR_PARSE;
|
||||||
}
|
|
||||||
|
|
||||||
if (uci_rename(uci_ctx, &up) != UCI_OK) {
|
if (uci_rename(uci_ctx, &up) != UCI_OK) {
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
@ -704,10 +640,10 @@ static int cwmp_uci_rename_section_by_section(struct uci_section *s, char *value
|
||||||
return UCI_OK;
|
return UCI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_section_helper(struct uci_paths *conf_path, char *package, char * stype, struct uci_section **s, struct uci_ptr *ptr)
|
static int add_section_helper(struct uci_context *uci_ctx, uci_config_paths uci_type, char *package, char *stype, struct uci_section **s, struct uci_ptr *ptr)
|
||||||
{
|
{
|
||||||
char fname[128] = {0};
|
char fname[128] = {0};
|
||||||
snprintf(fname, sizeof(fname), "%s/%s", conf_path->conf_dir, package);
|
snprintf(fname, sizeof(fname), "%s/%s", uci_save_conf_paths[uci_type].conf_dir, package);
|
||||||
|
|
||||||
if (!file_exists(fname)) {
|
if (!file_exists(fname)) {
|
||||||
FILE *fptr = fopen(fname, "w");
|
FILE *fptr = fopen(fname, "w");
|
||||||
|
|
@ -718,8 +654,8 @@ static int add_section_helper(struct uci_paths *conf_path, char *package, char *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr(conf_path->uci_ctx, ptr, package, NULL, NULL, NULL) == 0
|
if (cwmp_uci_lookup_ptr(uci_ctx, ptr, package, NULL, NULL, NULL) == 0
|
||||||
&& uci_add_section(conf_path->uci_ctx, ptr->p, stype, s) == UCI_OK) {
|
&& uci_add_section(uci_ctx, ptr->p, stype, s) == UCI_OK) {
|
||||||
CWMP_LOG(INFO, "New uci section %s added successfully", stype);
|
CWMP_LOG(INFO, "New uci section %s added successfully", stype);
|
||||||
} else {
|
} else {
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
@ -731,50 +667,46 @@ static int add_section_helper(struct uci_paths *conf_path, char *package, char *
|
||||||
int cwmp_uci_add_section(char *package, char *stype, uci_config_paths uci_type, struct uci_section **s)
|
int cwmp_uci_add_section(char *package, char *stype, uci_config_paths uci_type, struct uci_section **s)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
*s = NULL;
|
*s = NULL;
|
||||||
|
|
||||||
if (package == NULL || stype == NULL)
|
if (package == NULL || stype == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (UCI_OK == add_section_helper(&conf_path, package, stype, s, &ptr))
|
if (UCI_OK == add_section_helper(uci_ctx, uci_type, package, stype, s, &ptr))
|
||||||
uci_commit(conf_path.uci_ctx, &ptr.p, false);
|
uci_commit(uci_ctx, &ptr.p, false);
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_OK;
|
return UCI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_add_section_rename(char *package, char *stype, uci_config_paths uci_type , struct uci_section **s, char *name)
|
int cwmp_uci_add_section_rename(char *package, char *stype, uci_config_paths uci_type , struct uci_section **s, char *name)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
*s = NULL;
|
*s = NULL;
|
||||||
|
|
||||||
if (package == NULL || stype == NULL)
|
if (package == NULL || stype == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (UCI_OK == add_section_helper(&conf_path, package, stype, s, &ptr)) {
|
if (UCI_OK == add_section_helper(uci_ctx, uci_type, package, stype, s, &ptr)) {
|
||||||
if (cwmp_uci_rename_section_by_section(*s, name, conf_path.uci_ctx) != UCI_OK) {
|
if (cwmp_uci_rename_section_by_section(*s, name, uci_ctx) != UCI_OK) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
uci_commit(conf_path.uci_ctx, &ptr.p, false);
|
uci_commit(uci_ctx, &ptr.p, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_OK;
|
return UCI_OK;
|
||||||
}
|
}
|
||||||
struct uci_section* get_section_by_section_name(char *package, char *stype, char* sname, uci_config_paths uci_type)
|
struct uci_section* get_section_by_section_name(char *package, char *stype, char* sname, uci_config_paths uci_type)
|
||||||
|
|
@ -784,21 +716,19 @@ struct uci_section* get_section_by_section_name(char *package, char *stype, char
|
||||||
if (package == NULL || stype == NULL || sname == NULL)
|
if (package == NULL || stype == NULL || sname == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cwmp_uci_foreach_sections(package, stype, conf_path.uci_ctx, s) {
|
cwmp_uci_foreach_sections(package, stype, uci_ctx, s) {
|
||||||
if (strcmp(section_name(s), sname) == 0) {
|
if (strcmp(section_name(s), sname) == 0) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -819,53 +749,49 @@ int cwmp_uci_add_section_with_specific_name(char *package, char *stype, char *se
|
||||||
int uci_delete_value(char *path, int uci_type)
|
int uci_delete_value(char *path, int uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr;
|
struct uci_ptr ptr;
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (path == NULL)
|
if (path == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (uci_lookup_ptr(conf_path.uci_ctx, &ptr, path, true) != UCI_OK) {
|
if (uci_lookup_ptr(uci_ctx, &ptr, path, true) != UCI_OK) {
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return CWMP_GEN_ERR;
|
return CWMP_GEN_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
int error = uci_delete(conf_path.uci_ctx, &ptr);
|
int error = uci_delete(uci_ctx, &ptr);
|
||||||
|
|
||||||
if (error == UCI_OK) {
|
if (error == UCI_OK) {
|
||||||
error = uci_save(conf_path.uci_ctx, ptr.p);
|
error = uci_save(uci_ctx, ptr.p);
|
||||||
} else {
|
} else {
|
||||||
CWMP_LOG(ERROR, "UCI delete not succeed %s", path);
|
CWMP_LOG(ERROR, "UCI delete not succeed %s", path);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return CWMP_GEN_ERR;
|
return CWMP_GEN_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_get_section_type(char *package, char *section, uci_config_paths uci_type, char **value)
|
int cwmp_uci_get_section_type(char *package, char *section, uci_config_paths uci_type, char **value)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (package == NULL || section == NULL) {
|
if (package == NULL || section == NULL) {
|
||||||
*value = NULL;
|
*value = NULL;
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0)
|
if (uci_ctx == NULL)
|
||||||
return UCI_ERR_NOTFOUND;
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr(conf_path.uci_ctx, &ptr, package, section, NULL, NULL)) {
|
if (cwmp_uci_lookup_ptr(uci_ctx, &ptr, package, section, NULL, NULL)) {
|
||||||
*value = "";
|
*value = "";
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -875,7 +801,7 @@ int cwmp_uci_get_section_type(char *package, char *section, uci_config_paths uci
|
||||||
*value = "";
|
*value = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return UCI_OK;
|
return UCI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -959,39 +885,32 @@ int cwmp_uci_import(char *package_name, const char *input_path, uci_config_paths
|
||||||
{
|
{
|
||||||
struct uci_package *package = NULL;
|
struct uci_package *package = NULL;
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
int ret = CWMP_OK, err = -1;
|
int ret = CWMP_OK;
|
||||||
FILE *input = fopen(input_path, "r");
|
FILE *input = fopen(input_path, "r");
|
||||||
if (!input)
|
if (!input)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
|
if (uci_ctx == NULL) {
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
|
||||||
if (err != 0) {
|
|
||||||
fclose(input);
|
fclose(input);
|
||||||
return err;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uci_import(conf_path.uci_ctx, input, package_name, &package, (package_name != NULL)) != UCI_OK) {
|
if (uci_import(uci_ctx, input, package_name, &package, (package_name != NULL)) != UCI_OK) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conf_path.uci_ctx == NULL) {
|
uci_foreach_element(&uci_ctx->root, e)
|
||||||
ret = -1;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
uci_foreach_element(&conf_path.uci_ctx->root, e)
|
|
||||||
{
|
{
|
||||||
struct uci_package *p = uci_to_package(e);
|
struct uci_package *p = uci_to_package(e);
|
||||||
if (uci_commit(conf_path.uci_ctx, &p, true) != UCI_OK)
|
if (uci_commit(uci_ctx, &p, true) != UCI_OK)
|
||||||
ret = CWMP_GEN_ERR;
|
ret = CWMP_GEN_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
fclose(input);
|
fclose(input);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1003,25 +922,23 @@ int cwmp_uci_export_package(char *package, const char *output_path, uci_config_p
|
||||||
if (!out)
|
if (!out)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
struct uci_paths conf_path;
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
|
if (uci_ctx == NULL) {
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
|
||||||
if (ret != 0) {
|
|
||||||
fclose(out);
|
fclose(out);
|
||||||
return ret;
|
return UCI_ERR_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uci_lookup_ptr(conf_path.uci_ctx, &ptr, package, true) != UCI_OK) {
|
if (uci_lookup_ptr(uci_ctx, &ptr, package, true) != UCI_OK) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uci_export(conf_path.uci_ctx, out, ptr.p, true) != UCI_OK)
|
if (uci_export(uci_ctx, out, ptr.p, true) != UCI_OK)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
fclose(out);
|
fclose(out);
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1029,20 +946,17 @@ int cwmp_uci_export(const char *output_path, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
char **configs = NULL;
|
char **configs = NULL;
|
||||||
char **p;
|
char **p;
|
||||||
struct uci_paths conf_path;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
ret = _init_uci_by_type(uci_type, &conf_path);
|
struct uci_context *uci_ctx = _init_uci_by_type(uci_type);
|
||||||
if (ret != 0) {
|
if (uci_ctx == NULL)
|
||||||
|
return UCI_ERR_NOTFOUND;
|
||||||
|
|
||||||
|
if (uci_list_configs(uci_ctx, &configs) != UCI_OK) {
|
||||||
|
cwmp_uci_exit(uci_ctx);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uci_list_configs(conf_path.uci_ctx, &configs) != UCI_OK) {
|
cwmp_uci_exit(uci_ctx);
|
||||||
cwmp_uci_exit(&conf_path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
cwmp_uci_exit(&conf_path);
|
|
||||||
if (configs == NULL)
|
if (configs == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,13 +113,12 @@ struct config_uci_list {
|
||||||
struct uci_paths {
|
struct uci_paths {
|
||||||
char *conf_dir;
|
char *conf_dir;
|
||||||
char *save_dir;
|
char *save_dir;
|
||||||
struct uci_context *uci_ctx;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int cwmp_uci_standard_init(struct uci_paths *conf_path);
|
struct uci_context *cwmp_uci_standard_init();
|
||||||
int cwmp_uci_varstate_init(struct uci_paths *conf_path);
|
struct uci_context *cwmp_uci_varstate_init();
|
||||||
int cwmp_uci_etccwmpd_init(struct uci_paths *conf_path);
|
struct uci_context *cwmp_uci_etccwmpd_init();
|
||||||
void cwmp_uci_exit(struct uci_paths *conf_path);
|
void cwmp_uci_exit(struct uci_context *uci_ctx);
|
||||||
int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value);
|
int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value);
|
||||||
int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct uci_context *uci_ctx, struct uci_list **value);
|
int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct uci_context *uci_ctx, struct uci_list **value);
|
||||||
int uci_get_state_value(char *cmd, char **value);
|
int uci_get_state_value(char *cmd, char **value);
|
||||||
|
|
|
||||||
|
|
@ -131,9 +131,9 @@ bool check_parent_with_different_notification(char *parameter_name, int notifica
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
int i;
|
int i;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (cwmp_uci_etccwmpd_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_etccwmpd_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
|
|
@ -141,7 +141,7 @@ bool check_parent_with_different_notification(char *parameter_name, int notifica
|
||||||
|
|
||||||
if (i == notification)
|
if (i == notification)
|
||||||
continue;
|
continue;
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], conf_path.uci_ctx, &list_notif);
|
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], uci_ctx, &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (parameter_is_subobject_of_parameter(e->name, parameter_name)) {
|
if (parameter_is_subobject_of_parameter(e->name, parameter_name)) {
|
||||||
|
|
@ -156,7 +156,7 @@ bool check_parent_with_different_notification(char *parameter_name, int notifica
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,17 +167,17 @@ bool update_notifications_list(char *parameter_name, int notification)
|
||||||
int i;
|
int i;
|
||||||
char *ename = NULL;
|
char *ename = NULL;
|
||||||
bool update_ret = true;
|
bool update_ret = true;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (parameter_name == NULL)
|
if (parameter_name == NULL)
|
||||||
parameter_name = "Device.";
|
parameter_name = "Device.";
|
||||||
|
|
||||||
if (cwmp_uci_etccwmpd_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_etccwmpd_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return update_ret;
|
return update_ret;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
int option_type;
|
int option_type;
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], conf_path.uci_ctx, &list_notif);
|
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], uci_ctx, &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element_safe(list_notif, tmp, e) {
|
uci_foreach_element_safe(list_notif, tmp, e) {
|
||||||
if (e->name == NULL)
|
if (e->name == NULL)
|
||||||
|
|
@ -194,7 +194,7 @@ bool update_notifications_list(char *parameter_name, int notification)
|
||||||
if (option_type == UCI_TYPE_STRING)
|
if (option_type == UCI_TYPE_STRING)
|
||||||
cwmp_free_uci_list(list_notif);
|
cwmp_free_uci_list(list_notif);
|
||||||
}
|
}
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
|
|
||||||
if (update_ret && notification == 0 && !check_parent_with_different_notification(parameter_name, 0))
|
if (update_ret && notification == 0 && !check_parent_with_different_notification(parameter_name, 0))
|
||||||
update_ret = false;
|
update_ret = false;
|
||||||
|
|
@ -230,18 +230,18 @@ int get_parameter_family_notifications(char *parameter_name, struct list_head *c
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
int i, notif_ret = 0;
|
int i, notif_ret = 0;
|
||||||
char *parent_param = NULL;
|
char *parent_param = NULL;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (parameter_name == NULL)
|
if (parameter_name == NULL)
|
||||||
parameter_name = "Device.";
|
parameter_name = "Device.";
|
||||||
|
|
||||||
if (cwmp_uci_etccwmpd_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_etccwmpd_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return notif_ret;
|
return notif_ret;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
int option_type;
|
int option_type;
|
||||||
|
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], conf_path.uci_ctx, &list_notif);
|
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], uci_ctx, &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (parameter_is_subobject_of_parameter(parameter_name, e->name)) {
|
if (parameter_is_subobject_of_parameter(parameter_name, e->name)) {
|
||||||
|
|
@ -258,7 +258,7 @@ int get_parameter_family_notifications(char *parameter_name, struct list_head *c
|
||||||
if (option_type == UCI_TYPE_STRING)
|
if (option_type == UCI_TYPE_STRING)
|
||||||
cwmp_free_uci_list(list_notif);
|
cwmp_free_uci_list(list_notif);
|
||||||
}
|
}
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return notif_ret;
|
return notif_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -361,14 +361,14 @@ void create_list_param_obj_notify()
|
||||||
struct uci_list *list_notif = NULL;
|
struct uci_list *list_notif = NULL;
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (cwmp_uci_etccwmpd_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_etccwmpd_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
int option_type;
|
int option_type;
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], conf_path.uci_ctx, &list_notif);
|
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications[i], uci_ctx, &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
add_dm_parameter_to_list(&list_param_obj_notify, e->name, "", "", i, false);
|
add_dm_parameter_to_list(&list_param_obj_notify, e->name, "", "", i, false);
|
||||||
|
|
@ -377,7 +377,7 @@ void create_list_param_obj_notify()
|
||||||
cwmp_free_uci_list(list_notif);
|
cwmp_free_uci_list(list_notif);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* update_list_param_leaf_notify_with_sub_parameter_list(struct list_head *list_param_leaf_notify, char* parent_parameter, int parent_notification, bool parent_forced_notif, void (*update_notify_file_line_arg)(FILE *notify_file, char *param_name, char *param_type, char *param_value, int notification), FILE* notify_file_arg)
|
char* update_list_param_leaf_notify_with_sub_parameter_list(struct list_head *list_param_leaf_notify, char* parent_parameter, int parent_notification, bool parent_forced_notif, void (*update_notify_file_line_arg)(FILE *notify_file, char *param_name, char *param_type, char *param_value, int notification), FILE* notify_file_arg)
|
||||||
|
|
|
||||||
|
|
@ -93,14 +93,14 @@ static int get_parameter_notification_from_notifications_uci_list(char *paramete
|
||||||
int i, notification = 0;
|
int i, notification = 0;
|
||||||
struct uci_list *list_notif;
|
struct uci_list *list_notif;
|
||||||
struct uci_element *e;
|
struct uci_element *e;
|
||||||
struct uci_paths conf_path;
|
|
||||||
|
|
||||||
if (cwmp_uci_etccwmpd_init(&conf_path) != 0)
|
struct uci_context *uci_ctx = cwmp_uci_etccwmpd_init();
|
||||||
|
if (uci_ctx == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
int option_type;
|
int option_type;
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications_test[i], conf_path.uci_ctx, &list_notif);
|
option_type = cwmp_uci_get_option_value_list("cwmp_notifications", "@notifications[0]", notifications_test[i], uci_ctx, &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (strcmp(e->name, parameter_name) == 0) {
|
if (strcmp(e->name, parameter_name) == 0) {
|
||||||
|
|
@ -114,7 +114,7 @@ static int get_parameter_notification_from_notifications_uci_list(char *paramete
|
||||||
if(notification > 0)
|
if(notification > 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cwmp_uci_exit(&conf_path);
|
cwmp_uci_exit(uci_ctx);
|
||||||
return notification;
|
return notification;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue