Fixing bugs

This commit is contained in:
Omar Kallel 2018-04-16 16:52:51 +01:00
parent 10ae23726a
commit e8304eb7a1
7 changed files with 53 additions and 37 deletions

View file

@ -1052,10 +1052,10 @@ void synchronize_specific_config_sections_with_dmmap_eq(char *package, char *sec
}
}
void get_dmmap_section_of_config_section(struct uci_section *config_section, char* dmmap_package, char* section_type, char *section_name, struct uci_section **dmmap_section){
void get_dmmap_section_of_config_section(char* dmmap_package, char* section_type, char *section_name, struct uci_section **dmmap_section){
struct uci_section* s;
char *section_name_conf =section_name(config_section);
uci_path_foreach_option_eq(icwmpd, dmmap_package, section_type, "section_name", section_name_conf, s){
uci_path_foreach_option_eq(icwmpd, dmmap_package, section_type, "section_name", section_name, s){
*dmmap_section= s;
return;
}

View file

@ -154,6 +154,6 @@ void ip_to_hex(char *address, char *ret);
void free_dmmap_config_dup_list(struct list_head *dup_list);
void synchronize_specific_config_sections_with_dmmap(char *package, char *section_type, char *dmmap_package, struct list_head *dup_list);
void synchronize_specific_config_sections_with_dmmap_eq(char *package, char *section_type, char *dmmap_package,char* option_name, char* option_value, struct list_head *dup_list);
void get_dmmap_section_of_config_section(struct uci_section *config_section, char* dmmap_package, char* section_type, char *section_name, struct uci_section **dmmap_section);
void get_dmmap_section_of_config_section(char* dmmap_package, char* section_type, char *section_name, struct uci_section **dmmap_section);
#endif

View file

@ -483,15 +483,19 @@ int add_profile_object(char *refparam, struct dmctx *ctx, void *data, char **ins
return 0;
}
int delete_associated_line_instances(char *sip_id)
int delete_associated_line_instances(char *sip_id, char* profile_key)
{
struct uci_section *s;
char *stmp;
uci_foreach_option_eq("voice_client", "brcm_line", "sip_account", sip_id, s) {
dmuci_set_value_by_section(s, "sip_account", "-");
dmuci_set_value_by_section(s, "lineinstance", "");
dmuci_set_value_by_section(s, "linealias", "");
}
uci_path_foreach_option_eq_safe(icwmpd, "dmmap_voice_client", "brcm_line", "voice_profile_key", profile_key, stmp, s) {
dmuci_delete_by_section(s, NULL, NULL);
}
return 0;
}
@ -501,31 +505,31 @@ int delete_profile_object(char *refparam, struct dmctx *ctx, void *data, char *i
struct uci_section *s, *ss = NULL;
struct sip_args *sipargs = (struct sip_args *)data;
struct uci_section *dmmap_section;
char *v= NULL;
get_dmmap_section_of_config_section("dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "profileinstance", &v);
switch (del_action) {
case DEL_INST:
get_dmmap_section_of_config_section(sipargs->sip_section, "dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
delete_associated_line_instances(section_name(sipargs->sip_section));
delete_associated_line_instances(section_name(sipargs->sip_section), v);
dmuci_delete_by_section(sipargs->sip_section, NULL, NULL);
break;
case DEL_ALL:
uci_foreach_sections("voice_client", "sip_service_provider", s) {
if (found != 0) {
get_dmmap_section_of_config_section(s, "dmmap_voice_client", "sip_service_provider", section_name(s), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
delete_associated_line_instances(section_name(ss));
delete_associated_line_instances(section_name(ss), v);
dmuci_delete_by_section(ss, NULL, NULL);
}
ss = s;
found++;
}
if (ss != NULL) {
get_dmmap_section_of_config_section(ss, "dmmap_voice_client", "sip_service_provider", section_name(ss), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
delete_associated_line_instances(section_name(ss));
delete_associated_line_instances(section_name(ss), v);
dmuci_delete_by_section(ss, NULL, NULL);
}
break;
@ -573,13 +577,13 @@ char *update_vp_line_instance(struct uci_section *brcm_s, char *sipx)
struct uci_section *s = NULL, *dmmap_section= NULL, *dmmap_dup= NULL;
int last_instance = 0, i_instance;
char *instance, buf[8];
get_dmmap_section_of_config_section(brcm_s, "dmmap_voice_client", "brcm_line", section_name(brcm_s), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(brcm_s), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "lineinstance", &instance);
if(instance[0] != '\0'){
return instance;
}
uci_foreach_option_eq("voice_client", "brcm_line", "sip_account", sipx, s) {
get_dmmap_section_of_config_section(s, "dmmap_voice_client", "brcm_line", section_name(brcm_s), &dmmap_dup);
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(s), &dmmap_dup);
dmuci_get_value_by_section_string(dmmap_dup, "lineinstance", &instance);
if (instance[0] != '\0') {
i_instance = atoi(instance);
@ -650,7 +654,7 @@ int add_line_object(char *refparam, struct dmctx *ctx, void *data, char **instan
add_line(s, section_name(sipargs->sip_section));
dmuci_add_section_icwmpd("dmmap_voice_client", "brcm_line", &dmmap_voice_line_section, &v);
dmuci_set_value_by_section(dmmap_voice_line_section, "section_name", section_name(s));
get_dmmap_section_of_config_section(sipargs->sip_section, "dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "profileinstance", &voice_profile_key);
dmuci_set_value_by_section(dmmap_voice_line_section, "voice_profile_key", voice_profile_key);
*instancepara = update_vp_line_instance(s, section_name(sipargs->sip_section)); //TODO: To Check
@ -709,7 +713,7 @@ int delete_line_object(char *refparam, struct dmctx *ctx, void *data, char *inst
switch (del_action) {
case DEL_INST:
bargs = (struct brcm_args *)data;
get_dmmap_section_of_config_section(bargs->brcm_section, "dmmap_voice_client", "brcm_line", section_name(bargs->brcm_section), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(bargs->brcm_section), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
delete_line(bargs->brcm_section, bargs->sip_section);
break;
@ -717,7 +721,7 @@ int delete_line_object(char *refparam, struct dmctx *ctx, void *data, char *inst
sipargs = (struct sip_args *)data;
s_name = section_name(sipargs->sip_section);
uci_foreach_option_eq("voice_client", "brcm_line", "sip_account", s_name, s) {
get_dmmap_section_of_config_section(s, "dmmap_voice_client", "brcm_line", section_name(s), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(s), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
delete_line(s, sipargs->sip_section);
@ -2234,7 +2238,7 @@ int get_voice_profile_alias(char *refparam, struct dmctx *ctx, void *data, char
struct sip_args *sipargs = (struct sip_args *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(sipargs->sip_section, "dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "profilealias", value);
return 0;
}
@ -2244,7 +2248,7 @@ int set_voice_profile_alias(char *refparam, struct dmctx *ctx, void *data, char
struct sip_args *sipargs = (struct sip_args *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(sipargs->sip_section, "dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_voice_client", "sip_service_provider", section_name(sipargs->sip_section), &dmmap_section);
switch (action) {
case VALUECHECK:
@ -2259,18 +2263,24 @@ int set_voice_profile_alias(char *refparam, struct dmctx *ctx, void *data, char
int get_line_alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
{
struct brcm_args *brcmarg = (struct brcm_args *)data;
dmuci_get_value_by_section_string(brcmarg->brcm_section, "linealias", value);
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(brcmarg->brcm_section), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "linealias", value);
return 0;
}
int set_line_alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
{
struct brcm_args *brcmarg = (struct brcm_args *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section("dmmap_voice_client", "brcm_line", section_name(brcmarg->brcm_section), &dmmap_section);
switch (action) {
case VALUECHECK:
return 0;
case VALUESET:
dmuci_set_value_by_section(brcmarg->brcm_section, "linealias", value);
dmuci_set_value_by_section(dmmap_section, "linealias", value);
return 0;
}
return 0;

View file

@ -151,7 +151,7 @@ int get_x_inteno_button_alias(char *refparam, struct dmctx *ctx, void *data, cha
{
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section((struct uci_section *)data, "dmmap_buttons", "button", section_name((struct uci_section *)data), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_buttons", "button", section_name((struct uci_section *)data), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "buttonalias", value);
return 0;
}
@ -160,7 +160,7 @@ int set_x_inteno_button_alias(char *refparam, struct dmctx *ctx, void *data, cha
{
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section((struct uci_section *)data, "dmmap_buttons", "button", section_name((struct uci_section *)data), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_buttons", "button", section_name((struct uci_section *)data), &dmmap_section);
switch (action) {
case VALUECHECK:
return 0;

View file

@ -656,14 +656,14 @@ int delete_ipacccfg_rule(char *refparam, struct dmctx *ctx, void *data, char *in
switch (del_action) {
case DEL_INST:
get_dmmap_section_of_config_section(ipaccsection, "dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ipaccsection, NULL, NULL);
break;
case DEL_ALL:
uci_foreach_sections("firewall", "rule", s) {
if (found != 0){
get_dmmap_section_of_config_section(s, "dmmap_firewall", "rule", section_name(s), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(s), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);
@ -672,7 +672,7 @@ int delete_ipacccfg_rule(char *refparam, struct dmctx *ctx, void *data, char *in
found++;
}
if (ss != NULL){
get_dmmap_section_of_config_section(ss, "dmmap_firewall", "rule", section_name(ss), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(ss), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);
@ -713,14 +713,14 @@ int delete_ipacccfg_port_forwarding(char *refparam, struct dmctx *ctx, void *dat
switch (del_action) {
case DEL_INST:
get_dmmap_section_of_config_section(forwardsection, "dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(forwardsection, NULL, NULL);
break;
case DEL_ALL:
uci_foreach_option_eq("firewall", "redirect", "target", "DNAT", s) {
if (found != 0){
get_dmmap_section_of_config_section(s, "dmmap_firewall", "redirect", section_name(s), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "redirect", section_name(s), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);
@ -729,7 +729,7 @@ int delete_ipacccfg_port_forwarding(char *refparam, struct dmctx *ctx, void *dat
found++;
}
if (ss != NULL){
get_dmmap_section_of_config_section(ss, "dmmap_firewall", "redirect", section_name(ss), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "redirect", section_name(ss), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);
@ -745,7 +745,7 @@ int get_x_inteno_cfgobj_address_alias(char *refparam, struct dmctx *ctx, void *d
struct uci_section *ipaccsection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(ipaccsection, "dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "frulealias", value);
return 0;
}
@ -755,7 +755,7 @@ int set_x_inteno_cfgobj_address_alias(char *refparam, struct dmctx *ctx, void *d
struct uci_section *ipaccsection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(ipaccsection, "dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "rule", section_name(ipaccsection), &dmmap_section);
switch (action) {
case VALUECHECK:
return 0;
@ -771,7 +771,7 @@ int get_port_forwarding_alias(char *refparam, struct dmctx *ctx, void *data, cha
struct uci_section *forwardsection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(forwardsection, "dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "forwardalias", value);
return 0;
}
@ -781,7 +781,7 @@ int set_port_forwarding_alias(char *refparam, struct dmctx *ctx, void *data, cha
struct uci_section *forwardsection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(forwardsection, "dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_firewall", "redirect", section_name(forwardsection), &dmmap_section);
switch (action) {
case VALUECHECK:
return 0;

View file

@ -325,7 +325,7 @@ int get_x_inteno_owsd_listenobj_alias(char *refparam, struct dmctx *ctx, void *d
struct uci_section *owsd_listensection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(owsd_listensection, "dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
dmuci_get_value_by_section_string(dmmap_section, "olistenalias", value);
return 0;
}
@ -335,7 +335,7 @@ int set_x_inteno_owsd_listenobj_alias(char *refparam, struct dmctx *ctx, void *d
struct uci_section *owsd_listensection = (struct uci_section *)data;
struct uci_section *dmmap_section;
get_dmmap_section_of_config_section(owsd_listensection, "dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
switch (action) {
case VALUECHECK:
return 0;
@ -377,14 +377,14 @@ int delete_owsd_listen_instance(char *refparam, struct dmctx *ctx, void *data, c
int found = 0;
switch (del_action) {
case DEL_INST:
get_dmmap_section_of_config_section(owsd_listensection, "dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_owsd", "owsd-listen", section_name(owsd_listensection), &dmmap_section);
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(owsd_listensection, NULL, NULL);
break;
case DEL_ALL:
uci_foreach_sections("owsd", "owsd-listen", s) {
if (found != 0){
get_dmmap_section_of_config_section(s, "dmmap_owsd", "listen", section_name(s), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_owsd", "listen", section_name(s), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);
@ -393,7 +393,7 @@ int delete_owsd_listen_instance(char *refparam, struct dmctx *ctx, void *data, c
found++;
}
if (ss != NULL){
get_dmmap_section_of_config_section(ss, "dmmap_owsd", "listen", section_name(ss), &dmmap_section);
get_dmmap_section_of_config_section("dmmap_owsd", "listen", section_name(ss), &dmmap_section);
if(dmmap_section != NULL)
dmuci_delete_by_section(dmmap_section, NULL, NULL);
dmuci_delete_by_section(ss, NULL, NULL);

View file

@ -65,6 +65,12 @@ struct package_change {
section != NULL; \
section = dmuci_walk_section_##path(package, stype, option, val, CMP_OPTION_EQUAL, NULL, section, GET_NEXT_SECTION))
#define uci_path_foreach_option_eq_safe(path, package, stype, option, val, _tmp, section) \
for (section = dmuci_walk_section_##path(package, stype, option, val, CMP_OPTION_EQUAL, NULL, NULL, GET_FIRST_SECTION), \
_tmp = (section) ? dmuci_walk_section_##path(package, stype, NULL, NULL, CMP_OPTION_EQUAL, NULL, section, GET_NEXT_SECTION) : NULL; \
section != NULL; \
section = _tmp, _tmp = (section) ? dmuci_walk_section_##path(package, stype, option, val, CMP_OPTION_EQUAL, NULL, section, GET_NEXT_SECTION) : NULL)
#define uci_path_foreach_option_cont(path, package, stype, option, val, section) \
for (section = dmuci_walk_section_##path(package, stype, option, val, CMP_OPTION_CONTAINING, NULL, NULL, GET_FIRST_SECTION); \
section != NULL; \