diff --git a/src/common.c b/src/common.c index 82bf2de..f260ff4 100755 --- a/src/common.c +++ b/src/common.c @@ -41,11 +41,6 @@ struct cwmp_mem { char mem[0]; }; -static char *Obj_Excluded[] = { - "Device.DeviceInfo.ProcessStatus.Process.", - "Device.Hosts.Host." -}; - struct option cwmp_long_options[] = { { "boot-event", no_argument, NULL, 'b' }, { "get-rpc-methods", no_argument, NULL, 'g' }, @@ -875,19 +870,6 @@ char *get_time(time_t t_time) return local_time; } -bool is_obj_excluded(const char *object_name) -{ - unsigned int i = 0; - - if (object_name == NULL) - return false; - for (i = 0; i < ARRAY_SIZE(Obj_Excluded); i++) { - if (strncmp(Obj_Excluded[i], object_name, strlen(Obj_Excluded[i])) == 0) - return true; - } - return false; -} - time_t convert_datetime_to_timestamp(char *value) { struct tm tm = { 0 }; diff --git a/src/common.h b/src/common.h index b880781..06153e3 100644 --- a/src/common.h +++ b/src/common.h @@ -615,7 +615,6 @@ int icwmp_check_http_connection(void); bool is_ipv6_enabled(void); bool is_ipv6_status_changed(void); char *get_time(time_t t_time); -bool is_obj_excluded(const char *object_name); bool is_reload_parameter(const char *object_name); time_t convert_datetime_to_timestamp(char *value); int run_session_end_func(void); diff --git a/src/notifications.c b/src/notifications.c index 0c95a6e..b17d97e 100644 --- a/src/notifications.c +++ b/src/notifications.c @@ -282,14 +282,15 @@ char *cwmp_get_parameter_attributes(char *parameter_name, struct list_head *para { char *error = NULL; - if (parameters_list == NULL) { + if (parameter_name == NULL || parameters_list == NULL) { CWMP_LOG(ERROR, "notifications %s: childs_list is null", __FUNCTION__); return NULL; } - error = check_valid_parameter_path(parameter_name); + error = check_valid_parameter_path(parameter_name); if (error != NULL) return error; + LIST_HEAD(childs_notifs); int notification = get_parameter_family_notifications(parameter_name, &childs_notifs); LIST_HEAD(params_list); diff --git a/src/rpc.c b/src/rpc.c index 64c45ad..4012a53 100755 --- a/src/rpc.c +++ b/src/rpc.c @@ -851,7 +851,7 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct rpc *rpc) goto fault; char *err = cwmp_get_parameter_names(parameter_name ? parameter_name : "", next_level, ¶meters_list); - if (err && !is_obj_excluded(parameter_name)) { + if (err) { fault_code = cwmp_get_fault_code_by_string(err); goto fault; } diff --git a/src/xml.c b/src/xml.c index c07bfa4..4f1fd66 100644 --- a/src/xml.c +++ b/src/xml.c @@ -577,22 +577,26 @@ error: int build_parameter_structure(mxml_node_t *param_list, struct xml_data_struct *xml_attrs) { + char *err = NULL; + LIST_HEAD(parameters_list); - char *err = NULL; if (xml_attrs->parameter_name == NULL) return CWMP_OK; + if (xml_attrs->rpc_enum == SOAP_PARAM_STRUCT) err = cwmp_get_parameter_values(*(xml_attrs->parameter_name), ¶meters_list); else if (xml_attrs->rpc_enum == SOAP_GPA_STRUCT) err = cwmp_get_parameter_attributes(*(xml_attrs->parameter_name), ¶meters_list); else return FAULT_CPE_INTERNAL_ERROR; - if (err && !is_obj_excluded(*(xml_attrs->parameter_name))) { + + if (err) { int fault_code = cwmp_get_fault_code_by_string(err); cwmp_free_all_dm_parameter_list(¶meters_list); return fault_code; } + LIST_HEAD(prameters_xml_list); dm_parameter_list_to_xml_data_list(¶meters_list, &prameters_xml_list); @@ -600,13 +604,13 @@ int build_parameter_structure(mxml_node_t *param_list, struct xml_data_struct *x prmvalstrct_resp_xml_attrs.data_list = &prameters_xml_list; prmvalstrct_resp_xml_attrs.counter = xml_attrs->counter; prmvalstrct_resp_xml_attrs.inc_counter = true; + int fault = build_xml_node_data(xml_attrs->rpc_enum, param_list, &prmvalstrct_resp_xml_attrs); - if (fault != CWMP_OK) - return fault; cwmp_free_all_dm_parameter_list(¶meters_list); cwmp_free_all_xml_data_list(&prameters_xml_list); - return FAULT_CPE_NO_FAULT; + + return (fault != CWMP_OK) ? fault : FAULT_CPE_NO_FAULT; } int build_backup_cdu_option(mxml_node_t *cdu, struct xml_data_struct *xml_attrs)