Return fault for duplicate param in SPV

This commit is contained in:
Suvendhu Hansa 2025-07-08 19:46:09 +05:30
parent 070e812e1b
commit 1a842e0a38
3 changed files with 30 additions and 4 deletions

View file

@ -1174,7 +1174,11 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct rpc *rpc)
goto fault;
}
xml_data_list_to_dm_parameter_list(&xml_list_set_param_value, &list_set_param_value);
fault_code = xml_data_list_to_dm_parameter_list(&xml_list_set_param_value, &list_set_param_value);
if (fault_code != FAULT_CPE_NO_FAULT) {
err_msg = "Duplicate parameter name found in the SPV parameter list";
goto fault;
}
/* Before set check if exists Device.ManagementServer.InformParameter.{i}.ParameterName with ForcedInform Parameter */
fault_code = validate_inform_parameter_name(&list_set_param_value);

View file

@ -1084,10 +1084,30 @@ void dm_parameter_list_to_xml_data_list(struct list_head *dm_parameter_list, str
}
}
void xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct list_head *dm_parameter_list)
static int validate_duplicate_param_name(const char *xml_param, struct list_head *dm_parameter_list)
{
struct xml_list_data *xml_data;
struct cwmp_dm_parameter *param_value = NULL;
if (CWMP_STRLEN(xml_param) == 0)
return 0;
list_for_each_entry(param_value, dm_parameter_list, list) {
if (CWMP_STRCMP(param_value->name, xml_param) == 0)
return -1;
}
return 0;
}
int xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct list_head *dm_parameter_list)
{
struct xml_list_data *xml_data = NULL;
list_for_each_entry (xml_data, xml_data_list, list) {
/* duplicate parameter name should not exist */
if (0 != validate_duplicate_param_name(xml_data->param_name, dm_parameter_list)) {
return FAULT_CPE_INVALID_ARGUMENTS;
}
struct cwmp_dm_parameter *dm_parameter;
dm_parameter = calloc(1, sizeof(struct cwmp_dm_parameter));
list_add_tail(&dm_parameter->list, dm_parameter_list);
@ -1098,6 +1118,8 @@ void xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct
dm_parameter->notification = xml_data->notification;
dm_parameter->writable =xml_data->notification;
}
return FAULT_CPE_NO_FAULT;
}
void xml_data_list_to_cdu_operations_list(struct list_head *xml_data_list, struct list_head *cdu_operations_list)

View file

@ -326,7 +326,7 @@ void add_xml_data_list(struct list_head *data_list, struct xml_list_data *xml_da
mxml_node_t * build_top_body_soap_response(mxml_node_t *node, const char *method);
mxml_node_t * build_top_body_soap_request(mxml_node_t *node, const char *method);
void dm_parameter_list_to_xml_data_list(struct list_head *dm_parameter_list, struct list_head *xml_data_list);
void xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct list_head *dm_parameter_list);
int xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct list_head *dm_parameter_list);
void xml_data_list_to_cdu_operations_list(struct list_head *xml_data_list, struct list_head *du_op_list);
void cdu_operations_result_list_to_xml_data_list(struct list_head *du_op_res_list, struct list_head *xml_data_list);
void cdu_operations_list_to_xml_data_list(struct list_head *du_op_list, struct list_head *xml_data_list);