diff --git a/cwmp.c b/cwmp.c index c736802..9b71d8e 100644 --- a/cwmp.c +++ b/cwmp.c @@ -29,6 +29,14 @@ struct cwmp cwmp_main = {0}; char *commandKey = NULL; +#ifndef TR098 +unsigned int end_session_flag = 0; + +void cwmp_set_end_session(unsigned int flag) +{ + end_session_flag |= flag; +} +#endif int cwmp_dm_ctx_init(struct cwmp *cwmp, struct dmctx *ctx) { if(cwmp->conf.supported_amd_version == 0) diff --git a/inc/cwmp.h b/inc/cwmp.h index d481f09..5df204c 100644 --- a/inc/cwmp.h +++ b/inc/cwmp.h @@ -27,6 +27,7 @@ #include #include #include +extern unsigned int end_session_flag; #endif #define MAX_EVENTS 64 @@ -115,6 +116,21 @@ enum event_type_enum { EVENT_TYPE_MULTIPLE = 0x1 }; +enum end_session_enum { + END_SESSION_REBOOT = 1, + END_SESSION_EXTERNAL_ACTION = 1<<1, + END_SESSION_RELOAD = 1<<2, + END_SESSION_FACTORY_RESET = 1<<3, + 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, + END_SESSION_NSLOOKUP_DIAGNOSTIC = 1<<8, + END_SESSION_TRACEROUTE_DIAGNOSTIC = 1<<9, + END_SESSION_UDPECHO_DIAGNOSTIC = 1<<10, + END_SESSION_SERVERSELECTION_DIAGNOSTIC = 1<<11 +}; + enum event_idx_enum { EVENT_IDX_0BOOTSTRAP, EVENT_IDX_1BOOT, @@ -322,4 +338,7 @@ int cwmp_init(int argc, char** argv,struct cwmp *cwmp); int cwmp_exit(void); void add_list_value_change(char *param_name, char *param_data, char *param_type); void send_active_value_change(void); +#ifndef TR098 +void cwmp_set_end_session(unsigned int flag); +#endif #endif /* _CWMP_H__ */ diff --git a/xml.c b/xml.c index c5bcbd5..e308aa6 100644 --- a/xml.c +++ b/xml.c @@ -1562,6 +1562,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct session *session, struct rpc } if (parameter_name && parameter_value) { int e = dm_entry_param_method(&dmctx, CMD_SET_VALUE, parameter_name, parameter_value, NULL); + cwmp_set_end_session(dmctx.end_session_flag); if (e) { fault_code = FAULT_CPE_INVALID_ARGUMENTS; } @@ -1684,6 +1685,7 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct session *session, struct } if (attr_notification_update && parameter_name && parameter_notification) { int e = dm_entry_param_method(&dmctx, CMD_SET_NOTIFICATION, parameter_name, parameter_notification, attr_notification_update); + cwmp_set_end_session(dmctx.end_session_flag); if (e) { fault_code = cwmp_get_fault_code(e); goto fault;