diff --git a/src/backupSession.c b/src/backupSession.c index e55bd6d..235d8eb 100644 --- a/src/backupSession.c +++ b/src/backupSession.c @@ -491,7 +491,7 @@ static void load_download(mxml_node_t *tree) list_add(&(download_request->list), ilist->prev); if (download_request->scheduled_time != 0) count_download_queue++; - cwmp_set_end_session(END_SESSION_DOWNLOAD, true); + cwmp_set_end_session(END_SESSION_DOWNLOAD); } static void load_schedule_download(mxml_node_t *tree) @@ -540,7 +540,7 @@ static void load_schedule_download(mxml_node_t *tree) list_add(&(download_request->list), ilist->prev); if (download_request->timewindowstruct[0].windowstart != 0) count_download_queue++; - cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); + cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD); } static void load_upload(mxml_node_t *tree) @@ -578,7 +578,7 @@ static void load_upload(mxml_node_t *tree) list_add(&(upload_request->list), ilist->prev); if (upload_request->scheduled_time != 0) count_upload_queue++; - cwmp_set_end_session(END_SESSION_UPLOAD, true); + cwmp_set_end_session(END_SESSION_UPLOAD); } static void load_change_du_state(mxml_node_t *tree) @@ -600,7 +600,7 @@ static void load_change_du_state(mxml_node_t *tree) load_xml_node_data(BKP_CDU, tree, &bkp_xml_cdu); list_add_tail(&(change_du_state_request->list_operation), &(list_change_du_state)); - cwmp_set_end_session(END_SESSION_CDU, true); + cwmp_set_end_session(END_SESSION_CDU); } void load_du_state_change_complete(mxml_node_t *tree) diff --git a/src/diagnostic.c b/src/diagnostic.c index 3d827fb..ce9a948 100644 --- a/src/diagnostic.c +++ b/src/diagnostic.c @@ -152,75 +152,77 @@ struct diagnostic_input nslookup_diagnostics[] = { { "Timeout", "Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout", NULL } }; +static unsigned int get_diagnostic_flag(const char *parameter_name) +{ + if (CWMP_STRLEN(parameter_name) == 0) + return 0; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_DOWNLOAD_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.UploadDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_UPLOAD_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.IPPing.DiagnosticsState") == 0) { + return END_SESSION_IPPING_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.ServerSelectionDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_SERVERSELECTION_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.TraceRoute.DiagnosticsState") == 0) { + return END_SESSION_TRACEROUTE_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.UDPEchoDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_UDPECHO_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_NSLOOKUP_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.IP.Diagnostics.IPLayerCapacityMetrics.DiagnosticsState") == 0) { + return END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.WiFi.NeighboringWiFiDiagnostic.DiagnosticsState") == 0) { + return END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.PacketCaptureDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_PACKETCAPTURE_DIAGNOSTIC; + } + + if (strcmp(parameter_name, "Device.SelfTestDiagnostics.DiagnosticsState") == 0) { + return END_SESSION_SELFTEST_DIAGNOSTIC; + } + + return 0; +} + void set_diagnostic_state_end_session_flag(char *parameter_name, char *value) { - bool flag; + unsigned int flag = 0; if (CWMP_STRLEN(parameter_name) == 0 || CWMP_STRLEN(value) == 0) return; + flag = get_diagnostic_flag(parameter_name); + + if (flag == 0) + return; + if (strcmp(value, "Requested") == 0) { - flag = true; + cwmp_set_end_session(flag); } else if (strcmp(value, "Canceled") == 0) { - flag = false; - } else { - return; + cwmp_clear_end_session(flag); } - if (strcmp(parameter_name, "Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_DOWNLOAD_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.UploadDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_UPLOAD_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.IPPing.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_IPPING_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.ServerSelectionDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_SERVERSELECTION_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.TraceRoute.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_TRACEROUTE_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.UDPEchoDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_UDPECHO_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_NSLOOKUP_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.IP.Diagnostics.IPLayerCapacityMetrics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.WiFi.NeighboringWiFiDiagnostic.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.PacketCaptureDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_PACKETCAPTURE_DIAGNOSTIC, flag); - return; - } - - if (strcmp(parameter_name, "Device.SelfTestDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_SELFTEST_DIAGNOSTIC, flag); - return; - } + return; } static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char *parameter, char *value) diff --git a/src/reboot.c b/src/reboot.c index 7f1cbf9..2216f81 100644 --- a/src/reboot.c +++ b/src/reboot.c @@ -33,7 +33,7 @@ void cwmp_delay_reboot(struct uloop_timeout *timeout __attribute__((unused))) { set_uci_path_value(NULL, "cwmp.cpe.delay_reboot", "-1"); if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { - cwmp_set_end_session(END_SESSION_REBOOT, true); + cwmp_set_end_session(END_SESSION_REBOOT); } else { cwmp_reboot("delay_reboot"); exit(EXIT_SUCCESS); diff --git a/src/rpc.c b/src/rpc.c index db8d1e2..0356fd9 100755 --- a/src/rpc.c +++ b/src/rpc.c @@ -1090,7 +1090,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD, true); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD); return 0; fault: @@ -1160,7 +1160,7 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY, true); + cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY); return 0; fault: @@ -1252,7 +1252,7 @@ int cwmp_handle_rpc_cpe_add_object(struct rpc *rpc) FREE(object_name); FREE(parameter_key); FREE(res.instance); - cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES); return 0; fault: @@ -1336,7 +1336,7 @@ int cwmp_handle_rpc_cpe_delete_object(struct rpc *rpc) FREE(object_name); FREE(parameter_key); FREE(res.instance); - cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES); return 0; fault: @@ -1421,7 +1421,7 @@ int cwmp_handle_rpc_cpe_factory_reset(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_FACTORY_RESET, true); + cwmp_set_end_session(END_SESSION_FACTORY_RESET); return 0; @@ -1446,7 +1446,7 @@ int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct rpc *rpc) if (!b) goto fault; - cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT, true); + cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT); return 0; @@ -1583,7 +1583,7 @@ int cwmp_handle_rpc_cpe_reboot(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_REBOOT, true); + cwmp_set_end_session(END_SESSION_REBOOT); FREE(command_key); return 0; @@ -1669,7 +1669,7 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct rpc *rpc) bkp_session_save(); FREE(command_key); - cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM, true); + cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM); return 0; fault: @@ -1749,7 +1749,7 @@ int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc) change_du_state->id = cwmp_main->cdu_id; bkp_session_insert_change_du_state(change_du_state); bkp_session_save(); - cwmp_set_end_session(END_SESSION_CDU, true); + cwmp_set_end_session(END_SESSION_CDU); return 0; fault: @@ -1885,7 +1885,7 @@ int cwmp_handle_rpc_cpe_download(struct rpc *rpc) } else { CWMP_LOG(INFO, "Download will start at the end of session"); } - cwmp_set_end_session(END_SESSION_DOWNLOAD, true); + cwmp_set_end_session(END_SESSION_DOWNLOAD); } return 0; @@ -2044,7 +2044,7 @@ int cwmp_handle_rpc_cpe_schedule_download(struct rpc *rpc) error = FAULT_CPE_INTERNAL_ERROR; goto fault; } - cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); + cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD); return 0; fault: @@ -2180,7 +2180,7 @@ int cwmp_handle_rpc_cpe_upload(struct rpc *rpc) } else { CWMP_LOG(INFO, "Upload will start at the end of session"); } - cwmp_set_end_session(END_SESSION_UPLOAD, true); + cwmp_set_end_session(END_SESSION_UPLOAD); } return 0; diff --git a/src/session.c b/src/session.c index 8530d7e..41d2732 100644 --- a/src/session.c +++ b/src/session.c @@ -634,13 +634,14 @@ struct rpc *cwmp_add_session_rpc_acs_head(int type) return rpc_acs; } -void cwmp_set_end_session(unsigned int flag, bool set) +void cwmp_set_end_session(unsigned int flag) { - if (set) { - end_session_flag |= flag; - } else { - end_session_flag &= ~(flag); - } + end_session_flag |= flag; +} + +void cwmp_clear_end_session(unsigned int flag) +{ + end_session_flag &= ~(flag); } int run_session_end_func(void) diff --git a/src/session.h b/src/session.h index 074f7a9..bb4ed14 100644 --- a/src/session.h +++ b/src/session.h @@ -90,7 +90,8 @@ enum enum_session_status extern unsigned int end_session_flag; -void cwmp_set_end_session(unsigned int flag, bool set); +void cwmp_set_end_session(unsigned int flag); +void cwmp_clear_end_session(unsigned int flag); struct rpc *build_sessin_rcp_cpe(int type); struct rpc *cwmp_add_session_rpc_acs(int type); struct rpc *cwmp_add_session_rpc_acs_head(int type); diff --git a/src/ubus_utils.c b/src/ubus_utils.c index d12b0c0..18f518e 100644 --- a/src/ubus_utils.c +++ b/src/ubus_utils.c @@ -71,7 +71,7 @@ static int reload_cmd(struct blob_buf *b) { CWMP_LOG(INFO, "triggered ubus reload"); if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { - cwmp_set_end_session(END_SESSION_RELOAD, true); + cwmp_set_end_session(END_SESSION_RELOAD); blobmsg_add_u32(b, "status", 0); blobmsg_add_string(b, "info", "Session running, reload at the end of the session"); } else { diff --git a/test/script/05_verify_cmd_line.sh b/test/script/05_verify_cmd_line.sh index 732d1fe..4314846 100755 --- a/test/script/05_verify_cmd_line.sh +++ b/test/script/05_verify_cmd_line.sh @@ -99,12 +99,14 @@ if [[ $res != *"9009"* ]]; then fi log "ADD METHOD: Correct Path" -res=$(./icwmpd -c add Device.IP.Interface. 2>&1) -if [[ $res != *"Device.IP.Interface."* ]]; then +res=$(./icwmpd -c add Device.DHCPv4.Relay.Forwarding. 2>&1) +if [[ $res != *"Device.DHCPv4.Relay.Forwarding."* ]]; then log "Error: Add Method with correct path doesn't work correctly" exit 1 fi +del_path=$(echo "${res}" | cut -d' ' -f 2) + log "ADD METHOD: Wrong Path" res=$(./icwmpd -c add Device.DeviceInfo.VendorLogFil 2>&1) if [[ $res != *"9005"* ]]; then @@ -119,16 +121,16 @@ if [[ $res != *"9005"* ]]; then exit 1 fi -log "DELETE METHOD: Correct Path && one instance" -res=$(./icwmpd -c del Device.IP.Interface.2. 2>&1) -if [[ $res != *"Deleted Device.IP.Interface.2."* ]]; then +log "DELETE METHOD: Correct Path ${del_path} && one instance" +res=$(./icwmpd -c del "${del_path}" 2>&1) +if [[ $res != *"Deleted ${del_path}"* ]]; then log "Error: Delete Method with correct path && one instance doesn't work correctly" exit 1 fi log "DELETE METHOD: Correct Path && all instance" -res=$(./icwmpd -c del Device.IP.Interface. 2>&1) -if [[ $res != *"Deleted Device.IP.Interface."* ]]; then +res=$(./icwmpd -c del Device.DHCPv4.Relay.Forwarding. 2>&1) +if [[ $res != *"Deleted Device.DHCPv4.Relay.Forwarding."* ]]; then log "Error: Delete Method with correct path && all instances doesn't work correctly" exit 1 fi