diff --git a/common.c b/common.c index 7a510c3..6fc899c 100755 --- a/common.c +++ b/common.c @@ -43,6 +43,11 @@ struct cwmp_mem { char mem[0]; }; +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' }, { "command-input", no_argument, NULL, 'c' }, { "help", no_argument, NULL, 'h' }, @@ -718,3 +723,14 @@ int get_connection_interface() } return CWMP_OK; } + +bool is_obj_excluded(char *object_name) +{ + unsigned int i = 0; + + 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; +} diff --git a/inc/common.h b/inc/common.h index f64434d..de9bffb 100644 --- a/inc/common.h +++ b/inc/common.h @@ -488,6 +488,8 @@ void clean_custom_inform_parameters(); char *string_to_hex(const unsigned char *str, size_t size); int copy_file(char *source_file, char *target_file); int get_connection_interface(); +bool is_obj_excluded(char *object_name); + #ifndef FREE #define FREE(x) \ do { \ diff --git a/rpc_soap.c b/rpc_soap.c index 581145f..5a7812c 100755 --- a/rpc_soap.c +++ b/rpc_soap.c @@ -776,7 +776,7 @@ int cwmp_handle_rpc_cpe_get_parameter_values(struct session *session, struct rpc } if (parameter_name) { char *err = cwmp_get_parameter_values(parameter_name, ¶meters_list); - if (err) { + if (err && !is_obj_excluded(parameter_name)) { fault_code = cwmp_get_fault_code_by_string(err); goto fault; } @@ -887,7 +887,7 @@ int cwmp_handle_rpc_cpe_get_parameter_names(struct session *session, struct rpc if (parameter_name && NextLevel) { char *err = cwmp_get_parameter_names(parameter_name, strcmp(NextLevel, "true") == 0 || strcmp(NextLevel, "1") == 0 ? true : false, ¶meters_list); - if (err) { + if (err && !is_obj_excluded(parameter_name)) { fault_code = cwmp_get_fault_code_by_string(err); goto fault; } @@ -979,7 +979,7 @@ int cwmp_handle_rpc_cpe_get_parameter_attributes(struct session *session, struct } if (parameter_name) { char *err = cwmp_get_parameter_attributes(parameter_name, ¶meters_list); - if (err) { + if (err && !is_obj_excluded(parameter_name)) { fault_code = cwmp_get_fault_code_by_string(err); goto fault; }