Ticket refs #13375: TR069 toggle for soft reset

This commit is contained in:
Omar Kallel 2017-11-23 19:23:30 +01:00
parent d6f3213471
commit dbf00a8c81
5 changed files with 48 additions and 0 deletions

10
cwmp.c
View file

@ -581,6 +581,16 @@ int run_session_end_func (struct session *session)
cwmp_apply_acs_changes();
}
if (session->end_session & END_SESSION_X_FACTORY_RESET_SOFT)
{
CWMP_LOG (INFO,"Executing factory reset soft: end session request");
external_init();
external_simple("factory_reset_soft", NULL, 0);
external_exit();
exit(EXIT_SUCCESS);
}
dm_entry_restart_services();
session->end_session = 0;

View file

@ -100,6 +100,7 @@ enum end_session {
END_SESSION_IPPING_DIAGNOSTIC = 1<<4,
END_SESSION_DOWNLOAD_DIAGNOSTIC = 1<<5,
END_SESSION_UPLOAD_DIAGNOSTIC = 1<<6,
END_SESSION_X_FACTORY_RESET_SOFT = 1<<7
};
enum cwmp_start {

View file

@ -51,6 +51,7 @@ enum rpc_cpe_methods_idx {
RPC_CPE_CHANGE_DU_STATE,
RPC_CPE_CANCEL_TRANSFER,
RPC_CPE_FAULT,
RPC_CPE_X_FACTORY_RESET_SOFT,
__RPC_CPE_MAX
};
@ -281,6 +282,7 @@ int cwmp_handle_rpc_cpe_reboot(struct session *session, struct rpc *rpc);
int cwmp_handle_rpc_cpe_download(struct session *session, struct rpc *rpc);
int cwmp_handle_rpc_cpe_upload(struct session *session, struct rpc *rpc);
int cwmp_handle_rpc_cpe_factory_reset(struct session *session, struct rpc *rpc);
int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc *rpc);
int cancel_transfer(char * key);
int cwmp_handle_rpc_cpe_cancel_transfer(struct session *session, struct rpc *rpc);
int cwmp_handle_rpc_cpe_schedule_inform(struct session *session, struct rpc *rpc);

View file

@ -87,6 +87,9 @@ case "$1" in
factory_reset)
action="factory_reset"
;;
factory_reset_soft)
action="factory_reset_soft"
;;
reboot)
action="reboot"
;;
@ -358,6 +361,12 @@ handle_action() {
if [ "$action" = "factory_reset" ]; then
/sbin/defaultreset
fi
if [ "$action" = "factory_reset_soft" ]; then
ubus call juci.system defaultreset '{"soft":"true","wifi":"true","fw_redirect":"true","fw_parental":"true","passwd_user":"true","ice":"true"}'
sync
reboot
fi
if [ "$action" = "reboot" ]; then
sync
@ -452,6 +461,9 @@ handle_action() {
factory_reset)
action="factory_reset"
;;
factory_reset_soft)
action="factory_reset_soft"
;;
reboot)
action="reboot"
;;

23
xml.c
View file

@ -116,6 +116,7 @@ const struct rpc_cpe_method rpc_cpe_methods[] = {
[RPC_CPE_SCHEDULE_INFORM] = {"ScheduleInform", cwmp_handle_rpc_cpe_schedule_inform, AMD_1},
[RPC_CPE_SCHEDULE_DOWNLOAD] = {"ScheduleDownload", cwmp_handle_rpc_cpe_schedule_download, AMD_3},
[RPC_CPE_CHANGE_DU_STATE] = {"ChangeDUState", cwmp_handle_rpc_cpe_change_du_state, AMD_3},
[RPC_CPE_X_FACTORY_RESET_SOFT] = {"X_FactoryResetSoft", cwmp_handle_rpc_cpe_x_factory_reset_soft, AMD_1},
[RPC_CPE_FAULT] = {"Fault", cwmp_handle_rpc_cpe_fault, AMD_1}
};
@ -1906,6 +1907,28 @@ error:
return -1;
}
int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct session *session, struct rpc *rpc){
mxml_node_t *b;
b = mxmlFindElement(session->tree_out, session->tree_out, "soap_env:Body", NULL, NULL, MXML_DESCEND);
if (!b) goto fault;
b = mxmlNewElement(b, "cwmp:X_FactoryResetSoftResponse");
if (!b) goto fault;
cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT);
return 0;
fault:
if (cwmp_create_fault_message(session, rpc, FAULT_CPE_INTERNAL_ERROR))
goto error;
return 0;
error:
return -1;
}
/*
* [RPC CPE]: CancelTransfer
*/