diff --git a/src/autonomous_complpolicy.c b/src/autonomous_complpolicy.c index 059ad04..b9c4bf0 100644 --- a/src/autonomous_complpolicy.c +++ b/src/autonomous_complpolicy.c @@ -31,9 +31,11 @@ struct autonomous_event { char name[2048]; }; -static void free_autonomous_du_state_change_complete_data(auto_du_state_change_compl *p); static void free_autonomous_transfer_complete_data(auto_transfer_complete *p); +#ifdef ICWMP_ENABLE_SMM_SUPPORT +static void free_autonomous_du_state_change_complete_data(auto_du_state_change_compl *p); + static bool validate_du_state_change_data(auto_du_state_change_compl *data) { @@ -173,6 +175,7 @@ static void send_du_state_change_notif(struct blob_attr *msg) } } } +#endif bool validate_transfer_complete_data(auto_transfer_complete *data) { @@ -283,7 +286,9 @@ static void send_transfer_complete_notif(struct blob_attr *msg) } static struct autonomous_event event_info[] = { +#ifdef ICWMP_ENABLE_SMM_SUPPORT { send_du_state_change_notif, "Device.SoftwareModules.DUStateChange!" }, +#endif { send_transfer_complete_notif, "Device.LocalAgent.TransferComplete!" } }; @@ -323,6 +328,7 @@ void autonomous_notification_handler(struct ubus_context *ctx __attribute__((unu } } +#ifdef ICWMP_ENABLE_SMM_SUPPORT void free_autonomous_du_state_change_complete_data(auto_du_state_change_compl *p) { if (p == NULL) @@ -336,6 +342,7 @@ void free_autonomous_du_state_change_complete_data(auto_du_state_change_compl *p FREE(p->operation); FREE(p); } +#endif void free_autonomous_transfer_complete_data(auto_transfer_complete *p) { @@ -350,6 +357,8 @@ void free_autonomous_transfer_complete_data(auto_transfer_complete *p) FREE(p->target_file_name); FREE(p); } + +#ifdef ICWMP_ENABLE_SMM_SUPPORT int cwmp_rpc_acs_destroy_data_autonomous_du_state_change_complete(struct rpc *rpc) { if (rpc == NULL) @@ -363,6 +372,7 @@ int cwmp_rpc_acs_destroy_data_autonomous_du_state_change_complete(struct rpc *rp return 0; } +#endif int cwmp_rpc_acs_destroy_data_autonomous_transfer_complete(struct rpc *rpc) { diff --git a/src/backupSession.c b/src/backupSession.c index 916b6a0..b3f8682 100644 --- a/src/backupSession.c +++ b/src/backupSession.c @@ -591,6 +591,7 @@ static void load_upload(mxml_node_t *tree) cwmp_set_end_session(END_SESSION_UPLOAD); } +#ifdef ICWMP_ENABLE_SMM_SUPPORT static void load_change_du_state(mxml_node_t *tree) { if (tree == NULL) { @@ -630,27 +631,6 @@ void load_du_state_change_complete(mxml_node_t *tree) cwmp_root_cause_changedustate_complete(du_state_change_complete_request); } -static void load_transfer_complete(mxml_node_t *tree) -{ - struct transfer_complete *ptransfer_complete; - - ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); - - struct xml_data_struct bkp_xml_transfer_complete = {0}; - bkp_xml_transfer_complete.command_key = &ptransfer_complete->command_key; - bkp_xml_transfer_complete.start_time = &ptransfer_complete->start_time; - bkp_xml_transfer_complete.complete_time = &ptransfer_complete->complete_time; - bkp_xml_transfer_complete.old_software_version = &ptransfer_complete->old_software_version; - bkp_xml_transfer_complete.fault_code = &ptransfer_complete->fault_code; - bkp_xml_transfer_complete.fault_string = &ptransfer_complete->fault_string; - bkp_xml_transfer_complete.type = &ptransfer_complete->type; - - load_xml_node_data(BKP_TRANSFER_COMPLETE, tree, &bkp_xml_transfer_complete); - - cwmp_root_cause_transfer_complete(ptransfer_complete); - sotfware_version_value_change(ptransfer_complete); -} - static void load_autonomous_du_state_change_complete(mxml_node_t *tree) { auto_du_state_change_compl *p; @@ -672,6 +652,28 @@ static void load_autonomous_du_state_change_complete(mxml_node_t *tree) cwmp_root_cause_autonomous_cdu_complete(p); } +#endif + +static void load_transfer_complete(mxml_node_t *tree) +{ + struct transfer_complete *ptransfer_complete; + + ptransfer_complete = calloc(1, sizeof(struct transfer_complete)); + + struct xml_data_struct bkp_xml_transfer_complete = {0}; + bkp_xml_transfer_complete.command_key = &ptransfer_complete->command_key; + bkp_xml_transfer_complete.start_time = &ptransfer_complete->start_time; + bkp_xml_transfer_complete.complete_time = &ptransfer_complete->complete_time; + bkp_xml_transfer_complete.old_software_version = &ptransfer_complete->old_software_version; + bkp_xml_transfer_complete.fault_code = &ptransfer_complete->fault_code; + bkp_xml_transfer_complete.fault_string = &ptransfer_complete->fault_string; + bkp_xml_transfer_complete.type = &ptransfer_complete->type; + + load_xml_node_data(BKP_TRANSFER_COMPLETE, tree, &bkp_xml_transfer_complete); + + cwmp_root_cause_transfer_complete(ptransfer_complete); + sotfware_version_value_change(ptransfer_complete); +} static void load_autonomous_transfer_complete(mxml_node_t *tree) { @@ -739,14 +741,16 @@ int cwmp_load_saved_session(char **ret, enum backup_loading load) load_transfer_complete(b); } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "schedule_inform") == 0) { load_schedule_inform(b); +#ifdef ICWMP_ENABLE_SMM_SUPPORT } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "change_du_state") == 0) { load_change_du_state(b); } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "du_state_change_complete") == 0) { load_du_state_change_complete(b); - } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "schedule_download") == 0) { - load_schedule_download(b); } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "autonomous_du_state_change_complete") == 0) { load_autonomous_du_state_change_complete(b); +#endif + } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "schedule_download") == 0) { + load_schedule_download(b); } else if (ntype == MXML_ELEMENT && CWMP_STRCMP(elem_name, "autonomous_transfer_complete") == 0) { load_autonomous_transfer_complete(b); } diff --git a/src/cwmp.c b/src/cwmp.c index 9c91141..812e005 100644 --- a/src/cwmp.c +++ b/src/cwmp.c @@ -272,7 +272,9 @@ void cwmp_exit() uloop_timeout_cancel(&heartbeat_session_timer); clean_autonomous_complpolicy(); clean_interface_update(); +#ifdef ICWMP_ENABLE_SMM_SUPPORT clean_du_uuid_list(); +#endif clean_force_inform_list(); FREE(cwmp_ctx.ev); FREE(cwmp_ctx.intf_ev); diff --git a/src/cwmp_du_state.c b/src/cwmp_du_state.c index bcd568a..e6434e8 100644 --- a/src/cwmp_du_state.c +++ b/src/cwmp_du_state.c @@ -9,6 +9,7 @@ * */ +#ifdef ICWMP_ENABLE_SMM_SUPPORT #include #include #include @@ -804,3 +805,4 @@ void clean_du_uuid_list(void) free(tmp); } } +#endif diff --git a/src/cwmp_du_state.h b/src/cwmp_du_state.h index 8bf83bd..14c5b8b 100644 --- a/src/cwmp_du_state.h +++ b/src/cwmp_du_state.h @@ -12,6 +12,7 @@ #ifndef CWMP_DU_STATE_H #define CWMP_DU_STATE_H +#ifdef ICWMP_ENABLE_SMM_SUPPORT #include "common.h" #define CDU_TIMEOUT 86400 //24 hours @@ -25,4 +26,6 @@ void apply_change_du_state(); void remove_node_from_uuid_list(const char *uuid, const char *operation); bool exists_in_uuid_list(char *uuid, char *operation); void clean_du_uuid_list(void); +#endif // ICWMP_ENABLE_SMM_SUPPORT + #endif diff --git a/src/event.c b/src/event.c index 4edcc30..ba1843f 100644 --- a/src/event.c +++ b/src/event.c @@ -35,8 +35,10 @@ const struct EVENT_CONST_STRUCT EVENT_CONST[] = { [EVENT_IDX_8DIAGNOSTICS_COMPLETE] = { "8 DIAGNOSTICS COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL }, [EVENT_IDX_9REQUEST_DOWNLOAD] = { "9 REQUEST DOWNLOAD", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE] = { "10 AUTONOMOUS TRANSFER COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, +#ifdef ICWMP_ENABLE_SMM_SUPPORT [EVENT_IDX_11DU_STATE_CHANGE_COMPLETE] = { "11 DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE] = { "12 AUTONOMOUS DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, +#endif [EVENT_IDX_13WAKEUP] = { "13 WAKEUP", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_14HEARTBEAT] = { "14 HEARTBEAT", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_M_Reboot] = { "M Reboot", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, @@ -44,7 +46,9 @@ const struct EVENT_CONST_STRUCT EVENT_CONST[] = { [EVENT_IDX_M_Download] = { "M Download", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_M_Schedule_Download] = { "M ScheduleDownload", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, [EVENT_IDX_M_Upload] = { "M Upload", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT }, +#ifdef ICWMP_ENABLE_SMM_SUPPORT [EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } +#endif }; void cwmp_save_event_container(struct event_container *event_container) @@ -178,6 +182,7 @@ int cwmp_root_cause_transfer_complete(struct transfer_complete *p) return CWMP_OK; } +#ifdef ICWMP_ENABLE_SMM_SUPPORT int cwmp_root_cause_autonomous_cdu_complete(auto_du_state_change_compl *p) { struct event_container *event_container; @@ -196,6 +201,7 @@ int cwmp_root_cause_autonomous_cdu_complete(auto_du_state_change_compl *p) rpc_acs->extra_data = (void *)p; return CWMP_OK; } +#endif int cwmp_root_cause_autonomous_transfer_complete(auto_transfer_complete *p) { @@ -216,6 +222,7 @@ int cwmp_root_cause_autonomous_transfer_complete(auto_transfer_complete *p) return CWMP_OK; } +#ifdef ICWMP_ENABLE_SMM_SUPPORT int cwmp_root_cause_changedustate_complete(struct du_state_change_complete *p) { struct event_container *event_container; @@ -241,6 +248,7 @@ int cwmp_root_cause_changedustate_complete(struct du_state_change_complete *p) rpc_acs->extra_data = (void *)p; return CWMP_OK; } +#endif int cwmp_root_cause_schedule_inform(struct schedule_inform *schedule_inform) { @@ -411,12 +419,13 @@ int cwmp_get_int_event_code(const char *code) else if (CWMP_STRNCMP(code, "10", 2) == 0) return EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE; - +#ifdef ICWMP_ENABLE_SMM_SUPPORT else if (CWMP_STRNCMP(code, "11", 2) == 0) return EVENT_IDX_11DU_STATE_CHANGE_COMPLETE; else if (CWMP_STRNCMP(code, "12", 2) == 0) return EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE; +#endif else if (CWMP_STRNCMP(code, "13", 2) == 0) return EVENT_IDX_13WAKEUP; @@ -439,8 +448,10 @@ int cwmp_get_int_event_code(const char *code) else if (CWMP_STRCMP(code, "M Upload") == 0) return EVENT_IDX_M_Upload; +#ifdef ICWMP_ENABLE_SMM_SUPPORT else if (CWMP_STRCMP(code, "M ChangeDUState") == 0) return EVENT_IDX_M_ChangeDUState; +#endif else return EVENT_IDX_6CONNECTION_REQUEST; diff --git a/src/event.h b/src/event.h index 761e38f..3105cdf 100644 --- a/src/event.h +++ b/src/event.h @@ -75,8 +75,10 @@ int cwmp_get_int_event_code(const char *code); bool event_exist_in_list(int event); int cwmp_root_cause_events(void); int cwmp_root_cause_transfer_complete(struct transfer_complete *p); -int cwmp_root_cause_changedustate_complete(struct du_state_change_complete *p); int cwmp_root_cause_schedule_inform(struct schedule_inform *schedule_inform); -int cwmp_root_cause_autonomous_cdu_complete(auto_du_state_change_compl *p); int cwmp_root_cause_autonomous_transfer_complete(auto_transfer_complete *p); +#ifdef ICWMP_ENABLE_SMM_SUPPORT +int cwmp_root_cause_changedustate_complete(struct du_state_change_complete *p); +int cwmp_root_cause_autonomous_cdu_complete(auto_du_state_change_compl *p); +#endif // ICWMP_ENABLE_SMM_SUPPORT #endif /* SRC_INC_EVENT_H_ */ diff --git a/src/rpc.c b/src/rpc.c index 77d3d42..d258bc1 100755 --- a/src/rpc.c +++ b/src/rpc.c @@ -46,16 +46,18 @@ static int cancel_transfer(char *key); static int cwmp_handle_rpc_cpe_cancel_transfer(struct rpc *rpc); static int cwmp_handle_rpc_cpe_schedule_inform(struct rpc *rpc); static int cwmp_handle_rpc_cpe_schedule_download(struct rpc *rpc); -static int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc); static int cwmp_handle_rpc_cpe_fault(struct rpc *rpc); static int cwmp_create_fault_message(struct rpc *rpc_cpe, int fault_code, const char *fault_msg); static int cwmp_rpc_acs_parse_response_inform(struct rpc *rpc); static int cwmp_rpc_acs_parse_response_get_rpc_methods(struct rpc *this); static int cwmp_rpc_acs_prepare_get_rpc_methods(struct rpc *rpc); static int cwmp_rpc_acs_prepare_transfer_complete(struct rpc *rpc); +static int cwmp_rpc_acs_prepare_autonomous_transfer_complete(struct rpc *rpc); +#ifdef ICWMP_ENABLE_SMM_SUPPORT +static int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc); static int cwmp_rpc_acs_prepare_du_state_change_complete(struct rpc *rpc); static int cwmp_rpc_acs_prepare_autonomous_du_state_change_complete(struct rpc *rpc); -static int cwmp_rpc_acs_prepare_autonomous_transfer_complete(struct rpc *rpc); +#endif struct cwmp_namespaces ns; const struct rpc_cpe_method rpc_cpe_methods[] = { @@ -74,7 +76,9 @@ const struct rpc_cpe_method rpc_cpe_methods[] = { [RPC_CPE_CANCEL_TRANSFER] = { "CancelTransfer", cwmp_handle_rpc_cpe_cancel_transfer, AMD_3 }, [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 }, +#ifdef ICWMP_ENABLE_SMM_SUPPORT [RPC_CPE_CHANGE_DU_STATE] = { "ChangeDUState", cwmp_handle_rpc_cpe_change_du_state, AMD_3 }, +#endif [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 } }; @@ -84,8 +88,10 @@ struct rpc_acs_method rpc_acs_methods[] = { [RPC_ACS_GET_RPC_METHODS] = { "GetRPCMethods", cwmp_rpc_acs_prepare_get_rpc_methods, cwmp_rpc_acs_parse_response_get_rpc_methods, NULL, NOT_KNOWN }, [RPC_ACS_TRANSFER_COMPLETE] = { "TransferComplete", cwmp_rpc_acs_prepare_transfer_complete, NULL, cwmp_rpc_acs_destroy_data_transfer_complete, NOT_KNOWN }, [RPC_ACS_AUTONOMOUS_TRANSFER_COMPLETE] = { "AutonomousTransferComplete", cwmp_rpc_acs_prepare_autonomous_transfer_complete, NULL, cwmp_rpc_acs_destroy_data_autonomous_transfer_complete, NOT_KNOWN }, +#ifdef ICWMP_ENABLE_SMM_SUPPORT [RPC_ACS_DU_STATE_CHANGE_COMPLETE] = { "DUStateChangeComplete", cwmp_rpc_acs_prepare_du_state_change_complete, NULL, cwmp_rpc_acs_destroy_data_du_state_change_complete, NOT_KNOWN }, [RPC_ACS_AUTONOMOUS_DU_STATE_CHANGE_COMPLETE] = { "AutonomousDUStateChangeComplete", cwmp_rpc_acs_prepare_autonomous_du_state_change_complete, NULL, cwmp_rpc_acs_destroy_data_autonomous_du_state_change_complete, NOT_KNOWN } +#endif }; static char *forced_inform_parameters[] = { @@ -751,6 +757,9 @@ int cwmp_rpc_acs_prepare_autonomous_transfer_complete(struct rpc *rpc) error: return -1; } + + +#ifdef ICWMP_ENABLE_SMM_SUPPORT /* * [RPC ACS]: DUStateChangeComplete */ @@ -852,6 +861,8 @@ error: return -1; } +#endif + /* * [RPC CPE]: GetParameterValues */ @@ -1793,6 +1804,7 @@ fault: /* * [RPC CPE]: ChangeDuState */ +#ifdef ICWMP_ENABLE_SMM_SUPPORT int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc) { mxml_node_t *n, *t; @@ -1871,6 +1883,7 @@ fault: error: return -1; } +#endif /* * [RPC CPE]: Download diff --git a/src/session.c b/src/session.c index 6dd0768..82e64d4 100644 --- a/src/session.c +++ b/src/session.c @@ -531,9 +531,11 @@ void cwmp_schedule_session_with_event(struct uloop_timeout *timeout) if (session_event->event == TransferClt_Evt) { struct transfer_complete *ptransfer_complete = (struct transfer_complete *)session_event->extra_data; cwmp_root_cause_transfer_complete(ptransfer_complete); +#ifdef ICWMP_ENABLE_SMM_SUPPORT } else if (session_event->event == CDU_Evt) { struct du_state_change_complete *pdu_state_change_complete = (struct du_state_change_complete *)session_event->extra_data; cwmp_root_cause_changedustate_complete(pdu_state_change_complete); +#endif } else if (session_event->event == Schedule_Inform_Evt) { struct schedule_inform *schedule_inform = (struct schedule_inform *)session_event->extra_data; cwmp_root_cause_schedule_inform(schedule_inform); @@ -546,9 +548,11 @@ void cwmp_schedule_session_with_event(struct uloop_timeout *timeout) } else if (session_event->event == EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE) { auto_transfer_complete *auto_trnsfr_complete = (auto_transfer_complete *)session_event->extra_data; cwmp_root_cause_autonomous_transfer_complete(auto_trnsfr_complete); +#ifdef ICWMP_ENABLE_SMM_SUPPORT } else if (session_event->event == EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE) { auto_du_state_change_compl *data = (auto_du_state_change_compl *)session_event->extra_data; cwmp_root_cause_autonomous_cdu_complete(data); +#endif } else if (session_event->event >= 0) { struct event_container *event_container = NULL; event_container = cwmp_add_event_container(session_event->event, ""); @@ -781,10 +785,12 @@ int run_session_end_func(void) apply_schedule_inform(); } +#ifdef ICWMP_ENABLE_SMM_SUPPORT if (end_session_flag & END_SESSION_CDU) { CWMP_LOG(INFO, "Apply CDU Calls"); apply_change_du_state(); } +#endif if (cwmp_ctx.heart_session) { uloop_timeout_cancel(&heartbeat_session_timer);