diff --git a/dm/dmcommon.c b/dm/dmcommon.c index fa38e90..fe6efea 100644 --- a/dm/dmcommon.c +++ b/dm/dmcommon.c @@ -38,15 +38,14 @@ char *get_pid(char *pname) fgets(str, TAILLE_MAX, f); if (str[0] == '\0') { pclose(f); - return dmstrdup(""); + return ""; } pid_t pid = strtoul(str, NULL, 10); pclose(f); - dmasprintf(&v, "%d", pid); + dmasprintf(&v, "%d", pid); // MEM WILL BE FREED IN DMMEMCLEAN return v; } - v = dmstrdup(""); - return v; + return ""; } int check_file(char *path) @@ -57,4 +56,4 @@ int check_file(char *path) return 1; } return 0; -} \ No newline at end of file +} diff --git a/dm/dmcwmp.c b/dm/dmcwmp.c index 4655a85..f923955 100644 --- a/dm/dmcwmp.c +++ b/dm/dmcwmp.c @@ -92,16 +92,14 @@ char *update_instance(struct uci_section *s, char *last_inst, char *inst_opt) sprintf(buf, "%d", 1); else sprintf(buf, "%d", atoi(last_inst)+1); - dmfree(instance); //TODO MEM instance = dmuci_set_value_by_section(s, inst_opt, buf); - instance = dmstrdup(instance); } return instance; } int get_empty(char *refparam, struct dmctx *args, char **value) { - *value = dmstrdup(""); + *value = ""; return 0; } @@ -121,7 +119,7 @@ void add_list_paramameter(struct dmctx *ctx, char *param_name, char *param_data, dm_parameter = dmcalloc(1, sizeof(struct dm_parameter)); _list_add(&dm_parameter->list, ilist->prev, ilist); dm_parameter->name = param_name; - dm_parameter->data = param_data ? param_data : dmstrdup(""); //allocate memory in function + dm_parameter->data = param_data ? param_data : ""; //allocate memory in function dm_parameter->type = param_type; } @@ -129,7 +127,6 @@ void del_list_parameter(struct dm_parameter *dm_parameter) { list_del(&dm_parameter->list); dmfree(dm_parameter->name); - dmfree(dm_parameter->data); dmfree(dm_parameter); } @@ -261,11 +258,9 @@ static int set_parameter_notification(char *param, char *value) dmuci_get_section_type("cwmp", "@notifications[0]", &tmp); if (!tmp || tmp[0] == '\0') { dmuci_add_section("cwmp", "notifications", &s, &buf); - dmfree(buf); } else { remove_parameter_notification(param); } - dmfree(tmp); notification = get_parameter_notification(param); if (strcmp(notification, value) == 0) { @@ -483,7 +478,7 @@ int dm_entry_get_name(struct dmctx *ctx) static int get_name_obj(DMOBJECT_API_ARGS) { char *obj = dmstrdup(ctx->current_obj); - char *p = dmstrdup(permission); + char *p = permission; add_list_paramameter(ctx, obj, p, NULL); return 0; } @@ -499,7 +494,7 @@ static int get_name_inparam_isobj_check_obj(DMOBJECT_API_ARGS) ctx->faultcode = 0; if (ctx->nextlevel == 0 || check_obj_is_nl1(ctx->current_obj, ctx->in_param, 2) == 0 ) { char *obj = dmstrdup(ctx->current_obj); - char *p = dmstrdup(permission); + char *p = permission; add_list_paramameter(ctx, obj, p, NULL); return 0; } @@ -511,7 +506,7 @@ static int get_name_inparam_isobj_check_obj(DMOBJECT_API_ARGS) static int get_name_emptyin_nl1_obj(DMOBJECT_API_ARGS) { char *obj = dmstrdup(ctx->current_obj); - char *p = dmstrdup(permission); + char *p = permission; add_list_paramameter(ctx, obj, p, NULL); return 0; } @@ -519,7 +514,7 @@ static int get_name_emptyin_nl1_obj(DMOBJECT_API_ARGS) static int get_name_param(DMPARAM_API_ARGS) { char *full_param; - char *p = dmstrdup(permission); + char *p = permission; dmastrcat(&full_param, ctx->current_obj, lastname); add_list_paramameter(ctx, full_param, p, NULL); return 0; @@ -538,7 +533,7 @@ static int get_name_inparam_isparam_check_param(DMPARAM_API_ARGS) ctx->stop = 1; return FAULT_9003; } - char *p = dmstrdup(permission); + char *p = permission; add_list_paramameter(ctx, full_param, p, NULL); ctx->stop = 1; return 0; @@ -551,12 +546,12 @@ static int get_name_inparam_isobj_check_param(DMPARAM_API_ARGS) if (strstr(full_param, ctx->in_param)) { ctx->faultcode = 0; if (ctx->nextlevel == 0 || check_obj_is_nl1(full_param, ctx->in_param, 1) == 0 ) { - char *p = dmstrdup(permission); + char *p = permission; add_list_paramameter(ctx, full_param, p, NULL); return 0; } dmfree(full_param); - return 0; + return 0; //TODO check the return value here! } dmfree(full_param); return FAULT_9005; @@ -620,9 +615,8 @@ static int get_notification_param(DMPARAM_API_ARGS) dmastrcat(&full_param, ctx->current_obj, lastname); if (forced_notify == UNDEF) { notification = get_parameter_notification(full_param); - notification = dmstrdup(notification); } else { - notification = dmstrdup(notifications[forced_notify].value); + notification = notifications[forced_notify].value; } add_list_paramameter(ctx, full_param, notification, NULL); return 0; @@ -639,9 +633,8 @@ static int get_notification_inparam_isparam_check_param(DMPARAM_API_ARGS) } if (forced_notify == UNDEF) { notification = get_parameter_notification(full_param); - notification = dmstrdup(notification); } else { - notification = dmstrdup(notifications[forced_notify].value); + notification = notifications[forced_notify].value; } add_list_paramameter(ctx, full_param, notification, NULL); ctx->stop = true; @@ -656,9 +649,8 @@ static int get_notification_inparam_isobj_check_param(DMPARAM_API_ARGS) if (strstr(full_param, ctx->in_param)) { if (forced_notify == UNDEF) { notification = get_parameter_notification(full_param); - notification = dmstrdup(notification); } else { - notification = dmstrdup(notifications[forced_notify].value); + notification = notifications[forced_notify].value; } add_list_paramameter(ctx, full_param, notification, NULL); ctx->faultcode = 0; @@ -873,7 +865,8 @@ static int set_notification_check_obj(DMOBJECT_API_ARGS) return FAULT_9009; add_set_list_tmp(ctx, ctx->in_param, ctx->in_notification); - } else if (ctx->setaction == VALUESET) { + } + else if (ctx->setaction == VALUESET) { set_parameter_notification(ctx->in_param, ctx->in_notification); } return 0; diff --git a/dm/dmtree/deviceinfo.c b/dm/dmtree/deviceinfo.c index 7c8099f..790d52c 100644 --- a/dm/dmtree/deviceinfo.c +++ b/dm/dmtree/deviceinfo.c @@ -105,7 +105,7 @@ int get_device_hardwareversion(char *refparam, struct dmctx *ctx, char **value) { db_get_value_string("hw", "board", "hardwareVersion", value); return 0; -} +} int get_device_routermodel(char *refparam, struct dmctx *ctx, char **value) { diff --git a/dm/dmtree/landevice.c b/dm/dmtree/landevice.c index 2127f87..5aa95e4 100644 --- a/dm/dmtree/landevice.c +++ b/dm/dmtree/landevice.c @@ -84,7 +84,7 @@ inline int init_ldargs_wlan(struct dmctx *ctx, struct uci_section *s, int wlctl_ ctx->args = (void *)args; args->lwlansection = s; args->wlctl_num = wlctl_num; - args->wunit = dmstrdup(wunit); + args->wunit = wunit; args->pki = pki; return 0; } @@ -93,10 +93,10 @@ inline int init_ldargs_eth_cfg(struct dmctx *ctx, char *eth) { struct ldethargs *args = &cur_ethargs; ctx->args = (void *)args; - args->eth = dmstrdup(eth); + args->eth = eth; } -int ip_to_int(char *address) +int ip_to_int(char *address) //TODO there is already standrard function { unsigned int res; char *pch; @@ -116,15 +116,17 @@ int ip_to_int(char *address) int get_lan_dns(char *refparam, struct dmctx *ctx, char **value) { json_object *res; + int len; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_parse_array(res, "dns-server", -1, NULL, value); TRACE("returned value after parse is %s\n", *value); - if ((*value)[strlen(*value) - 1] == ',') - (*value)[strlen(*value) -1] = '\0'; + len = strlen(*value) - 1; + if ((*value)[len] == ',') + (*value)[len] = '\0'; if ((*value)[0] == '\0') { dmuci_get_value_by_section_string(lanargs->ldlansection, "dns", value); //TODO REPLACE SPACE BY ',' @@ -147,11 +149,8 @@ int set_lan_dns(char *refparam, struct dmctx *ctx, int action, char *value) dmuci_set_value_by_section(&uci_ptr, lanargs->ldlansection, "dns", value);*/ // delay_service reload "network" "1" //TODO BY IBH // delay_service reload "dnsmasq" "1" //TODO BY IBH - bool b; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: //TODO BY IBH @@ -164,17 +163,17 @@ int get_lan_dhcp_server_configurable(char *refparam, struct dmctx *ctx, char **v { struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - struct uci_ptr ptr = {0}; + uci_foreach_option_eq("dhcp", "dhcp", "interface", section_name(lanargs->ldlansection), s) { if (s != NULL) { TRACE("section found s name %s section type is %s \n\n", s->e.name, s->type); - *value = dmstrdup("1"); + *value = "1"; return 0; } } if (s == NULL) { TRACE("no section found \n"); - *value = dmstrdup("0"); + *value = "0"; } return 0; } @@ -183,7 +182,9 @@ int set_lan_dhcp_server_configurable(char *refparam, struct dmctx *ctx, int acti { struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); + + //TODO switch action here VALUECHECK VALUESET???? uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL && value[0] == '0') { @@ -193,23 +194,19 @@ int set_lan_dhcp_server_configurable(char *refparam, struct dmctx *ctx, int acti } if (s == NULL && value[0] == '1') { char *str_value = NULL; - str_value = dmstrdup("dhcp"); + str_value = "dhcp"; dmuci_set_value("dhcp",lan_name, NULL, str_value);//check if the allocation for set value is made in uci_set_function dmuci_set_value("dhcp", lan_name, "interface", lan_name); - str_value = dmstrdup("100"); + str_value = "100"; dmuci_set_value("dhcp", lan_name, "start", str_value); - str_value = dmstrdup("150"); + str_value = "150"; dmuci_set_value("dhcp", lan_name, "limit", str_value); - str_value = dmstrdup("12h"); + str_value = "12h"; dmuci_set_value("dhcp", lan_name, "leasetime", str_value); } if (value[0] != '1' && value[0] != '0') { - dmfree(lan_name); return 0; } - //delay_service reload "network" "1" //TODO BY IBH - //delay_service reload "dnsmasq" "1" //TODO BY IBH - dmfree(lan_name); return 0; } @@ -217,22 +214,21 @@ int get_lan_dhcp_server_enable(char *refparam, struct dmctx *ctx, char **value) { struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { dmuci_get_value_by_section_string(s, "ignore", value); if ((*value)[0] == '\0') - *value = dmstrdup("1"); + *value = "1"; else - *value = dmstrdup("0"); + *value = "0"; } - break; + break; //TODO IMEN should explain } if (s == NULL) { - *value = dmstrdup("0"); + *value = "0"; } - dmfree(lan_name); return 0; } @@ -240,8 +236,10 @@ int set_lan_dhcp_server_enable(char *refparam, struct dmctx *ctx, int action, ch { struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); + //TODO switch action here VALUECHECK VALUESET???? + uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { if (value[0] == '1') @@ -253,9 +251,6 @@ int set_lan_dhcp_server_enable(char *refparam, struct dmctx *ctx, int action, ch } break; } - //delay_service reload "network" "1" //TODO BY IBH - //delay_service reload "dnsmasq" "1" - dmfree(lan_name); return 0; } @@ -264,7 +259,7 @@ int get_lan_dhcp_interval_address_start(char *refparam, struct dmctx *ctx, char json_object *res; char *ipaddr, *mask, *start , *limit; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); struct uci_section *s = NULL; uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { @@ -276,8 +271,8 @@ int get_lan_dhcp_interval_address_start(char *refparam, struct dmctx *ctx, char } } if (s == NULL) { - start = dmstrdup(""); - limit = dmstrdup(""); + start = ""; + limit = ""; } if (start[0] == '\0' || limit[0] == '\0') { goto end; @@ -297,17 +292,17 @@ int get_lan_dhcp_interval_address_start(char *refparam, struct dmctx *ctx, char dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); if (res) { json_select(res, "ipv4-address", 0, "mask", &mask, NULL); - mask = dmstrdup("TOCODE :`cidr2netmask $mask` "); + mask = "TOCODE :`cidr2netmask $mask` "; } } TRACE("start vaut mask %s \n", mask); if (mask[0] == '\0') { goto end; } - *value = dmstrdup("TOCODE"); //ipcalc.sh $ipaddr $mask $start $limit | sed -n "s/START=//p" + *value = "TOCODE"; //ipcalc.sh $ipaddr $mask $start $limit | sed -n "s/START=//p" return 0; end: - *value = dmstrdup(""); + *value = ""; return 0; } @@ -317,7 +312,7 @@ int get_lan_dhcp_interval_address_end(char *refparam, struct dmctx *ctx, char ** char *ipaddr, *mask, *start , *limit; struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { @@ -329,8 +324,8 @@ int get_lan_dhcp_interval_address_end(char *refparam, struct dmctx *ctx, char ** } TRACE("start vaut %s and limit vaut %s \n", start, limit); if (s == NULL) { - start = dmstrdup(""); - limit = dmstrdup(""); + start = ""; + limit = ""; } if (start[0] == '\0' || limit[0] == '\0') { goto end; @@ -348,26 +343,28 @@ int get_lan_dhcp_interval_address_end(char *refparam, struct dmctx *ctx, char ** if (mask[0] == '\0') { dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); json_select(res, "ipv4-address", 0, "mask", &mask, NULL); - mask = dmstrdup("TOCODE :`cidr2netmask $mask` "); + mask = "TOCODE :`cidr2netmask $mask` "; } TRACE("start vaut mask %s \n", mask); if (mask[0] == '\0') { goto end; } - *value = dmstrdup("TOCODE"); //ipcalc.sh $ipaddr $mask $start $limit | sed -n "s/END=//p" + *value = "TOCODE"; //ipcalc.sh $ipaddr $mask $start $limit | sed -n "s/END=//p" return 0; end: - *value = dmstrdup(""); + *value = ""; return 0; } int set_lan_dhcp_address_start(char *refparam, struct dmctx *ctx, int action, char *value) { + //TODO switch action here VALUECHECK VALUESET???? return 0; } int set_lan_dhcp_address_end(char *refparam, struct dmctx *ctx, int action, char *value) { + //TODO switch action here VALUECHECK VALUESET???? return 0; } @@ -378,7 +375,7 @@ int get_lan_dhcp_reserved_addresses(char *refparam, struct dmctx *ctx, char **va char *min, *max, *ip, *s_n_ip; unsigned int n_min, n_max, n_ip; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); get_lan_dhcp_interval_address_start(refparam, ctx, &min); get_lan_dhcp_interval_address_end(refparam, ctx, &max); @@ -401,19 +398,20 @@ int get_lan_dhcp_reserved_addresses(char *refparam, struct dmctx *ctx, char **va dmfree(s_n_ip); } } - *value = dmstrdup(val); + *value = dmstrdup(val); // MEM WILL BE FREED IN DMMEMCLEAN return 0; } int set_lan_dhcp_reserved_addresses(char *refparam, struct dmctx *ctx, int action, char *value) { + //TODO switch action here VALUECHECK VALUESET???? return 0; } int get_lan_dhcp_subnetmask(char *refparam, struct dmctx *ctx, char **value) { struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); char *mask; json_object *res; struct uci_section *s = NULL; @@ -425,21 +423,22 @@ int get_lan_dhcp_subnetmask(char *refparam, struct dmctx *ctx, char **value) } } if (s == NULL) - *value = dmstrdup(""); + *value = ""; if ((*value)[0] == '\0') dmuci_get_value_by_section_string(lanargs->ldlansection, "netmask", value); TRACE("next value is %s \n", *value); if ((*value)[0] == '\0') { dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "ipv4-address", 0, "mask", &mask, NULL); - *value = dmstrdup("TOCODE `cidr2netmask $mask`"); + *value = "TOCODE `cidr2netmask $mask`"; } return 0; } int set_lan_dhcp_subnetmask(char *refparam, struct dmctx *ctx, int action, char *value) { + //TODO switch action here VALUECHECK VALUESET???? return 0; } int get_lan_dhcp_iprouters(char *refparam, struct dmctx *ctx, char **value) @@ -447,7 +446,7 @@ int get_lan_dhcp_iprouters(char *refparam, struct dmctx *ctx, char **value) struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; dmuci_get_value_by_section_string(lanargs->ldlansection, "gateway", value); - if (*value[0] == '\0') { + if ((*value)[0] == '\0') { dmuci_get_value_by_section_string(lanargs->ldlansection, "ipaddr", value); } return 0; @@ -456,22 +455,20 @@ int get_lan_dhcp_iprouters(char *refparam, struct dmctx *ctx, char **value) int set_lan_dhcp_iprouters(char *refparam, struct dmctx *ctx, int action, char *value) { struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); + //TODO switch action here VALUECHECK VALUESET???? dmuci_set_value("network", lan_name, "gateway", value); - // delay_service reload "network" "1" - // delay_service restart "dnsmasq" "1" - dmfree(lan_name); return 0; } int get_lan_dhcp_leasetime(char *refparam, struct dmctx *ctx, char **value) { - int mtime = 60; - char *ltime = ""; + int len, mtime = 60; + char *ltime = ""; struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { @@ -480,40 +477,38 @@ int get_lan_dhcp_leasetime(char *refparam, struct dmctx *ctx, char **value) } } if (ltime[0] == '\0') { - *value = dmstrdup("-1"); + *value = "-1"; return 0; } - if (ltime[strlen(ltime)-1] != 'm') { + len = strlen(ltime)-1; + if (ltime[len] != 'm') { mtime = 3600; - if (ltime[strlen(ltime)-1] != 'h') { - *value = dmstrdup("0");//TO CHECK IF NO VALUE DO WE HAVE TO SET VALUE TO 0 - dmfree(ltime); + if (ltime[len] != 'h') { + *value = "0";//TO CHECK IF NO VALUE DO WE HAVE TO SET VALUE TO 0 return 0; } } - ltime[strlen(ltime)-1] = '\0'; - dmasprintf(value, "%d", (mtime * atoi(ltime)));//to check - dmfree(ltime); + ltime[len] = '\0'; + dmasprintf(*value, "%d", (mtime * atoi(ltime)));//TODO to check // MEM WILL BE FREED IN DMMEMCLEAN return 0; } int set_lan_dhcp_leasetime(char *refparam, struct dmctx *ctx, int action, char *value) { struct uci_section *s = NULL; + char buf[64]; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); + //TODO switch action here VALUECHECK VALUESET???? uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { - dmasprintf(&value, "%dm", (atoi(value) % 60)); - dmuci_set_value_by_section(s, "leasetime", value); + sprintf(buf, "%dm", (atoi(value) % 60)); + dmuci_set_value_by_section(s, "leasetime", buf); break; } } - // delay_service reload "network" "1" - // delay_service restart "dnsmasq" "1" - dmfree(lan_name); return 0; } @@ -524,12 +519,12 @@ int get_lan_dhcp_domainname(char *refparam, struct dmctx *ctx, char **value) struct uci_list *val; struct uci_section *s = NULL; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; - char *lan_name = dmstrdup(section_name(lanargs->ldlansection)); + char *lan_name = section_name(lanargs->ldlansection); uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s) { dmuci_get_value_by_section_list(s, "dhcp_option", &val); //val is a list - *value = dmstrdup("parcourir la liste"); //TODO BY IBH + *value = "parcourir la liste"; //TODO BY IBH /*TRACE("result is %s \n", result); pch = strtok(result," "); TRACE("pch is %s \n", pch); @@ -562,9 +557,11 @@ int set_lan_dhcp_domainname(char *refparam, struct dmctx *ctx, int action, char char *result, *dn, *pch; struct uci_list *val; struct uci_section *s = NULL; - char *option = dmstrdup("dhcp_option"); + char *option = "dhcp_option"; struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); + + //TODO switch action here VALUECHECK VALUESET???? uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { if (s != NULL) { @@ -591,11 +588,10 @@ int set_lan_dhcp_domainname(char *refparam, struct dmctx *ctx, int action, char int get_lan_host_nbr_entries(char *refparam, struct dmctx *ctx, char **value) { struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); //ubus call router clients | grep -c "\"network\": \"$flan\"" //TODO BY IBH - *value = dmstrdup("TOCODE"); - dmfree(lan_name); + *value = "TOCODE"; return 0; } /***************************************************************************/ @@ -613,22 +609,20 @@ int filter_lan_device_interface(struct uci_section *s, void *v) //check is physical //char *phy_int=`db get hw.board.ethernetLanPorts`; //TODO BY IBH //db_get_value("hw", "board", "ethernetLanPorts", &phy_itf); - phy_itf = dmstrdup("eth1 eth2 eth3 eth4"); + //TODO KMD: copy &phy_itf to a local buf + phy_itf = "eth1 eth2 eth3 eth4"; //TODO + phy_itf = dmstrdup(phy_itf); TRACE("end db_get_value\n"); pch = strtok(phy_itf," "); while (pch != NULL) { if (strstr(ifname, pch)) { - dmfree(ftype); - dmfree(ifname); dmfree(phy_itf); return 0; } pch = strtok(NULL, " "); } + dmfree(phy_itf); } - dmfree(ftype); - dmfree(ifname); - dmfree(phy_itf); return -1; } @@ -638,7 +632,6 @@ int filter_lan_ip_interface(struct uci_section *ss, void *v) char *value, *type; dmuci_get_value_by_section_string(ss, "type", &type); if (ss == lds) { - dmfree(type); return 0; } else if (strcmp(type, "alias") == 0) { @@ -660,17 +653,18 @@ int get_interface_enable_ubus(char *refparam, struct dmctx *ctx, char **value) { json_object *res; struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "up", 0, NULL, value, NULL); return 0; } int set_interface_enable_ubus(char *refparam, struct dmctx *ctx, int action, char *value) { + //TODO switch action here VALUECHECK VALUESET???? //TODO BY IBH return 0; } @@ -680,20 +674,19 @@ int get_interface_firewall_enabled(char *refparam, struct dmctx *ctx, char **val char *input = ""; struct uci_section *s = NULL; struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); uci_foreach_option_cont("firewall", "zone", "network", lan_name, s) { if (s != NULL) { dmuci_get_value_by_section_string(s, "input", &input); if (strcmp(input, "ACCEPT") !=0 && strcmp(input, "forward") !=0) { - *value = dmstrdup("1"); - dmfree(input); + *value = "1"; return 0; } - break; //TO CHECK + break; //TODO TO CHECK } } - *value = dmstrdup("0"); + *value = "0"; return 0; } @@ -709,6 +702,7 @@ struct uci_section *create_firewall_zone_config(char *fwl, char *iface, char *in dmuci_set_value_by_section(s, "forward", forward); dmuci_set_value_by_section(s, "output", output); dmuci_set_value_by_section(s, "network", iface); + dmfree(name); return s; } @@ -717,12 +711,14 @@ int set_interface_firewall_enabled(char *refparam, struct dmctx *ctx, int action int cnt = 0; struct uci_section *s = NULL; struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); + //TODO switch action here VALUECHECK VALUESET???? + if (value[0] == '1') - value = dmstrdup("DROP"); + value = "DROP"; else if (value[0] == '0') - value = dmstrdup("ACCEPT"); + value = "ACCEPT"; else return 0; uci_foreach_option_cont("firewall", "zone", "network", lan_name, s) { @@ -744,18 +740,16 @@ int get_interface_ipaddress(char *refparam, struct dmctx *ctx, char **value) char *proto; json_object *res; struct ldipargs *ipargs = (struct ldipargs *)ctx->args;//TO CHECK - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); dmuci_get_value_by_section_string(ipargs->ldipsection, "proto", &proto); if (strcmp(proto, "static") == 0) dmuci_get_value_by_section_string(ipargs->ldipsection, "ipaddr", value); else { dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "ipv4-address", 0, "address", value, NULL); } - dmfree(lan_name); - dmfree(proto); return 0; } @@ -763,12 +757,12 @@ int set_interface_ipaddress(char *refparam, struct dmctx *ctx, int action, char { struct ldipargs *ipargs = (struct ldipargs *)ctx->args; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + //TODO switch action here VALUECHECK VALUESET???? + + char *lan_name = section_name(ipargs->ldipsection); if (value[0] != '\0') { dmuci_set_value_by_section(ipargs->ldipsection, "ipaddr", value); - //delay_service reload "network" "1" //TODO BY IBH } - dmfree(lan_name); return 0; } @@ -778,7 +772,7 @@ int get_interface_subnetmask(char *refparam, struct dmctx *ctx, char **value) char *proto; char *val = NULL; json_object *res; - char *lan_name = dmstrdup(section_name(ipargs->ldipsection)); + char *lan_name = section_name(ipargs->ldipsection); dmuci_get_value_by_section_string(ipargs->ldipsection, "proto", &proto); if (strcmp(proto, "static") == 0) @@ -786,11 +780,8 @@ int get_interface_subnetmask(char *refparam, struct dmctx *ctx, char **value) else { dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); json_select(res, "ipv4-address", 0, "mask", &val, NULL); - *value = dmstrdup("cidr2netmask $val"); //TODO ADD THIS FUNCTION - dmfree(val); + *value = "cidr2netmask $val"; //TODO ADD THIS FUNCTION } - dmfree(proto); - dmfree(lan_name); return 0; } @@ -798,9 +789,10 @@ int set_interface_subnetmask(char *refparam, struct dmctx *ctx, int action, char { struct ldipargs *ipargs = (struct ldipargs *)ctx->args; + //TODO switch action here VALUECHECK VALUESET???? + if (value[0] != '\0') { dmuci_set_value_by_section(ipargs->ldipsection, "netmask", value); - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -811,9 +803,9 @@ int get_interface_addressingtype (char *refparam, struct dmctx *ctx, char **valu dmuci_get_value_by_section_string(ipargs->ldipsection, "proto", value); if (strcmp(*value, "static") == 0) - *value = dmstrdup("Static"); + *value = "Static"; else if (strcmp(*value, "dhcp") == 0) - *value = dmstrdup("DHCP"); + *value = "DHCP"; return 0; } @@ -821,13 +813,14 @@ int set_interface_addressingtype(char *refparam, struct dmctx *ctx, int action, { struct ldipargs *ipargs = (struct ldipargs *)ctx->args; + //TODO switch action here VALUECHECK VALUESET???? + if (strcmp(value, "Static") == 0) dmuci_set_value_by_section(ipargs->ldipsection, "proto", "static"); else if (strcmp(value, "DHCP") == 0) dmuci_set_value_by_section(ipargs->ldipsection, "proto", "dhcp"); else return 0; - //delay_service reload "network" "1" //TODO BY IBH return 0; } @@ -842,10 +835,9 @@ int get_dhcpstaticaddress_enable (char *refparam, struct dmctx *ctx, char **valu dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac", &mac); if (strcmp (mac, DHCPSTATICADDRESS_DISABLED_CHADDR) == 0) - *value = dmstrdup("0"); + *value = "0"; else - *value = dmstrdup("1"); - dmfree(mac); + *value = "1"; return 0; } @@ -854,14 +846,14 @@ int set_dhcpstaticaddress_enable(char *refparam, struct dmctx *ctx, int action, char *chaddr; struct lddhcpargs *dhcpargs = (struct lddhcpargs *)ctx->args; + //TODO switch action here VALUECHECK VALUESET???? + dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac", &chaddr); if (value[0] == '1' && value[1] == '\0') { if (strcmp(chaddr, DHCPSTATICADDRESS_DISABLED_CHADDR) == 0) { char *orig_chaddr; dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac_orig", &orig_chaddr); dmuci_set_value_by_section(dhcpargs->lddhcpsection, "mac", orig_chaddr); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "dnsmasq" "1" //TODO BY IBH } else { return 0; } @@ -873,8 +865,6 @@ int set_dhcpstaticaddress_enable(char *refparam, struct dmctx *ctx, int action, dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac_orig", &orig_chaddr); dmuci_set_value_by_section(dhcpargs->lddhcpsection, "mac_orig", orig_chaddr); dmuci_set_value_by_section(dhcpargs->lddhcpsection, "mac", DHCPSTATICADDRESS_DISABLED_CHADDR); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "dnsmasq" "1" //TODO BY IBH } } return 0; @@ -889,21 +879,17 @@ int get_dhcpstaticaddress_chaddr(char *refparam, struct dmctx *ctx, char **value if (strcmp(chaddr, DHCPSTATICADDRESS_DISABLED_CHADDR) == 0) dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac_orig", value); else - *value = dmstrdup(chaddr); - dmfree(chaddr); + *value = chaddr; return 0; } int set_dhcpstaticaddress_chaddr(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *chaddr; struct lddhcpargs *dhcpargs = (struct lddhcpargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "mac", &chaddr); @@ -911,9 +897,6 @@ int set_dhcpstaticaddress_chaddr(char *refparam, struct dmctx *ctx, int action, dmuci_set_value_by_section(dhcpargs->lddhcpsection, "mac_orig", value); else dmuci_set_value_by_section(dhcpargs->lddhcpsection, "mac", value); - dmfree(chaddr); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "dnsmasq" "1" //TODO BY IBH } return 0; } @@ -928,18 +911,13 @@ int get_dhcpstaticaddress_yiaddr(char *refparam, struct dmctx *ctx, char **value int set_dhcpstaticaddress_yiaddr(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct lddhcpargs *dhcpargs = (struct lddhcpargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_set_value_by_section(dhcpargs->lddhcpsection, "ip", value); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "dnsmasq" "1" //TODO BY IBH } return 0; } @@ -959,18 +937,19 @@ int get_lan_ethernet_interfaces(char *ndev, char *iface[], int var, int *length) dmastrcat(&name, "br-", ndev); dmubus_call("network.device", "status", UBUS_ARGS{{"name", name}}, 1, &res); //TO CHECK WITH FETEN IF NO RES !!!!!! + //TODO DM UBUS ASSERT if (res == NULL) { - iface[0] = dmstrdup(ndev); - dmfree(name); + iface[0] = ndev; i++; return 0; } else { json_select(res, "bridge-members", -1, NULL, &value, NULL); + value = dmstrdup(value); // MEM WILL BE FREED IN DMMEMCLEAN char *pch = strtok(value,","); while (pch != NULL) { if (strstr(pch, "eth") && !strstr(pch, ".")) { TRACE("pch is %s \n", pch); - iface[i] = dmstrdup(pch); + iface[i] = pch; i++; } pch = strtok(NULL, ","); @@ -987,16 +966,16 @@ int get_lan_eth_iface_cfg_enable(char *refparam, struct dmctx *ctx, char **value //dmuci_get_value_by_section_string(dhcpargs->lddhcpsection, "ip", value); dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res); //TO CHECK WITH FETEN IF NO RES !!!!!! - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); int i = json_select(res, "link", -1, NULL, value, NULL); if (i == -1) - *value = dmstrdup(""); + *value = ""; return 0; } int set_lan_eth_iface_cfg_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldethargs *ethargs = (struct ldethargs *)ctx->args; switch (action) { @@ -1005,10 +984,10 @@ int set_lan_eth_iface_cfg_enable(char *refparam, struct dmctx *ctx, int action, return FAULT_9007; return 0; VALUESET: - if (value[0] == '1' && value[1] == '\0') { + if (b) { TRACE("ethctl ethargs->eth phy-power up"); //LINUX CMD } - else if (value[0] == '0' && value[1] == '\0') { + else { TRACE("ethctl ethargs->eth phy-power down"); //LINUX CMD } } @@ -1021,17 +1000,18 @@ int get_lan_eth_iface_cfg_status(char *refparam, struct dmctx *ctx, char **value get_lan_eth_iface_cfg_enable(refparam, ctx, value); if ((*value)[0] == '\0') - *value = dmstrdup("Disabled"); + *value = "Disabled"; else if ((*value)[0] == '1' && (*value)[1] == '\0') - *value = dmstrdup("Up"); + *value = "Up"; else - *value = dmstrdup("Disabled"); + *value = "Disabled"; return 0; } int get_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, char **value) { - char *pch; + char *pch, *v; + int len; struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmuci_get_option_value_string("ports", "@ethports[0]", ethargs->eth, value); @@ -1039,11 +1019,13 @@ int get_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, char **v return 0; else { if (strcmp(*value, "auto") == 0) - *value = dmstrdup("Auto"); + *value = "Auto"; else { - pch = strtok(dmstrdup(*value),"FHfh"); - if ((*value)[strlen(pch) +1] == 'D' || (*value)[strlen(pch) +1] == 'd') - *value = dmstrdup(pch); + v = dmstrdup(*value); // MEM WILL BE FREED IN DMMEMCLEAN + pch = strtok(v, "FHfh"); + len = strlen(pch) + 1; + if ((*value)[len] == 'D' || (*value)[len] == 'd') + *value = pch; } } return 0; @@ -1051,15 +1033,12 @@ int get_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, char **v int set_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *val = NULL; char *duplex; struct ldethargs *ethargs = (struct ldethargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: if (strcasecmp(value, "auto") == 0) { @@ -1068,80 +1047,79 @@ int set_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, int acti } else { dmuci_get_option_value_string("ports", "@ethports[0]", ethargs->eth, &duplex); if (strcmp(duplex, "auto") == 0) - duplex = dmstrdup("FD"); - else - duplex = strtok(duplex,"FHfh"); + duplex = "FD"; + else { + if (strstr(duplex, "FD")) + duplex = "FD"; + else if (strstr(duplex, "HD")) + duplex = "HD"; + else + duplex = "FD"; + } dmastrcat(&val, value, duplex); - dmfree(duplex); dmuci_set_value("ports", "@ethports[0]", ethargs->eth, val); + dmfree(val); } - dmfree(val); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "port_management" "1" //TODO BY IBH + } return 0; } int get_lan_eth_iface_cfg_duplexmode(char *refparam, struct dmctx *ctx, char **value) { - char *tmp, *duplex, *tmp1; + char *tmp; struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmuci_get_option_value_string("ports", "@ethports[0]", ethargs->eth, &tmp); if (strcmp(tmp, "auto") == 0) { - *value = dmstrdup("Auto"); - dmfree(tmp); + *value = "Auto"; } else if (tmp[0] == '\0') { - *value = dmstrdup(""); + *value = ""; } else { - tmp1 =dmstrdup(tmp); - duplex = strtok(tmp1,"FHfh"); - tmp += strlen(duplex); - if ((tmp[0] == 'H' || tmp[0] == 'h')) { - if ((tmp[1] == 'D' || tmp[1] == 'd')) - *value = dmstrdup("Half"); - } - else if ((tmp[0] == 'F' || tmp[0] == 'f')) { - if ((tmp[1] == 'D' || tmp[1] == 'd')) - *value = dmstrdup("Full"); - } + if (strstr(tmp, "FD")) + *value = "Full"; + else if (strstr(tmp, "HD")) + *value = "Half"; + else + *value = ""; } return 0; } int set_lan_eth_iface_cfg_duplexmode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; - char *rate, *val; + char *m, *rate, *val = NULL; struct ldethargs *ethargs = (struct ldethargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: if (strcasecmp(value, "auto") == 0) { dmuci_set_value("ports", "@ethports[0]", ethargs->eth, "auto"); return 0; } - dmuci_get_option_value_string("ports", "@ethports[0]", ethargs->eth, &rate); + dmuci_get_option_value_string("ports", "@ethports[0]", ethargs->eth, &m); + m = dmstrdup(m); + rate = m; if (strcmp(rate, "auto") == 0) - rate = dmstrdup("100"); - else + rate = "100"; + else { strtok(rate, "FHfh"); + } if (strcmp(value, "full") == 0) dmastrcat(&val, rate, "FD"); else if (strcmp(value, "half") == 0) - dmastrcat(&val, rate, "FD"); - else + dmastrcat(&val, rate, "HD"); + else { + dmfree(m); return 0; + } dmuci_set_value("ports", "@ethports[0]", ethargs->eth, val); + dmfree(m); dmfree(val); - //delay_service reload "network" "1" //TODO BY IBH - //delay_service restart "port_management" "1" //TODO BY IBH } return 0; } @@ -1152,7 +1130,7 @@ int get_lan_eth_iface_cfg_stats_tx_bytes(char *refparam, struct dmctx *ctx, char struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "tx_bytes", value, NULL); return 0; } @@ -1163,7 +1141,7 @@ int get_lan_eth_iface_cfg_stats_rx_bytes(char *refparam, struct dmctx *ctx, char struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "rx_bytes", value, NULL); return 0; } @@ -1174,7 +1152,7 @@ int get_lan_eth_iface_cfg_stats_tx_packets(char *refparam, struct dmctx *ctx, ch struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "tx_packets", value, NULL); return 0; } @@ -1185,7 +1163,7 @@ int get_lan_eth_iface_cfg_stats_rx_packets(char *refparam, struct dmctx *ctx, ch struct ldethargs *ethargs = (struct ldethargs *)ctx->args; dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "rx_packets", value, NULL); return 0; } @@ -1232,14 +1210,10 @@ int entry_method_root_LANDevice(struct dmctx *ctx) //DMOBJECT(DMROOT"LANDevice.%s.", ctx, "0", 1, NULL, NULL, NULL, DMINSTANCES(idev, idev2)); init_ldargs_lan(ctx, s); idev = update_instance(s, cur_idev, "ldinstance"); - TRACE("idev vaut %s cur %s\n", idev, cur_idev); DMOBJECT(DMROOT"LANDevice.%s.", ctx, "0", 0, NULL, NULL, NULL, idev); DMOBJECT(DMROOT"LANDevice.%s.LANHostConfigManagement.", ctx, "0", 1, NULL, NULL, NULL, idev); - TRACE(); DMPARAM("DNSServers", ctx, "1", get_lan_dns, set_lan_dns, "", 0, 0, UNDEF, NULL); - TRACE(); DMPARAM("DHCPServerConfigurable", ctx, "1", get_lan_dhcp_server_configurable, set_lan_dhcp_server_configurable, "xsd:boolean", 0, 0, UNDEF, NULL); - TRACE(); DMPARAM("DHCPServerEnable", ctx, "1", get_lan_dhcp_server_enable, set_lan_dhcp_server_enable, "xsd:boolean", 0, 0, UNDEF, NULL); DMPARAM("MinAddress", ctx, "1", get_lan_dhcp_interval_address_start, set_lan_dhcp_address_start, "", 0, 0, UNDEF, NULL); DMPARAM("MaxAddress", ctx, "1", get_lan_dhcp_interval_address_end, set_lan_dhcp_address_end, "", 0, 0, UNDEF, NULL); @@ -1252,27 +1226,28 @@ int entry_method_root_LANDevice(struct dmctx *ctx) DMPARAM("HostNumberOfEntries", ctx, "0", get_lan_host_nbr_entries, NULL, "xsd:unsignedInt", 0, 0, UNDEF, NULL); DMOBJECT(DMROOT"LANDevice.%s.LANHostConfigManagement.IPInterface.", ctx, "0", 1, NULL, NULL, NULL, idev); DMOBJECT(DMROOT"LANDevice.%s.LANHostConfigManagement.DHCPStaticAddress.", ctx, "1", 1, NULL, NULL, NULL, idev); + cur_ilan = NULL; uci_foreach_filter_func("network", "interface", s, filter_lan_ip_interface, ss) { ilan = update_instance(ss, cur_ilan, "lipinstance"); init_ldargs_ip(ctx, ss); SUBENTRY(get_landevice_lanhostconfigmanagement_ipinterface, ctx, idev, ilan); //ndev is not used //nlan can be passed as + cur_idhcp = NULL; uci_foreach_option_cont("dhcp", "dhcp", "interface", section_name(ss), sss) { idhcp = update_instance(sss, cur_idhcp, "ldhcpinstance"); init_ldargs_dhcp(ctx, sss); SUBENTRY(get_landevice_lanhostconfigmanagement_dhcpstaticaddress, ctx, idev, idhcp); - if (cur_idhcp) - dmfree(cur_idhcp); + dmfree(cur_idhcp); cur_idhcp = dmstrdup(idhcp); - dmfree(idhcp); } - if (cur_ilan) - dmfree(cur_ilan); - cur_idhcp = dmstrdup(ilan); - dmfree(ilan); + dmfree(cur_idhcp); + dmfree(cur_ilan); + cur_ilan = dmstrdup(ilan); } + dmfree(cur_ilan); DMOBJECT(DMROOT"LANDevice.%s.WLANConfiguration.", ctx, "0", 0, NULL, NULL, NULL, idev); uci_foreach_sections("wireless", "wifi-device", ss) { int wlctl_num=0; + cur_iwlan = NULL; uci_foreach_option_eq("wireless", "wifi-iface", "device", section_name(ss), sss) { dmuci_get_value_by_section_string(sss, "network", &network); if (strcmp(network, section_name(s)) != 0) //CHECK IF ndev is equal to section_name(s) @@ -1280,11 +1255,10 @@ int entry_method_root_LANDevice(struct dmctx *ctx) iwlan = update_instance(sss, cur_iwlan, "lwlaninstance"); init_ldargs_wlan(ctx, sss, wlctl_num++, section_name(ss), 0); SUBENTRY(get_landevice_wlanconfiguration_generic, ctx, idev, iwlan); //TODO IS IT BETTER TO PASS WUNIT AS ARGUMENT - if (cur_iwlan) - dmfree(cur_iwlan); + dmfree(cur_iwlan); cur_iwlan = dmstrdup(iwlan); - dmfree(iwlan); //TO CHECK IF WE USE DMFREE --> SEGMENTATION FAULT } + dmfree(cur_iwlan); } /* TO CHECK */ DMOBJECT(DMROOT"LANDevice.%s.LANEthernetInterfaceConfig.", ctx, "0", 1, NULL, NULL, NULL, idev); @@ -1294,10 +1268,8 @@ int entry_method_root_LANDevice(struct dmctx *ctx) sprintf(ieth_buf, "%d", ieth + 1); SUBENTRY(get_landevice_ethernet_interface_config, ctx, idev, ieth_buf); } - if (cur_idev) - dmfree(cur_idev); + dmfree(cur_idev); cur_idev = dmstrdup(idev); - dmfree(idev); //TO CHECK IF WE USE DMFREE --> SEGMENTATION FAULT } dmfree(cur_idev); return 0; @@ -1308,23 +1280,24 @@ int entry_method_root_LANDevice(struct dmctx *ctx) /************************************************************************************** **** **** ****function related to get_landevice_wlanconfiguration_generic **** ******** ***************************************************************************************/ -int get_wlan_enable (char *refparam, struct dmctx *ctx, char **value) +int get_wlan_enable(char *refparam, struct dmctx *ctx, char **value) { int i; char *val; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_value_by_section_string(wlanargs->lwlansection, "disabled", &val); - if (val[0] != '\0') - dmasprintf(value, "%d", atoi(val)-1); //TO CHECK - else - *value = dmstrdup(""); + + if (val[0] == '0') + *value = "1"; + else + *value = "0"; return 0; } int set_wlan_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: @@ -1332,9 +1305,11 @@ int set_wlan_enable(char *refparam, struct dmctx *ctx, int action, char *value) return FAULT_9007; return 0; VALUESET: - dmasprintf(&value, "%d", atoi(value)-1); + if (b) + value = "0"; + else + value = "1"; dmuci_set_value_by_section(wlanargs->lwlansection, "disabled", value); - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -1345,22 +1320,23 @@ int get_wlan_status (char *refparam, struct dmctx *ctx, char **value) dmuci_get_value_by_section_string(wlanargs->lwlansection, "disabled", value); if (*value[0] == '1' && *value[1] == '\0') - *value = dmstrdup("Disabled"); + *value = "Disabled"; else - *value = dmstrdup("Up"); + *value = "Up"; return 0; } int get_wlan_bssid (char *refparam, struct dmctx *ctx, char **value) { - char *wunit; + char *wunit, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - dmuci_get_value_by_section_string(wlanargs->lwlansection, "device", &wunit); + dmuci_get_value_by_section_string(wlanargs->lwlansection, "device", &wunit); //TODO KMD if (wlanargs->wlctl_num != 0) { - dmasprintf(&wunit, "%s.%d", wunit, wlanargs->wlctl_num); + sprintf(buf, "%s.%d", wunit, wlanargs->wlctl_num); + wunit = buf; } - *value = dmstrdup("`/usr/sbin/wlctl -i $wunit bssid`"); //TODO GET THE EQUIVALENT UBUS CMD OR LINUX CMD + *value = "`/usr/sbin/wlctl -i $wunit bssid`"; //TODO GET THE EQUIVALENT UBUS CMD OR LINUX CMD return 0; } @@ -1374,16 +1350,12 @@ int get_wlan_max_bit_rate (char *refparam, struct dmctx *ctx, char **value) int set_wlan_max_bit_rate(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: - //delay_service reload "network" "1" dmuci_set_value("wireless", wlanargs->wunit, "hwmode", value); } return 0; @@ -1394,23 +1366,19 @@ int get_wlan_channel(char *refparam, struct dmctx *ctx, char **value) struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_option_value_string("wireless", wlanargs->wunit, "channel", value); - if (strcmp(*value, "auto") == 0 || value[0] == '\0') - *value = dmstrdup("`/usr/sbin/wlctl -i $wunit channel|grep \"target channel\"|awk -F ' ' '{print$3}'`"); //TODO LINUX EQUIVALENT COMMANDE + if (strcmp(*value, "auto") == 0 || (*value)[0] == '\0') + *value = "`/usr/sbin/wlctl -i $wunit channel|grep \"target channel\"|awk -F ' ' '{print$3}'`"; //TODO LINUX EQUIVALENT COMMAND return 0; } int set_wlan_channel(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: - //delay_service reload "network" "1" //TODO BY IBH dmuci_set_value("wireless", wlanargs->wunit, "channel", value); } return 0; @@ -1421,16 +1389,16 @@ int get_wlan_auto_channel_enable(char *refparam, struct dmctx *ctx, char **value struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_option_value_string("wireless", wlanargs->wunit, "channel", value); - if (strcmp(*value, "auto") == 0 || value[0] == '\0') - *value = dmstrdup("1"); + if (strcmp(*value, "auto") == 0 || (*value)[0] == '\0') + *value = "1"; else - *value = dmstrdup("0"); + *value = "0"; return 0; } int set_wlan_auto_channel_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { @@ -1439,12 +1407,11 @@ int set_wlan_auto_channel_enable(char *refparam, struct dmctx *ctx, int action, return FAULT_9007; return 0; VALUESET: - if (value[0] == '1' && value[1] == '\0') - value = dmstrdup("auto"); - else if (value[0] == '0' && value[1] == '\0') - value = dmstrdup("`/usr/sbin/wlctl -i $wunit channel|grep \"target channel\"|awk -F ' ' '{print$3}'`");//TODO LINUX EQUIVALENT COMMANDE + if (b) + value = "auto"; + else + value = "`/usr/sbin/wlctl -i $wunit channel|grep \"target channel\"|awk -F ' ' '{print$3}'`";//TODO LINUX EQUIVALENT COMMANDE dmuci_set_value("wireless", wlanargs->wunit, "channel", value); - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -1459,16 +1426,12 @@ int get_wlan_ssid(char *refparam, struct dmctx *ctx, char **value) int set_wlan_ssid(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: - //delay_service reload "network" "1" //TODO BY IBH dmuci_set_value_by_section(wlanargs->lwlansection, "ssid", value); } return 0; @@ -1480,21 +1443,20 @@ int get_wlan_beacon_type(char *refparam, struct dmctx *ctx, char **value) dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", value); if (strcmp(*value, "none") == 0) - *value = dmstrdup("None"); + *value = "None"; else if (strcmp(*value, "wep-shared") == 0 || strcmp(*value, "wep-open") == 0) - *value = dmstrdup("Basic"); + *value = "Basic"; else if (strcmp(*value, "psk") == 0 || strcmp(*value, "psk+") == 0 || strcmp(*value, "wpa") == 0) - *value = dmstrdup("WPA"); + *value = "WPA"; else if (strcmp(*value, "psk2") == 0 || strcmp(*value, "psk2+") == 0 || strcmp(*value, "wpa2") == 0) - *value = dmstrdup("11i"); + *value = "11i"; else if (strcmp(*value, "mixed-psk") == 0 || strcmp(*value, "mixed-psk+") == 0 || strcmp(*value, "mixed-wpa") == 0) - *value = dmstrdup("WPAand11i"); + *value = "WPAand11i"; return 0; } int reset_wlan(struct uci_section *s) { - //dmuci_delete_by_section(struct uci_ptr *ptr, struct uci_section *s, char *option, char *value) dmuci_delete_by_section(s, "gtk_rekey", NULL); dmuci_delete_by_section(s, "wps_pbc", NULL); dmuci_delete_by_section(s, "key", NULL); @@ -1510,79 +1472,82 @@ int reset_wlan(struct uci_section *s) char *get_nvram_wpakey() { FILE* fp = NULL; - char *wpakey = NULL; + char wpakey[64]; fp = fopen(NVRAM_FILE, "r"); if (fp != NULL) { - fgets(wpakey, TAILLE_MAX, fp); + fgets(wpakey, 64, fp); fclose(fp); - return wpakey; + return dmstrdup(wpakey); } return NULL; } int set_wlan_beacon_type(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *) ctx->args; char *encryption, *option; char strk64[4][11]; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(value, "None") != 0) { - value = dmstrdup("none"); + value = "none"; reset_wlan(wlanargs->lwlansection); dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", value); } else if (strcmp(value, "Basic") == 0) { - value = dmstrdup("wep-open"); + value = "wep-open"; if (strcmp(encryption, "wep-shared") != 0 && strcmp(encryption, "wep-open") != 0) { reset_wlan(wlanargs->lwlansection); dmuci_set_value_by_section(wlanargs->lwlansection, "key", "1"); wepkey64("Inteno", strk64); int i = 0; - while (i<4) { + while (i < 4) { dmasprintf(&option, "key%d", i + 1); - dmuci_set_value_by_section(wlanargs->lwlansection, option, strk64[i]); + dmuci_set_value_by_section(wlanargs->lwlansection, option, strk64[i++]); dmfree(option); i++; } } - dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "value"); + dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", value); } else if(strcmp(value, "WPA") == 0) { - value = dmstrdup("psk"); + value = "psk"; char *encryption; dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (!strstr(encryption, "psk")){ reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); + dmfree(gnw); } - dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "value"); + dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", value); } else if(strcmp(value, "11i") == 0) { - value = dmstrdup("psk2"); + value = "psk2"; if (!strstr(encryption, "psk")){ reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "value"); } else if(strcmp(value, "WPAand11i") == 0) { - value = dmstrdup("mixed-psk"); + value = "mixed-psk"; if (!strstr(encryption, "psk")){ reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "value"); } @@ -1597,15 +1562,15 @@ int get_wlan_mac_control_enable(char *refparam, struct dmctx *ctx, char **value) char *macfilter; dmuci_get_value_by_section_string(wlanargs->lwlansection, "macfilter", &macfilter); if (macfilter[0] != '0') - *value = dmstrdup("1"); + *value = "1"; else - *value = dmstrdup("0"); + *value = "0"; return 0; } int set_wlan_mac_control_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { @@ -1614,11 +1579,10 @@ int set_wlan_mac_control_enable(char *refparam, struct dmctx *ctx, int action, c return FAULT_9007; return 0; VALUESET: - if (value[0] == '1') - value[0] = '2'; + if (b) + value = "2"; else - value[0] = '0'; - //delay_service reload "network" "1" //TODO BY IBH + value = "0"; dmuci_set_value_by_section(wlanargs->lwlansection, "macfilter", value); } return 0; @@ -1629,36 +1593,34 @@ int get_wlan_standard(char *refparam, struct dmctx *ctx, char **value) struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; if (strcmp(wlanargs->wunit, "11b") == 0) - *value = dmstrdup("b"); + *value = "b"; else if (strcmp(wlanargs->wunit, "11bg") == 0) - *value = dmstrdup("g"); + *value = "g"; else if (strcmp(wlanargs->wunit, "11g") == 0 || strcmp(wlanargs->wunit, "11gst") == 0 || strcmp(wlanargs->wunit, "11lrs") == 0) - *value = dmstrdup("g-only"); + *value = "g-only"; else if (strcmp(wlanargs->wunit, "11n") == 0 || strcmp(wlanargs->wunit, "auto") == 0) - *value = dmstrdup("n"); + *value = "n"; + else + *value = ""; return 0; } int set_wlan_standard(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: if (strcmp(value, "b") == 0) - value = dmstrdup("11b"); - if (strcmp(value, "g") == 0) - value = dmstrdup("11bg"); - if (strcmp(value, "g-only") == 0) - value = dmstrdup("11g"); - if (strcmp(value, "n") == 0) - value = dmstrdup("auto"); - // delay_service reload "network" "1" //TODO BY IBH + value = "11b"; + else if (strcmp(value, "g") == 0) + value = "11bg"; + else if (strcmp(value, "g-only") == 0) + value = "11g"; + else if (strcmp(value, "n") == 0) + value = "auto"; dmuci_set_value("wireless", wlanargs->wunit, "hwmode", value); } return 0; @@ -1672,21 +1634,18 @@ int get_wlan_wep_key_index(char *refparam, struct dmctx *ctx, char **value) if (strcmp(encryption, "wep-shared") == 0) dmuci_get_value_by_section_string(wlanargs->lwlansection, "key", value); else - *value = dmstrdup(""); + *value = ""; return 0; } int set_wlan_wep_key_index(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *option, *encryption; char strk64[4][11]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); @@ -1697,12 +1656,12 @@ int set_wlan_wep_key_index(char *refparam, struct dmctx *ctx, int action, char * dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "wep-open"); wepkey64("Inteno", strk64); int i = 0; - while (i < 4) { - dmasprintf(&option, "key%d", i + 1); - dmuci_set_value_by_section(wlanargs->lwlansection, option, strk64[i]); - dmfree(option); - i++; - } + while (i < 4) { + dmasprintf(&option, "key%d", i + 1); + dmuci_set_value_by_section(wlanargs->lwlansection, option, strk64[i]); + dmfree(option); + i++; + } } dmuci_set_value_by_section(wlanargs->lwlansection, "key", value); } @@ -1711,19 +1670,15 @@ int set_wlan_wep_key_index(char *refparam, struct dmctx *ctx, int action, char * int set_wlan_key_passphrase(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *option, *encryption; char strk64[4][11]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); - //delay_service reload "network" "1" // TODO if (strcmp(encryption, "wep-shared") == 0 || strcmp(encryption, "wep-open") == 0) { wepkey64("Inteno", strk64); int i = 0; @@ -1732,18 +1687,18 @@ int set_wlan_key_passphrase(char *refparam, struct dmctx *ctx, int action, char dmuci_set_value_by_section(wlanargs->lwlansection, option, strk64[i]); dmfree(option); i++; - } + } } else if (strcmp(encryption, "none") == 0) - return -1; //TO CHECK + return -1; //TODO CHECK else - set_wlan_pre_shared_key(refparam, ctx, action, value); //TO CHECK + set_wlan_pre_shared_key(refparam, ctx, action, value); //TODO CHECK } return 0; } int get_wlan_wep_encryption_level(char *refparam, struct dmctx *ctx, char **value) { - *value = dmstrdup("40-bit, 104-bit"); + *value = "40-bit, 104-bit"; return 0; } @@ -1754,9 +1709,9 @@ int get_wlan_basic_encryption_modes(char *refparam, struct dmctx *ctx, char **va dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(encryption, "wep-shared") == 0 || strcmp(encryption, "wep-open") == 0) - *value = dmstrdup("WEPEncryption"); + *value = "WEPEncryption"; else - *value = dmstrdup("None"); + *value = "None"; return 0; } @@ -1769,8 +1724,6 @@ int set_wlan_basic_encryption_modes(char *refparam, struct dmctx *ctx, int actio switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); @@ -1792,7 +1745,6 @@ int set_wlan_basic_encryption_modes(char *refparam, struct dmctx *ctx, int actio reset_wlan(wlanargs->lwlansection); dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "none"); } - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -1804,23 +1756,20 @@ int get_wlan_basic_authentication_mode(char *refparam, struct dmctx *ctx, char * dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(encryption, "wep-shared") == 0) - *value = dmstrdup("SharedAuthentication"); + *value = "SharedAuthentication"; else - *value = dmstrdup("None"); + *value = "None"; return 0; } int set_wlan_basic_authentication_mode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *encryption, *option; char strk64[4][11]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); @@ -1843,8 +1792,7 @@ int set_wlan_basic_authentication_mode(char *refparam, struct dmctx *ctx, int ac reset_wlan(wlanargs->lwlansection); dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "none"); } - //delay_service reload "network" "1" //TODO BY IBH - } + } return 0; } @@ -1855,52 +1803,54 @@ int get_wlan_wpa_encryption_modes(char *refparam, struct dmctx *ctx, char **valu dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(encryption, "psk+tkip") == 0 || strcmp(encryption, "mixed-psk+tkip") == 0) - *value = dmstrdup("TKIPEncryption"); + *value = "TKIPEncryption"; else if (strcmp(encryption, "psk+ccmp") == 0 || strcmp(encryption, "mixed-psk+ccmp") == 0) - *value = dmstrdup("AESEncryption"); + *value = "AESEncryption"; else if (strcmp(encryption, "psk+tkip+ccmp") == 0 || strcmp(encryption, "mixed-psk+tkip+ccmp") == 0) - *value = dmstrdup("TKIPandAESEncryption"); + *value = "TKIPandAESEncryption"; return 0; } int set_wlan_wpa_encryption_modes(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *encryption; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(value, "TKIPEncryption") == 0) { if(!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk+tkip"); } else if (strcmp(value, "AESEncryption") == 0) { if(!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk+ccmp"); } else if (strcmp(value, "TKIPandAESEncryption") == 0) { if(!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk+tkip+ccmp"); } - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -1911,32 +1861,31 @@ int get_wlan_wpa_authentication_mode(char *refparam, struct dmctx *ctx, char **v struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); - *value = dmstrdup(""); + *value = ""; if (strcmp(encryption, "psk") == 0 || strcmp(encryption, "psk+") == 0 || strcmp(encryption, "mixed-psk") == 0) - *value = dmstrdup("PSKAuthentication"); + *value = "PSKAuthentication"; else if (strcmp(encryption, "wpa") == 0 || strcmp(encryption, "mixed-wpa") == 0) - *value = dmstrdup("EAPAuthentication"); + *value = "EAPAuthentication"; return 0; } int set_wlan_wpa_authentication_mode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *encryption; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(value, "PSKAuthentication") == 0) { if (!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk"); } @@ -1949,7 +1898,6 @@ int set_wlan_wpa_authentication_mode(char *refparam, struct dmctx *ctx, int acti } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "wpa"); } - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -1960,13 +1908,13 @@ int get_wlan_ieee_11i_encryption_modes(char *refparam, struct dmctx *ctx, char * struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); - *value = dmstrdup(""); + *value = ""; if (strcmp(encryption, "psk2+tkip") == 0 || strcmp(encryption, "mixed-psk+tkip") == 0) - *value = dmstrdup("TKIPEncryption"); + *value = "TKIPEncryption"; else if (strcmp(encryption, "psk2+ccmp") == 0 || strcmp(encryption, "mixed-psk+ccmp") == 0) - *value = dmstrdup("AESEncryption"); + *value = "AESEncryption"; else if (strcmp(encryption, "psk2+tkip+ccmp") == 0 || strcmp(encryption, "mixed-psk+tkip+ccmp") == 0) - *value = dmstrdup("TKIPandAESEncryption"); + *value = "TKIPandAESEncryption"; return 0; } @@ -1978,39 +1926,42 @@ int set_wlan_ieee_11i_encryption_modes(char *refparam, struct dmctx *ctx, int ac switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(value, "TKIPEncryption") == 0) { if (!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk2+tkip"); } else if (strcmp(value, "AESEncryption") == 0) { if (!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk2+ccmp"); } else if (strcmp(value, "TKIPandAESEncryption") == 0) { if (!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk2+tkip+ccmp"); } - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -2021,33 +1972,32 @@ int get_wlan_ieee_11i_authentication_mode(char *refparam, struct dmctx *ctx, cha struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); - *value = dmstrdup(""); + *value = ""; if (strcmp(*value, "psk2") == 0 || strcmp(*value, "psk2+") == 0 || strcmp(*value, "mixed-psk") == 0 ) - *value = dmstrdup("PSKAuthentication"); + *value = "PSKAuthentication"; else if (strcmp(encryption, "wpa2") == 0 || strcmp(encryption, "mixed-wpa") == 0) - *value = dmstrdup("EAPAuthentication"); + *value = "EAPAuthentication"; return 0; } int set_wlan_ieee_11i_authentication_mode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *encryption; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(value, "PSKAuthentication") == 0) { if (!strstr(encryption, "psk")) { reset_wlan(wlanargs->lwlansection); - dmuci_set_value_by_section(wlanargs->lwlansection, "key", get_nvram_wpakey()); + char *gnw = get_nvram_wpakey(); + dmuci_set_value_by_section(wlanargs->lwlansection, "key", gnw); dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600"); dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); + dmfree(gnw); } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk2"); } @@ -2060,7 +2010,6 @@ int set_wlan_ieee_11i_authentication_mode(char *refparam, struct dmctx *ctx, int } dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "wpa2"); } - //delay_service reload "network" "1" } return 0; } @@ -2068,31 +2017,31 @@ int set_wlan_ieee_11i_authentication_mode(char *refparam, struct dmctx *ctx, int int get_wlan_radio_enabled(char *refparam, struct dmctx *ctx, char **value) { int val; - char *wunit; + char *wunit, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - *value = dmstrdup(""); + *value = ""; if (wlanargs->wlctl_num != 0) { - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; } else { - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; } - char *radio = dmstrdup("`/usr/sbin/wlctl -i $wunit radio`"); //TODO GET THE EQUIVALENT UBUS CMD OR LINUX CMD + char *radio = "`/usr/sbin/wlctl -i $wunit radio`"; //TODO GET THE EQUIVALENT UBUS CMD OR LINUX CMD //convert hex to decimal sscanf(radio, "%x", &val); if (val == 0) - *value = dmstrdup("1"); + *value = "1"; else if (val == 1) - *value = dmstrdup("0"); - dmfree(radio); + *value = "0"; return 0; } int set_wlan_radio_enabled(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; - char *wunit; + static bool b; + char *wunit, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { @@ -2101,18 +2050,17 @@ int set_wlan_radio_enabled(char *refparam, struct dmctx *ctx, int action, char * return FAULT_9007; return 0; VALUESET: - //delay_service reload "network" "1" //TODO BY IBH - if (value[0] == '0' && value[1] == '\0') - value = dmstrdup("off"); - else if (value[0] == '1' && value[1] == '\0') - value = dmstrdup("on"); + if (!b) + value = "off"; + else + value = "on"; if (wlanargs->wlctl_num != 0) { - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; } else - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; // /usr/sbin/wlctl -i $wunit radio $val //TODO EQUIVALENT LINUX COMMAND - dmfree(wunit); } return 0; } @@ -2123,24 +2071,20 @@ int get_wlan_device_operation_mode(char *refparam, struct dmctx *ctx, char **val dmuci_get_value_by_section_string(wlanargs->lwlansection, "mode", value); if (strcmp(*value, "ap") == 0) - *value = dmstrdup("InfrastructureAccessPoint"); + *value = "InfrastructureAccessPoint"; else - *value = dmstrdup(""); + *value = ""; return 0; } int set_wlan_device_operation_mode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: - //delay_service reload "network" "1" //TODO BY IBH if (strcmp(value, "InfrastructureAccessPoint") == 0) dmuci_set_value_by_section(wlanargs->lwlansection, "mode", "ap"); } @@ -2154,22 +2098,19 @@ int get_wlan_authentication_service_mode(char *refparam, struct dmctx *ctx, char dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strcmp(encryption, "wpa") == 0 || strcmp(encryption, "wpa2") == 0 || strcmp(encryption, "mixed-wpa") == 0) - *value = dmstrdup("RadiusClient"); + *value = "RadiusClient"; else - *value = dmstrdup("None"); + *value = "None"; return 0; } int set_wlan_authentication_service_mode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *encryption; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); @@ -2186,22 +2127,22 @@ int set_wlan_authentication_service_mode(char *refparam, struct dmctx *ctx, int dmuci_set_value_by_section(wlanargs->lwlansection, "radius_secret", ""); } } - //delay_service reload "network" "1" //TODO BY IBH } return 0; } int get_wlan_total_associations(char *refparam, struct dmctx *ctx, char **value) { - char *wunit; + char *wunit, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; if (wlanargs->wlctl_num != 0) { - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; } else - wunit = dmstrdup(wlanargs->wunit); - *value = dmstrdup("`/usr/sbin/wlctl -i $wunit assoclist | grep -c 'assoclist'`");//TODO ADD LINUX CMD + wunit = wlanargs->wunit; + *value = "`/usr/sbin/wlctl -i $wunit assoclist | grep -c 'assoclist'`";//TODO ADD LINUX CMD return 0; } @@ -2209,14 +2150,16 @@ int get_wlan_devstatus_statistics_tx_bytes(char *refparam, struct dmctx *ctx, ch { struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; json_object *res; - char *wunit; + char *wunit, buf[8]; - if (wlanargs->wlctl_num != 0) - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + if (wlanargs->wlctl_num != 0) { + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; + } else - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; dmubus_call("network.device", "status", UBUS_ARGS{{"name", wunit}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", -1, "tx_bytes", value, NULL); return 0; } @@ -2224,16 +2167,18 @@ int get_wlan_devstatus_statistics_tx_bytes(char *refparam, struct dmctx *ctx, ch int get_wlan_devstatus_statistics_rx_bytes(char *refparam, struct dmctx *ctx, char **value) { json_object *res; - char *wunit; + char *wunit, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - if (wlanargs->wlctl_num != 0) - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + if (wlanargs->wlctl_num != 0) { + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; + } else - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; dmubus_call("network.device", "status", UBUS_ARGS{{"name", wunit}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); - json_select(res, "statistics", 0, "rx_bytes", value, NULL); + DM_ASSERT(res, *value = ""); + json_select(res, "statistics", 0, "rx_bytes", value, NULL); return 0; } @@ -2241,14 +2186,16 @@ int get_wlan_devstatus_statistics_tx_packets(char *refparam, struct dmctx *ctx, { json_object *res; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - char *wunit = wlanargs->wunit; + char *wunit, buf[8]; - if (wlanargs->wlctl_num != 0) - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + if (wlanargs->wlctl_num != 0) { + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; + } else - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; dmubus_call("network.device", "status", UBUS_ARGS{{"name", wunit}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "tx_packets", value, NULL); return 0; } @@ -2258,12 +2205,16 @@ int get_wlan_devstatus_statistics_rx_packets(char *refparam, struct dmctx *ctx, json_object *res; char *val = NULL; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - char *wunit = dmstrdup(wlanargs->wunit); + char *wunit, buf[8]; - if (wlanargs->wlctl_num != 0) - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + if (wlanargs->wlctl_num != 0) { + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; + } + else + wunit = wlanargs->wunit; dmubus_call("network.device", "status", UBUS_ARGS{{"name", wunit}}, 1, &res); - DM_ASSERT(res, *value = dmstrdup("")); + DM_ASSERT(res, *value = ""); json_select(res, "statistics", 0, "rx_packets", value, NULL); return 0; @@ -2276,15 +2227,15 @@ int get_wlan_ssid_advertisement_enable(char *refparam, struct dmctx *ctx, char * dmuci_get_value_by_section_string(wlanargs->lwlansection, "hidden", &hidden); if (hidden[0] == '1' && hidden[1] == '\0') - *value = dmstrdup("0"); + *value = "0"; else - *value = dmstrdup("1"); + *value = "1"; return 0; } int set_wlan_ssid_advertisement_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { @@ -2293,13 +2244,11 @@ int set_wlan_ssid_advertisement_enable(char *refparam, struct dmctx *ctx, int ac return FAULT_9007; return 0; VALUESET: - if (value) + if (b) dmuci_set_value_by_section(wlanargs->lwlansection, "hidden", ""); - else if (!value) - dmuci_set_value_by_section(wlanargs->lwlansection, "hidden", "1"); else - return 0; - //delay_service reload "network" "1" //TODO BY IBH + dmuci_set_value_by_section(wlanargs->lwlansection, "hidden", "1"); + } return 0; } @@ -2311,15 +2260,15 @@ int get_wlan_wps_enable(char *refparam, struct dmctx *ctx, char **value) dmuci_get_value_by_section_string(wlanargs->lwlansection, "wps_pbc", &wps_pbc); if (wps_pbc[0] == '1' && wps_pbc[1] == '\0') - *value = dmstrdup("1"); + *value = "1"; else - *value = dmstrdup("0"); + *value = "0"; return 0; } int set_wlan_wps_enable(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; + static bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { @@ -2328,13 +2277,10 @@ int set_wlan_wps_enable(char *refparam, struct dmctx *ctx, int action, char *val return FAULT_9007; return 0; VALUESET: - if (value[0] == '1') + if (b) dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", "1"); - else if (value[0] == '0') - dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", ""); else - return 0; - //delay_service reload "network" "1" //TODO IBH + dmuci_set_value_by_section(wlanargs->lwlansection, "wps_pbc", ""); } return 0; } @@ -2344,31 +2290,27 @@ int get_x_inteno_se_channelmode(char *refparam, struct dmctx *ctx, char **value) struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_option_value_string("wireless", wlanargs->wunit, "channel", value); - if (strcmp(*value, "auto") || value[0] == '\0') - *value = dmstrdup("Auto"); + if (strcmp(*value, "auto") || (*value)[0] == '\0') + *value = "Auto"; else - *value = dmstrdup("Manual"); + *value = "Manual"; return 0; } int set_x_inteno_se_channelmode(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; char *channel; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: if (strcmp(value, "Auto")) dmuci_set_value("wireless", wlanargs->wunit, "channel", "auto"); else if (strcmp(value, "Manual")) - channel = dmstrdup("`/usr/sbin/wlctl -i $wunit channel |grep \"target channel\" |awk -F ' ' '{print$3}'`"); //TODO GET LINUX CMD + channel = "`/usr/sbin/wlctl -i $wunit channel |grep \"target channel\" |awk -F ' ' '{print$3}'`"; //TODO GET LINUX CMD dmuci_set_value("wireless", wlanargs->wunit, "channel", channel); - //delay_service reload "network" "1" } return 0; @@ -2380,9 +2322,9 @@ int get_x_inteno_se_supported_standard(char *refparam, struct dmctx *ctx, char * char *status = "";// `wlctl -i wlanargs->wunit status |awk '$1==""Chanspec:" {print$2}'` //TODO LINUX EQUIVALENT CMD if (strcmp(status, "5GHz") == 0) - *value = dmstrdup("a, n, ac"); + *value = "a, n, ac"; else - *value = dmstrdup("b, g, n, gst, lrs"); + *value = "b, g, n, gst, lrs"; return 0; } @@ -2392,29 +2334,28 @@ int get_x_inteno_se_operating_channel_bandwidth(char *refparam, struct dmctx *ct dmuci_get_option_value_string("wireless", wlanargs->wunit, "bandwidth", value); if (value[0] == '\0') - *value = dmstrdup("LINUX EQUIVALENT CMD"); //`wlctl -i wlanargs->wunit status |awk '$1=="Chanspec:" {print$5}'` //TODO LINUX EQUIVALENT CMD + *value = "LINUX EQUIVALENT CMD"; //`wlctl -i wlanargs->wunit status |awk '$1=="Chanspec:" {print$5}'` //TODO LINUX EQUIVALENT CMD //echo "${val//[^0-9]/}""MHz" //TODO LINUX EQUIVALENT CMD return 0; } int set_x_inteno_se_operating_channel_bandwidth(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; int x; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: x = (int)strtol(value, (char **)NULL, 10); - dmasprintf(&value, "%d", x);//TOCHECK - if ((value[0] == '0' && value[1] == '\0') || value[0] == '\0') + dmasprintf(&value, "%d", x);//TODO CHECK + if ((value[0] == '0' && value[1] == '\0') || value[0] == '\0') { + dmfree(value); return 0; + } dmuci_set_value("wireless", wlanargs->wunit, "bandwidth", value); - //delay_service reload "network" "1"//TODO BY IBH + dmfree(value); } return 0; } @@ -2429,32 +2370,25 @@ int get_x_inteno_se_maxssid(char *refparam, struct dmctx *ctx, char **value) int set_x_inteno_se_maxssid(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_set_value_by_section(wlanargs->lwlansection, "bss_max", value); - //delay_service reload "network" "1" //TODO BY IBH } return 0; } -//TO CODE +//TODO TO CODE int set_wlan_wep_key(char *refparam, struct dmctx *ctx, int action, char *value) { - bool b; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: //uci_set_value_section(wlanargs->lwlansection, "bss_max", value); @@ -2557,11 +2491,8 @@ int set_wlan_pre_shared_key(char *refparam, struct dmctx *ctx, int action, char { char *encryption; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; - bool b; switch (action) { VALUECHECK: - if (string_to_bool(value, &b)) - return FAULT_9007; return 0; VALUESET: dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); @@ -2571,7 +2502,6 @@ int set_wlan_pre_shared_key(char *refparam, struct dmctx *ctx, int action, char dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk"); } dmuci_set_value_by_section(wlanargs->lwlansection, "key", value); - //delay_service reload "network" "1" //TODO BY IBH } return 0; } @@ -2606,19 +2536,21 @@ int set_wlan_pre_shared_key(char *refparam, struct dmctx *ctx, int action, char int get_wlan_psk_assoc_MACAddress(char *refparam, struct dmctx *ctx, char **value) { - char *wunit, *encryption; + char *wunit, *encryption, buf[8]; struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args; dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strstr(encryption, "psk")) { - if (wlanargs->wlctl_num != 0) - dmasprintf(&wunit, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + if (wlanargs->wlctl_num != 0) { + sprintf(buf, "%s.%d", wlanargs->wunit, wlanargs->wlctl_num); + wunit = buf; + } else - wunit = dmstrdup(wlanargs->wunit); + wunit = wlanargs->wunit; TRACE("pki vaut %d \n", wlanargs->pki); wlanargs->pki = wlanargs->pki + 1; TRACE("pki vaut %d \n", wlanargs->pki); - *value = dmstrdup("TO CODE:`/usr/sbin/wlctl -i $wunit assoclist|awk -F' ' '{print $2}'`"); + *value = "TO CODE:`/usr/sbin/wlctl -i $wunit assoclist|awk -F' ' '{print $2}'`"; } return 0; } diff --git a/dm/dmuci.c b/dm/dmuci.c index 9e364db..8626fed 100644 --- a/dm/dmuci.c +++ b/dm/dmuci.c @@ -38,11 +38,11 @@ char *dmuci_list_to_string(struct uci_list *list, char *delimitor) else strcpy(val, e->name); } - return (dmstrdup(val)); + return (dmstrdup(val)); // MEM WILL BE FREED IN DMMEMCLEAN } else { - return dmstrdup(""); + return ""; } } @@ -129,13 +129,13 @@ int dmuci_get_section_type(char *package, char *section,char **value) struct uci_element *e; struct uci_ptr ptr = {0}; if (dmuci_lookup_ptr(uci_ctx, &ptr, package, section, NULL, NULL)) { - *value = dmstrdup(""); + *value = ""; return -1; } if (ptr.s) { - *value = dmstrdup(ptr.s->type); + *value = ptr.s->type; } else { - *value = dmstrdup(""); + *value = ""; return -1; } return 0; @@ -146,13 +146,13 @@ int dmuci_get_option_value_string(char *package, char *section, char *option, ch struct uci_element *e; struct uci_ptr ptr = {0}; if (dmuci_lookup_ptr(uci_ctx, &ptr, package, section, option, NULL)) { - *value = dmstrdup(""); + *value = ""; return -1; } if (ptr.o) { - *value = dmstrdup(ptr.o->v.string); + *value = ptr.o->v.string; } else { - *value = dmstrdup(""); + *value = ""; return -1; } return 0; @@ -205,9 +205,9 @@ int db_get_value_string(char *package, char *section, char *option, char **value struct uci_option *o; o = dmuci_get_option_ptr(DB_CONFIG, package, section, option); if (o) { - *value = dmstrdup(o->v.string); + *value = o->v.string; } else { - *value = dmstrdup(""); + *value = ""; return -1; } return 0; @@ -359,15 +359,15 @@ int dmuci_add_section(char *package, char *stype, struct uci_section **s, char * *s = NULL; if (dmuci_lookup_ptr(uci_ctx, &ptr, package, NULL, NULL, NULL)) { - *value = dmstrdup(""); + *value = ""; return -1; } if (uci_add_section(uci_ctx, ptr.p, stype, s) != UCI_OK) { - *value = dmstrdup(""); + *value = ""; return -1; } - *value = dmstrdup((*s)->e.name); + *value = (*s)->e.name; return 0; } @@ -437,11 +437,11 @@ int dmuci_get_value_by_section_string(struct uci_section *s, char *option, char uci_foreach_element(&s->options, e) { o = (uci_to_option(e)); if (!strcmp(o->e.name, option)) { - *value = dmstrdup(o->v.string); + *value = o->v.string; return 0; } } - *value = dmstrdup(""); + *value = ""; return -1; }