mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2026-03-14 21:10:02 +01:00
Ticket refs #9261: icwmp: apply new xml functions for backupsession
This commit is contained in:
parent
9d0dde4cf8
commit
84e632371c
15 changed files with 1101 additions and 1143 deletions
|
|
@ -149,7 +149,11 @@ static void send_du_state_change_notif(struct blob_attr *msg)
|
|||
free_autonomous_du_state_change_complete_data(data);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((cwmp_main->auto_cdu_id < 0) || (cwmp_main->auto_cdu_id >= MAX_INT_ID)) {
|
||||
cwmp_main->auto_cdu_id = 0;
|
||||
}
|
||||
cwmp_main->auto_cdu_id++;
|
||||
data->id = cwmp_main->auto_cdu_id;
|
||||
bkp_session_insert_autonomous_du_state_change(data);
|
||||
bkp_session_save();
|
||||
|
||||
|
|
@ -251,7 +255,11 @@ static void send_transfer_complete_notif(struct blob_attr *msg)
|
|||
free_autonomous_transfer_complete_data(data);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((cwmp_main->auto_tc_id < 0) || (cwmp_main->auto_tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->auto_tc_id = 0;
|
||||
}
|
||||
cwmp_main->auto_tc_id++;
|
||||
data->id = cwmp_main->auto_tc_id;
|
||||
bkp_session_insert_autonomous_transfer_complete(data);
|
||||
bkp_session_save();
|
||||
|
||||
|
|
@ -337,7 +345,7 @@ int cwmp_rpc_acs_destroy_data_autonomous_du_state_change_complete(struct rpc *rp
|
|||
{
|
||||
auto_du_state_change_compl *p = (auto_du_state_change_compl *)rpc->extra_data;
|
||||
if (p) {
|
||||
bkp_session_delete_autonomous_du_state_change(p);
|
||||
bkp_session_delete_element("autonomous_du_state_change_complete", p->id);
|
||||
free_autonomous_du_state_change_complete_data(p);
|
||||
}
|
||||
|
||||
|
|
@ -348,7 +356,7 @@ int cwmp_rpc_acs_destroy_data_autonomous_transfer_complete(struct rpc *rpc)
|
|||
{
|
||||
auto_transfer_complete *p = (auto_transfer_complete *)rpc->extra_data;
|
||||
if (p) {
|
||||
bkp_session_delete_autonomous_transfer_complete(p);
|
||||
bkp_session_delete_element("autonomous_transfer_complete", p->id);
|
||||
free_autonomous_transfer_complete_data(p);
|
||||
}
|
||||
|
||||
|
|
|
|||
1683
src/backupSession.c
1683
src/backupSession.c
File diff suppressed because it is too large
Load diff
|
|
@ -38,32 +38,25 @@ struct search_keywords {
|
|||
};
|
||||
|
||||
int cwmp_init_backup_session(char **ret, enum backup_loading load);
|
||||
int bkp_session_check_file();
|
||||
void bkp_session_save();
|
||||
int cwmp_load_saved_session(char **acsurl, enum backup_loading load);
|
||||
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id);
|
||||
void bkp_session_delete_event(int id);
|
||||
void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value);
|
||||
void bkp_session_insert_parameter(mxml_node_t *b, char *name);
|
||||
void bkp_session_simple_insert(char *parent, char *child, char *value);
|
||||
void bkp_session_insert_schedule_inform(time_t schedule_time, char *command_key);
|
||||
void bkp_session_delete_schedule_inform(time_t schedule_time, char *command_key);
|
||||
void bkp_session_insert_download(struct download *pdownload);
|
||||
void bkp_session_delete_download(struct download *pdownload);
|
||||
void bkp_session_insert_upload(struct upload *pupload);
|
||||
void bkp_session_delete_upload(struct upload *pupload);
|
||||
void bkp_session_insert_change_du_state(struct change_du_state *pchange_du_state);
|
||||
void bkp_session_delete_change_du_state(struct change_du_state *pchange_du_state);
|
||||
void bkp_session_insert_transfer_complete(struct transfer_complete *ptransfer_complete);
|
||||
void bkp_session_delete_transfer_complete(struct transfer_complete *ptransfer_complete);
|
||||
int save_acs_bkp_config();
|
||||
mxml_node_t *bkp_session_insert(mxml_node_t *tree, char *name, char *value);
|
||||
void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value);
|
||||
void bkp_session_simple_insert(char *parent, char *child, char *value);
|
||||
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id);
|
||||
void bkp_session_insert_schedule_inform(int id, time_t schedule_time, char *command_key);
|
||||
void bkp_session_insert_download(struct download *pdownload);
|
||||
void bkp_session_insert_upload(struct upload *pupload);
|
||||
void bkp_session_insert_change_du_state(struct change_du_state *pchange_du_state);
|
||||
void bkp_session_insert_transfer_complete(struct transfer_complete *ptransfer_complete);
|
||||
|
||||
void bkp_session_insert_schedule_download(struct download *pschedule_download);
|
||||
void bkp_session_delete_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete);
|
||||
void bkp_session_delete_schedule_download(struct download *pschedule_download);
|
||||
void bkp_session_insert_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete);
|
||||
void bkp_session_insert_autonomous_du_state_change(auto_du_state_change_compl *data);
|
||||
void bkp_session_delete_autonomous_du_state_change(auto_du_state_change_compl *data);
|
||||
void bkp_session_insert_autonomous_transfer_complete(auto_transfer_complete *data);
|
||||
void bkp_session_delete_autonomous_transfer_complete(auto_transfer_complete *data);
|
||||
void bkp_session_delete_element(char *element_name, int id);
|
||||
void bkp_session_delete_element_by_key(char *element_name, char *key_name, char *key_value);
|
||||
void bkp_tree_clean(void);
|
||||
#endif /* _BACKUPSESSION_H__ */
|
||||
|
|
|
|||
18
src/common.h
18
src/common.h
|
|
@ -167,6 +167,15 @@ typedef struct cwmp {
|
|||
time_t prev_heartbeat_time;
|
||||
unsigned int cwmp_id;
|
||||
int event_id;
|
||||
int sched_inform_id;
|
||||
int download_id;
|
||||
int sched_download_id;
|
||||
int cdu_id;
|
||||
int upload_id;
|
||||
int auto_cdu_id;
|
||||
int auto_tc_id;
|
||||
int cdu_complete_id;
|
||||
int tc_id;
|
||||
int cr_socket_desc;
|
||||
int cwmp_period;
|
||||
long int heart_session_interval;
|
||||
|
|
@ -408,6 +417,7 @@ typedef struct schedule_inform {
|
|||
struct uloop_timeout handler_timer ;
|
||||
time_t scheduled_time;
|
||||
char *commandKey;
|
||||
int id;
|
||||
} schedule_inform;
|
||||
|
||||
typedef struct timewindow {
|
||||
|
|
@ -429,6 +439,7 @@ typedef struct download {
|
|||
char *username;
|
||||
char *password;
|
||||
struct timewindow timewindowstruct[2];
|
||||
int id;
|
||||
} download;
|
||||
|
||||
typedef struct timeinterval {
|
||||
|
|
@ -443,6 +454,7 @@ typedef struct change_du_state {
|
|||
time_t timeout;
|
||||
char *command_key;
|
||||
struct list_head list_operation;
|
||||
int id;
|
||||
} change_du_state;
|
||||
|
||||
typedef struct du_operational_uuid {
|
||||
|
|
@ -472,6 +484,7 @@ typedef struct upload {
|
|||
char *username;
|
||||
char *password;
|
||||
int f_instance;
|
||||
int id;
|
||||
} upload;
|
||||
|
||||
typedef struct transfer_complete {
|
||||
|
|
@ -480,7 +493,9 @@ typedef struct transfer_complete {
|
|||
char *start_time;
|
||||
char *complete_time;
|
||||
char *old_software_version;
|
||||
char *file_type;
|
||||
int type;
|
||||
int id;
|
||||
} transfer_complete;
|
||||
|
||||
typedef struct autonomous_du_state_change_complete {
|
||||
|
|
@ -493,6 +508,7 @@ typedef struct autonomous_du_state_change_complete {
|
|||
int fault_code;
|
||||
char *fault_string;
|
||||
char *operation;
|
||||
int id;
|
||||
} auto_du_state_change_compl;
|
||||
|
||||
typedef struct autonomous_transfer_complete {
|
||||
|
|
@ -506,6 +522,7 @@ typedef struct autonomous_transfer_complete {
|
|||
int fault_code;
|
||||
bool is_download;
|
||||
int file_size;
|
||||
int id;
|
||||
|
||||
} auto_transfer_complete;
|
||||
|
||||
|
|
@ -513,6 +530,7 @@ typedef struct du_state_change_complete {
|
|||
char *command_key;
|
||||
time_t timeout;
|
||||
struct list_head list_opresult;
|
||||
int id;
|
||||
} du_state_change_complete;
|
||||
|
||||
typedef struct opresult {
|
||||
|
|
|
|||
|
|
@ -258,6 +258,15 @@ static int cwmp_init()
|
|||
INIT_LIST_HEAD(&du_uuid_list);
|
||||
cwmp_main->start_time = time(NULL);
|
||||
cwmp_main->event_id = 0;
|
||||
cwmp_main->sched_inform_id = 0;
|
||||
cwmp_main->download_id = 0;
|
||||
cwmp_main->sched_download_id = 0;
|
||||
cwmp_main->cdu_id = 0;
|
||||
cwmp_main->upload_id = 0;
|
||||
cwmp_main->auto_cdu_id = 0;
|
||||
cwmp_main->auto_tc_id = 0;
|
||||
cwmp_main->cdu_complete_id = 0;
|
||||
cwmp_main->tc_id = 0;
|
||||
cwmp_main->cwmp_period = 0;
|
||||
cwmp_main->cwmp_periodic_time = 0;
|
||||
cwmp_main->cwmp_periodic_enable = false;
|
||||
|
|
|
|||
|
|
@ -419,6 +419,11 @@ int change_du_state_fault(struct change_du_state *pchange_du_state, struct du_st
|
|||
res->complete_time = strdup(res->start_time);
|
||||
res->fault = error;
|
||||
}
|
||||
if ((cwmp_main->cdu_complete_id < 0) || (cwmp_main->cdu_complete_id >= MAX_INT_ID)) {
|
||||
cwmp_main->cdu_complete_id = 0;
|
||||
}
|
||||
cwmp_main->cdu_complete_id++;
|
||||
(*pdu_state_change_complete)->id = cwmp_main->cdu_complete_id;
|
||||
bkp_session_insert_du_state_change_complete(*pdu_state_change_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_changedustate_complete(*pdu_state_change_complete);
|
||||
|
|
@ -595,8 +600,13 @@ void change_du_state_execute(struct uloop_timeout *utimeout)
|
|||
break;
|
||||
}
|
||||
}
|
||||
bkp_session_delete_change_du_state(pchange_du_state);
|
||||
bkp_session_delete_element("change_du_state", pchange_du_state->id);
|
||||
bkp_session_save();
|
||||
if ((cwmp_main->cdu_complete_id < 0) || (cwmp_main->cdu_complete_id >= MAX_INT_ID)) {
|
||||
cwmp_main->cdu_complete_id = 0;
|
||||
}
|
||||
cwmp_main->cdu_complete_id++;
|
||||
pdu_state_change_complete->id = cwmp_main->cdu_complete_id;
|
||||
bkp_session_insert_du_state_change_complete(pdu_state_change_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_changedustate_complete(pdu_state_change_complete);
|
||||
|
|
@ -616,7 +626,7 @@ int cwmp_rpc_acs_destroy_data_du_state_change_complete(struct rpc *rpc)
|
|||
if (rpc->extra_data != NULL) {
|
||||
struct du_state_change_complete *p;
|
||||
p = (struct du_state_change_complete *)rpc->extra_data;
|
||||
bkp_session_delete_du_state_change_complete(p);
|
||||
bkp_session_delete_element("du_state_change_complete", p->id);
|
||||
bkp_session_save();
|
||||
FREE(p->command_key);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ int cwmp_remove_all_session_events()
|
|||
events_ptr = events_ptr->next;
|
||||
continue;
|
||||
}
|
||||
bkp_session_delete_event(event_container->id);
|
||||
bkp_session_delete_element("cwmp_event", event_container->id);
|
||||
free(event_container->command_key);
|
||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
||||
list_del(&(event_container->list));
|
||||
|
|
@ -91,7 +91,7 @@ int remove_single_event(int event_code)
|
|||
if (event_container->next_session)
|
||||
continue;
|
||||
if (event_container->code == event_code) {
|
||||
bkp_session_delete_event(event_container->id);
|
||||
bkp_session_delete_element("cwmp_event",event_container->id);
|
||||
if (event_container->command_key)
|
||||
free(event_container->command_key);
|
||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
||||
|
|
|
|||
|
|
@ -374,7 +374,7 @@ int cwmp_launch_download(struct download *pdownload, char *download_file_name, e
|
|||
|
||||
download_startTime = get_time(time(NULL));
|
||||
|
||||
ltype == TYPE_DOWNLOAD ? bkp_session_delete_download(pdownload) : bkp_session_delete_schedule_download(pdownload);
|
||||
bkp_session_delete_element((ltype == TYPE_DOWNLOAD) ? "download" : "schedule_download", pdownload->id);
|
||||
bkp_session_save();
|
||||
|
||||
if (flashsize < pdownload->file_size) {
|
||||
|
|
@ -449,6 +449,7 @@ end_download:
|
|||
p->start_time = strdup(download_startTime);
|
||||
p->complete_time = strdup(get_time(time(NULL)));
|
||||
p->type = ltype;
|
||||
p->file_type = strdup(pdownload->file_type);
|
||||
if (error != FAULT_CPE_NO_FAULT) {
|
||||
p->fault_code = error;
|
||||
}
|
||||
|
|
@ -475,6 +476,13 @@ int apply_downloaded_file(struct download *pdownload, char *download_file_name,
|
|||
if (pdownload->file_type[0] == '1') {
|
||||
ptransfer_complete->old_software_version = cwmp_main->deviceid.softwareversion;
|
||||
}
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
if (strcmp(pdownload->file_type, FIRMWARE_UPGRADE_IMAGE_FILE_TYPE) == 0) {
|
||||
|
|
@ -534,14 +542,21 @@ int apply_downloaded_file(struct download *pdownload, char *download_file_name,
|
|||
if (pdownload->file_type[0] == '3') {
|
||||
CWMP_LOG(INFO, "Download and apply new vendor config file is done successfully");
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
}
|
||||
return FAULT_CPE_NO_FAULT;
|
||||
}
|
||||
if (error != FAULT_CPE_NO_FAULT) {
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
ptransfer_complete->fault_code = error;
|
||||
}
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
|
|
@ -558,6 +573,13 @@ struct transfer_complete *set_download_error_transfer_complete(struct download *
|
|||
ptransfer_complete->complete_time = strdup(ptransfer_complete->start_time ? ptransfer_complete->start_time : "");
|
||||
ptransfer_complete->fault_code = ltype == TYPE_DOWNLOAD ? FAULT_CPE_DOWNLOAD_FAILURE : FAULT_CPE_DOWNLOAD_FAIL_WITHIN_TIME_WINDOW;
|
||||
ptransfer_complete->type = ltype;
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
}
|
||||
|
|
@ -623,7 +645,7 @@ int cwmp_scheduledDownload_remove_all()
|
|||
struct download *download;
|
||||
download = list_entry(list_download.next, struct download, list);
|
||||
list_del(&(download->list));
|
||||
bkp_session_delete_download(download);
|
||||
bkp_session_delete_element("schedule_download", download->id);
|
||||
if (download->scheduled_time != 0)
|
||||
count_download_queue--;
|
||||
cwmp_free_download_request(download);
|
||||
|
|
@ -638,7 +660,7 @@ int cwmp_scheduled_Download_remove_all()
|
|||
struct download *schedule_download;
|
||||
schedule_download = list_entry(list_schedule_download.next, struct download, list);
|
||||
list_del(&(schedule_download->list));
|
||||
bkp_session_delete_schedule_download(schedule_download);
|
||||
bkp_session_delete_element("schedule_download", schedule_download->id);
|
||||
if (schedule_download->timewindowstruct[0].windowstart != 0)
|
||||
count_download_queue--;
|
||||
cwmp_free_schedule_download_request(schedule_download);
|
||||
|
|
@ -651,12 +673,14 @@ int cwmp_rpc_acs_destroy_data_transfer_complete(struct rpc *rpc)
|
|||
{
|
||||
if (rpc && rpc->extra_data != NULL) {
|
||||
struct transfer_complete *p = (struct transfer_complete *)rpc->extra_data;
|
||||
bkp_session_delete_transfer_complete(p);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", p->start_time);
|
||||
|
||||
bkp_session_save();
|
||||
FREE(p->command_key);
|
||||
FREE(p->start_time);
|
||||
FREE(p->complete_time);
|
||||
FREE(p->old_software_version);
|
||||
FREE(p->file_type);
|
||||
}
|
||||
if (rpc)
|
||||
FREE(rpc->extra_data);
|
||||
|
|
@ -676,24 +700,38 @@ void cwmp_start_download(struct uloop_timeout *timeout)
|
|||
sleep(3);
|
||||
if (error != FAULT_CPE_NO_FAULT) {
|
||||
CWMP_LOG(ERROR, "Error while downloading the file: %s", pdownload->url);
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
//bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
} else {
|
||||
error = apply_downloaded_file(pdownload, download_file_name, ptransfer_complete);
|
||||
if (error != FAULT_CPE_NO_FAULT) {
|
||||
CWMP_LOG(ERROR, "Error while applying the downloaded file: %s", download_file_name);
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
//bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
}
|
||||
}
|
||||
if (error == FAULT_CPE_NO_FAULT && pdownload->file_type[0] == '3') {
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_download(pdownload);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
bkp_session_delete_element("download", pdownload->id);
|
||||
bkp_session_save();
|
||||
}
|
||||
list_del(&(pdownload->list));
|
||||
|
|
@ -768,8 +806,8 @@ void cwmp_start_schedule_download(struct uloop_timeout *timeout)
|
|||
}
|
||||
if (error == FAULT_CPE_NO_FAULT && sched_download->file_type[0] == '3') {
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_download(sched_download);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element("schedule_download", sched_download->id);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
bkp_session_save();
|
||||
}
|
||||
} else {
|
||||
|
|
@ -785,10 +823,17 @@ void cwmp_start_schedule_download(struct uloop_timeout *timeout)
|
|||
ptransfer_complete->complete_time = strdup(get_time(now));
|
||||
ptransfer_complete->type = TYPE_DOWNLOAD;
|
||||
ptransfer_complete->fault_code = FAULT_CPE_INTERNAL_ERROR;
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
@ -799,10 +844,17 @@ retry:
|
|||
sched_download->timewindowstruct[window_index].maxretries--;
|
||||
return;
|
||||
} else {
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
//cwmp_root_cause_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_transfer_complete(ptransfer_complete);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", ptransfer_complete->start_time);
|
||||
bkp_session_save();
|
||||
}
|
||||
list_del(&(sched_download->list));
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ const struct EVENT_CONST_STRUCT EVENT_CONST[] = {[EVENT_IDX_0BOOTSTRAP] = { "0 B
|
|||
[EVENT_IDX_M_Upload] = { "M Upload", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
||||
[EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } };
|
||||
|
||||
void cwmp_save_event_container(struct event_container *event_container) //to be moved to backupsession
|
||||
void cwmp_save_event_container(struct event_container *event_container)
|
||||
{
|
||||
if (event_container == NULL) {
|
||||
CWMP_LOG(ERROR, "event %s: event_container is null", __FUNCTION__);
|
||||
|
|
@ -60,7 +60,7 @@ void cwmp_save_event_container(struct event_container *event_container) //to be
|
|||
list_for_each (ilist, &(event_container->head_dm_parameter)) {
|
||||
struct cwmp_dm_parameter *dm_parameter;
|
||||
dm_parameter = list_entry(ilist, struct cwmp_dm_parameter, list);
|
||||
bkp_session_insert_parameter(b, dm_parameter->name);
|
||||
bkp_session_insert(b, "Parameter", dm_parameter->name);
|
||||
}
|
||||
bkp_session_save();
|
||||
}
|
||||
|
|
|
|||
31
src/rpc.c
31
src/rpc.c
|
|
@ -1428,7 +1428,7 @@ int cancel_transfer(char *key)
|
|||
list_for_each_safe (ilist, q, &(list_download)) {
|
||||
struct download *pdownload = list_entry(ilist, struct download, list);
|
||||
if (key && pdownload->command_key && strcmp(pdownload->command_key, key) == 0) {
|
||||
bkp_session_delete_download(pdownload);
|
||||
bkp_session_delete_element("download", pdownload->id);
|
||||
bkp_session_save();
|
||||
list_del(&(pdownload->list));
|
||||
if (pdownload->scheduled_time != 0)
|
||||
|
|
@ -1441,7 +1441,7 @@ int cancel_transfer(char *key)
|
|||
list_for_each_safe (ilist, q, &(list_upload)) {
|
||||
struct upload *pupload = list_entry(ilist, struct upload, list);
|
||||
if (key && pupload->command_key && strcmp(pupload->command_key, key) == 0) {
|
||||
bkp_session_delete_upload(pupload);
|
||||
bkp_session_delete_element("upload", pupload->id);
|
||||
bkp_session_save();
|
||||
list_del(&(pupload->list));
|
||||
if (pupload->scheduled_time != 0)
|
||||
|
|
@ -1557,8 +1557,13 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct rpc *rpc)
|
|||
schedule_inform->handler_timer.cb = cwmp_start_schedule_inform;
|
||||
schedule_inform->commandKey = CWMP_STRDUP(command_key);
|
||||
schedule_inform->scheduled_time = scheduled_time;
|
||||
if ((cwmp_main->sched_inform_id < 0) || (cwmp_main->sched_inform_id >= MAX_INT_ID)) {
|
||||
cwmp_main->sched_inform_id = 0;
|
||||
}
|
||||
cwmp_main->sched_inform_id++;
|
||||
schedule_inform->id = cwmp_main->sched_inform_id;
|
||||
list_add(&(schedule_inform->list), ilist->prev);
|
||||
bkp_session_insert_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey);
|
||||
bkp_session_insert_schedule_inform(schedule_inform->id, schedule_inform->scheduled_time, schedule_inform->commandKey);
|
||||
bkp_session_save();
|
||||
|
||||
FREE(command_key);
|
||||
|
|
@ -1626,6 +1631,11 @@ int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc)
|
|||
|
||||
change_du_state->handler_timer.cb = change_du_state_execute;
|
||||
list_add_tail(&(change_du_state->list), &(list_change_du_state));
|
||||
if ((cwmp_main->cdu_id < 0) || (cwmp_main->cdu_id >= MAX_INT_ID)) {
|
||||
cwmp_main->cdu_id = 0;
|
||||
}
|
||||
cwmp_main->cdu_id++;
|
||||
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);
|
||||
|
|
@ -1733,6 +1743,11 @@ int cwmp_handle_rpc_cpe_download(struct rpc *rpc)
|
|||
download->scheduled_time = scheduled_time;
|
||||
}
|
||||
download->handler_timer.cb = cwmp_start_download;
|
||||
if ((cwmp_main->download_id < 0) || (cwmp_main->download_id >= MAX_INT_ID)) {
|
||||
cwmp_main->download_id = 0;
|
||||
}
|
||||
cwmp_main->download_id++;
|
||||
download->id = cwmp_main->download_id;
|
||||
bkp_session_insert_download(download);
|
||||
bkp_session_save();
|
||||
if (download_delay != 0) {
|
||||
|
|
@ -1859,6 +1874,11 @@ int cwmp_handle_rpc_cpe_schedule_download(struct rpc *rpc)
|
|||
schedule_download->timewindowstruct[i].windowend = time(NULL) + schedule_download_delay[i * 2 + 1];
|
||||
}
|
||||
schedule_download->handler_timer.cb = cwmp_start_schedule_download;
|
||||
if ((cwmp_main->sched_download_id < 0) || (cwmp_main->sched_download_id >= MAX_INT_ID)) {
|
||||
cwmp_main->sched_download_id = 0;
|
||||
}
|
||||
cwmp_main->sched_download_id++;
|
||||
schedule_download->id = cwmp_main->sched_download_id;
|
||||
bkp_session_insert_schedule_download(schedule_download);
|
||||
bkp_session_save();
|
||||
if (schedule_download_delay[0] != 0) {
|
||||
|
|
@ -1976,6 +1996,11 @@ int cwmp_handle_rpc_cpe_upload(struct rpc *rpc)
|
|||
count_upload_queue++;
|
||||
upload->scheduled_time = scheduled_time;
|
||||
}
|
||||
if ((cwmp_main->upload_id < 0) || (cwmp_main->upload_id >= MAX_INT_ID)) {
|
||||
cwmp_main->upload_id = 0;
|
||||
}
|
||||
cwmp_main->upload_id++;
|
||||
upload->id = cwmp_main->upload_id;
|
||||
bkp_session_insert_upload(upload);
|
||||
bkp_session_save();
|
||||
upload->handler_timer.cb = cwmp_start_upload;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ int remove_schedule_inform(struct schedule_inform *schedule_inform)
|
|||
{
|
||||
if (schedule_inform != NULL) {
|
||||
list_del(&(schedule_inform->list));
|
||||
bkp_session_delete_schedule_inform(schedule_inform->scheduled_time, schedule_inform->commandKey ? schedule_inform->commandKey : "");
|
||||
bkp_session_delete_element("schedule_inform", schedule_inform->id);
|
||||
FREE(schedule_inform->commandKey);
|
||||
free(schedule_inform);
|
||||
}
|
||||
|
|
|
|||
12
src/upload.c
12
src/upload.c
|
|
@ -197,7 +197,7 @@ int cwmp_launch_upload(struct upload *pupload, struct transfer_complete **ptrans
|
|||
char *name = NULL;
|
||||
upload_startTime = get_time(time(NULL));
|
||||
char file_path[128] = {'\0'};
|
||||
bkp_session_delete_upload(pupload);
|
||||
bkp_session_delete_element("upload", pupload->id);
|
||||
bkp_session_save();
|
||||
|
||||
if (pupload->file_type[0] == '1') {
|
||||
|
|
@ -302,7 +302,7 @@ int cwmp_scheduledUpload_remove_all()
|
|||
struct upload *upload;
|
||||
upload = list_entry(list_upload.next, struct upload, list);
|
||||
list_del(&(upload->list));
|
||||
bkp_session_delete_upload(upload);
|
||||
bkp_session_delete_element("upload", upload->id);
|
||||
if (upload->scheduled_time != 0)
|
||||
count_upload_queue--;
|
||||
cwmp_free_upload_request(upload);
|
||||
|
|
@ -324,7 +324,13 @@ void cwmp_start_upload(struct uloop_timeout *timeout)
|
|||
if (error != FAULT_CPE_NO_FAULT) {
|
||||
CWMP_LOG(ERROR, "Error while uploading the file: %s", pupload->url);
|
||||
}
|
||||
|
||||
if (ptransfer_complete->id <= 0) {
|
||||
if ((cwmp_main->tc_id < 0) || (cwmp_main->tc_id >= MAX_INT_ID)) {
|
||||
cwmp_main->tc_id = 0;
|
||||
}
|
||||
cwmp_main->tc_id++;
|
||||
ptransfer_complete->id = cwmp_main->tc_id;
|
||||
}
|
||||
bkp_session_insert_transfer_complete(ptransfer_complete);
|
||||
bkp_session_save();
|
||||
list_del(&(pupload->list));
|
||||
|
|
|
|||
253
src/xml.c
253
src/xml.c
|
|
@ -18,6 +18,7 @@
|
|||
#include "cwmp_zlib.h"
|
||||
#include "common.h"
|
||||
#include "event.h"
|
||||
#include "cwmp_event.h"
|
||||
#include "datamodel_interface.h"
|
||||
|
||||
static const char *soap_env_url = "http://schemas.xmlsoap.org/soap/envelope/";
|
||||
|
|
@ -104,6 +105,40 @@ struct xml_node_data xml_nodes_data[] = {
|
|||
[SOAP_CDU_OPTS_REF] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, 0, NULL}, {"DeploymentUnitRef", XML_STRING, 0, NULL}, {"Version", XML_STRING, 0, NULL}, {"CurrentState", XML_STRING, 0, NULL}, {"StartTime", XML_STRING, 0, NULL}, {"CompleteTime", XML_STRING, 0, NULL}, {"FaultStruct", XML_REC, SOAP_CWMP_FAULT, NULL}}},
|
||||
[SOAP_ACDU_OPTS_REF] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, 0, NULL}, {"Version", XML_STRING, 0, NULL}, {"CurrentState", XML_STRING, 0, NULL}, {"Resolved", XML_BOOL, 0, NULL}, {"StartTime", XML_STRING, 0, NULL}, {"CompleteTime", XML_STRING, 0, NULL}, {"FaultStruct", XML_REC, SOAP_CWMP_FAULT, NULL}, {"OperationPerformed", XML_STRING, 0, NULL}}},
|
||||
|
||||
/*
|
||||
* XML Backup Session
|
||||
*/
|
||||
[BKP_EVT_LOAD] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"index", XML_INTEGER, 0, NULL}, {"CommandKey", XML_FUNC, XML_SWITCH, load_backup_event_command_key}, {"parameter", XML_REC, BKP_EVT_PARAM_REF, NULL}}},
|
||||
[BKP_EVT_PARAM_REF] = {XML_LIST, BKP_EVT_SINGLE_PARAM, "parameter", {}},
|
||||
[BKP_EVT_SINGLE_PARAM] = {XML_SINGLE, 0, NULL, {{"string", XML_FUNC, 0, load_backup_event_parameter}}},
|
||||
[BKP_EVT_BUILD] = {XML_SINGLE, 0, NULL, {{"cwmp_event", XML_REC, BKP_EVT_BUILD_REF, NULL}}},
|
||||
[BKP_EVT_BUILD_REF] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"index", XML_INTEGER, 0, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}}},
|
||||
[BKP_SCHEDULE_INFORM_BUILD] = {XML_SINGLE, 0, NULL, {{"schedule_inform", XML_REC, BKP_SCHEDULE_INFORM, NULL}}},
|
||||
[BKP_SCHEDULE_INFORM] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}}},
|
||||
[BKP_DOWNLOAD_BUILD] = {XML_SINGLE, 0, NULL, {{"download", XML_REC, BKP_DOWNLOAD, NULL}}},
|
||||
[BKP_DOWNLOAD] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"URL", XML_STRING, XML_SWITCH, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"FileType", XML_STRING, XML_SWITCH, NULL}, {"Username", XML_STRING, XML_SWITCH, NULL}, {"Password", XML_STRING, XML_SWITCH, NULL}, {"FileSize", XML_INTEGER, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}}},
|
||||
[BKP_SCHED_DOWNLOAD_BUILD] = {XML_SINGLE, 0, NULL, {{"schedule_download", XML_REC, BKP_SCHED_DOWNLOAD, NULL}}},
|
||||
[BKP_SCHED_DOWNLOAD] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"URL", XML_STRING, XML_SWITCH, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"FileType", XML_STRING, XML_SWITCH, NULL}, {"Username", XML_STRING, XML_SWITCH, NULL}, {"Password", XML_STRING, XML_SWITCH, NULL}, {"FileSize", XML_INTEGER, XML_SWITCH, NULL}, {"windowstart1", XML_INTEGER, 0, NULL}, {"windowstart2", XML_INTEGER, 0, NULL}, {"windowend1", XML_INTEGER, 0, NULL}, {"windowend2", XML_INTEGER, 0, NULL}, {"windowmode1", XML_STRING, 0, NULL}, {"windowmode2", XML_STRING, 0, NULL}, {"usermessage1", XML_STRING, 0, NULL}, {"usermessage2", XML_STRING, 0, NULL}, {"maxretrie1", XML_INTEGER, 0, NULL}, {"maxretrie2", XML_INTEGER, 0, NULL}}},
|
||||
[BKP_UPLOAD_BUILD] = {XML_SINGLE, 0, NULL, {{"upload", XML_REC, BKP_UPLOAD, NULL}}},
|
||||
[BKP_UPLOAD] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"URL", XML_STRING, XML_SWITCH, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"FileType", XML_STRING, XML_SWITCH, NULL}, {"Username", XML_STRING, XML_SWITCH, NULL}, {"Password", XML_STRING, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}}},
|
||||
[BKP_CDU_BUILD] = {XML_SINGLE, 0, NULL, {{"change_du_state", XML_REC, BKP_CDU_BUILD_REF, NULL}}},
|
||||
[BKP_CDU_BUILD_REF] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}, {NULL, XML_REC, BKP_CDU_OPS_REF, NULL}}},
|
||||
[BKP_CDU_OPS_REF] = {XML_LIST, BKP_CDU_OPTION, NULL, {}},
|
||||
[BKP_CDU_OPTION] = {XML_SINGLE, 0, NULL, {{NULL, XML_FUNC, 0, build_backup_cdu_option}}},
|
||||
[BKP_CDU] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}, {"update", XML_FUNC, 0, load_cdu_backup_operation}, {"install", XML_FUNC, 0, load_cdu_backup_operation}, {"uninstall", XML_FUNC, 0, load_cdu_backup_operation}}},
|
||||
[BKP_CDU_UPDATE] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, XML_SWITCH, NULL}, {"Version", XML_STRING, XML_SWITCH, NULL}, {"URL", XML_STRING, 0, NULL}, {"Username", XML_STRING, 0, NULL}, {"Password", XML_INTEGER, 0, NULL}}},
|
||||
[BKP_CDU_INSTALL] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, XML_SWITCH, NULL}, {"ExecutionEnvRef", XML_STRING, XML_SWITCH, NULL}, {"URL", XML_STRING, XML_SWITCH, NULL}, {"Username", XML_STRING, XML_SWITCH, NULL}, {"Password", XML_INTEGER, XML_SWITCH, NULL}}},
|
||||
[BKP_CDU_UNINSTALL] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, XML_SWITCH, NULL}, {"ExecutionEnvRef", XML_STRING, XML_SWITCH, NULL}, {"Version", XML_STRING, XML_SWITCH, NULL}}},
|
||||
[BKP_CDU_COMPLETE_BUILD] = {XML_SINGLE, 0, NULL, {{"du_state_change_complete", XML_REC, BKP_CDU_COMPLETE, NULL}}},
|
||||
[BKP_CDU_COMPLETE] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"time", XML_INTEGER, 0, NULL}, {"opresult", XML_FUNC, 0, load_cdu_complete_backup_operation}}},
|
||||
[BKP_CDU_COMPLETE_OPRES] = {XML_SINGLE, 0, NULL, {{"UUID", XML_STRING, XML_SWITCH, NULL}, {"execution_unit_ref", XML_STRING, 0, NULL}, {"Version", XML_STRING, XML_SWITCH, NULL}, {"CurrentState", XML_STRING, XML_SWITCH, NULL}, {"Resolved", XML_STRING, XML_SWITCH, NULL}, {"StartTime", XML_STRING, XML_SWITCH, NULL}, {"CompleteTime", XML_STRING, XML_SWITCH, NULL}, {"FaultCode", XML_INTEGER, XML_SWITCH, NULL}}},
|
||||
[BKP_TRANSFER_COMPLETE_BUILD] = {XML_SINGLE, 0, NULL, {{"transfer_complete", XML_REC, BKP_TRANSFER_COMPLETE, NULL}}},
|
||||
[BKP_TRANSFER_COMPLETE] = {XML_SINGLE, 0, NULL, {{"CommandKey", XML_STRING, XML_SWITCH, NULL}, {"StartTime", XML_STRING, XML_SWITCH, NULL}, {"CompleteTime", XML_STRING, XML_SWITCH, NULL}, {"old_software_version", XML_STRING, 0, NULL}, {"FaultCode", XML_INTEGER, XML_SWITCH, NULL}, {"type", XML_LINTEGER, 0, NULL}}},
|
||||
[BKP_AUTO_CDU_BUILD] = {XML_SINGLE, 0, NULL, {{"autonomous_du_state_change_complete", XML_REC, BKP_AUTO_CDU, NULL}}},
|
||||
[BKP_AUTO_CDU] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"UUID", XML_STRING, XML_SWITCH, NULL}, {"Version", XML_STRING, XML_SWITCH, NULL}, {"CurrentState", XML_STRING, XML_SWITCH, NULL}, {"StartTime", XML_STRING, XML_SWITCH, NULL}, {"CompleteTime", XML_STRING, XML_SWITCH, NULL}, {"operation", XML_STRING, 0, NULL}, {"FaultCode", XML_INTEGER, XML_SWITCH, NULL}, {"FaultString", XML_STRING, XML_SWITCH, NULL}}},
|
||||
[BKP_AUTO_TRANSFER_COMPLETE_BUILD] = {XML_SINGLE, 0, NULL, {{"autonomous_transfer_complete", XML_REC, BKP_AUTO_TRANSFER_COMPLETE, NULL}}},
|
||||
[BKP_AUTO_TRANSFER_COMPLETE] = {XML_SINGLE, 0, NULL, {{"id", XML_INTEGER, 0, NULL}, {"AnnounceURL", XML_STRING, XML_SWITCH, NULL}, {"TransferURL", XML_STRING, XML_SWITCH, NULL}, {"IsDownload", XML_BOOL, 0, NULL}, {"StartTime", XML_STRING, XML_SWITCH, NULL}, {"CompleteTime", XML_STRING, XML_SWITCH, NULL}, {"FileType", XML_STRING, XML_SWITCH, NULL}, {"FileSize", XML_INTEGER, XML_SWITCH, NULL}, {"FaultCode", XML_INTEGER, XML_SWITCH, NULL}, {"FaultString", XML_STRING, XML_SWITCH, NULL}}},
|
||||
|
||||
/*
|
||||
* XML node attributes
|
||||
*/
|
||||
|
|
@ -112,6 +147,8 @@ struct xml_node_data xml_nodes_data[] = {
|
|||
[GET_RPC_ATTR] = {XML_SINGLE, 0, NULL, {{"xsi:type", XML_STRING, 0, NULL}, {"soap_enc:arrayType", XML_FUNC, 0, get_soap_enc_array_type}}}
|
||||
};
|
||||
|
||||
struct xml_switch xml_nodes_names_switches[] = {{"URL", "url"}, {"UUID", "uuid"}, {"IsDownload", "isdownload"}, {"AnnounceURL", "announceurl"}, {"TransferURL", "transferurl"}, {"ExecutionEnvRef", "executionenvref"}, {"Resolved", "resolved"}, {"CurrentState", "uuid"}, {"FileType", "file_type"}, {"CommandKey", "command_key"}, {"Username", "username"}, {"Version", "version"}, {"Password", "password"}, {"StartTime", "start_time"}, {"CompleteTime", "complete_time"}, {"FileSize", "file_size"}, {"FaultCode", "fault_code"}, {"FaultString", "fault_string"}};
|
||||
|
||||
char* xml_tags_names[] = {
|
||||
"ParameterList",
|
||||
"Name",
|
||||
|
|
@ -131,6 +168,7 @@ char* xml_tags_names[] = {
|
|||
"UUID",
|
||||
"ExecutionEnvRef",
|
||||
"DeploymentUnitRef",
|
||||
"execution_unit_ref",
|
||||
"CurrentState",
|
||||
"Version",
|
||||
"OperationPerformed",
|
||||
|
|
@ -148,20 +186,38 @@ char* xml_tags_names[] = {
|
|||
"SerialNumber",
|
||||
"CurrentTime",
|
||||
"ProductClass",
|
||||
"windowmode1",
|
||||
"windowmode2",
|
||||
"usermessage1",
|
||||
"usermessage2",
|
||||
"operation",
|
||||
"old_software_version",
|
||||
"parameter",
|
||||
"xsi:type",
|
||||
"soap_enc:arrayType",
|
||||
"TargetFileName",
|
||||
"index",
|
||||
"id",
|
||||
"BKP_ID",
|
||||
"time",
|
||||
"FileSize",
|
||||
"Notification",
|
||||
"MaxRetries",
|
||||
"maxretrie1",
|
||||
"maxretrie2",
|
||||
"Status",
|
||||
"InstanceNumber",
|
||||
"FaultCode",
|
||||
"MaxEnvelopes",
|
||||
"RetryCount",
|
||||
"type",
|
||||
"DelaySeconds",
|
||||
"WindowStart",
|
||||
"WindowEnd",
|
||||
"windowstart1",
|
||||
"windowstart2",
|
||||
"windowend1",
|
||||
"windowend2",
|
||||
"NextLevel",
|
||||
"NotificationChange",
|
||||
"Writable",
|
||||
|
|
@ -216,6 +272,35 @@ void cwmp_free_all_xml_data_list(struct list_head *list)
|
|||
}
|
||||
}
|
||||
|
||||
int load_backup_event_command_key(mxml_node_t *b __attribute__((unused)), struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
mxml_node_t *c = mxmlWalkNext(b, b, MXML_DESCEND);
|
||||
if (!c || mxmlGetType(c) != MXML_OPAQUE)
|
||||
return FAULT_CPE_INVALID_ARGUMENTS;
|
||||
const char *command_key = mxmlGetOpaque(c);
|
||||
if (xml_attrs->index && *(xml_attrs->index) > -1) {
|
||||
if (EVENT_CONST[*(xml_attrs->index)].RETRY & EVENT_RETRY_AFTER_REBOOT) {
|
||||
xml_attrs->event_save = cwmp_add_event_container(*(xml_attrs->index), ((command_key != NULL) ? (char *)command_key : ""));
|
||||
if (xml_attrs->event_save != NULL)
|
||||
xml_attrs->event_save->id = *(xml_attrs->id);
|
||||
}
|
||||
}
|
||||
return FAULT_CPE_NO_FAULT;
|
||||
}
|
||||
|
||||
int load_backup_event_parameter(mxml_node_t *b, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
mxml_node_t *c = mxmlWalkNext(b, b, MXML_DESCEND);
|
||||
if (c && mxmlGetType(c) == MXML_OPAQUE) {
|
||||
const char *op = mxmlGetOpaque(c);
|
||||
if (op != NULL) {
|
||||
if (xml_attrs->event_save != NULL)
|
||||
add_dm_parameter_to_list(&xml_attrs->event_save->head_dm_parameter, (char *)op, NULL, NULL, 0, false);
|
||||
}
|
||||
}
|
||||
return FAULT_CPE_NO_FAULT;
|
||||
}
|
||||
|
||||
int load_upload_filetype(mxml_node_t *b, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
if (b == NULL)
|
||||
|
|
@ -338,6 +423,56 @@ int load_change_du_state_operation(mxml_node_t *b, struct xml_data_struct *xml_a
|
|||
return FAULT_CPE_NO_FAULT;
|
||||
}
|
||||
|
||||
int load_cdu_backup_operation(mxml_node_t *b, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
int fault = FAULT_CPE_NO_FAULT;
|
||||
if (b == NULL)
|
||||
return FAULT_CPE_INTERNAL_ERROR;
|
||||
|
||||
struct operations *operat = (operations *)calloc(1, sizeof(operations));
|
||||
list_add_tail(&(operat->list), &(xml_attrs->cdu->list_operation));
|
||||
const char *element = mxmlGetElement(b);
|
||||
|
||||
struct xml_data_struct bkp_xml_cdu_backup = {0};
|
||||
bkp_xml_cdu_backup.uuid = &operat->uuid;
|
||||
bkp_xml_cdu_backup.exec_env_ref = &operat->executionenvref;
|
||||
bkp_xml_cdu_backup.version = &operat->version;
|
||||
bkp_xml_cdu_backup.url = &operat->url;
|
||||
bkp_xml_cdu_backup.username = &operat->username;
|
||||
bkp_xml_cdu_backup.password = &operat->password;
|
||||
if (strcmp(element, "update") == 0) {
|
||||
operat->type = DU_UPDATE;
|
||||
fault = load_xml_node_data(BKP_CDU_UPDATE, b, &bkp_xml_cdu_backup);
|
||||
} else if (strcmp(element, "install") == 0) {
|
||||
operat->type = DU_INSTALL;
|
||||
fault = load_xml_node_data(BKP_CDU_INSTALL, b, &bkp_xml_cdu_backup);
|
||||
} else if (strcmp(element, "uninstall") == 0) {
|
||||
operat->type = DU_UNINSTALL;
|
||||
fault = load_xml_node_data(BKP_CDU_UNINSTALL, b, &bkp_xml_cdu_backup);
|
||||
}
|
||||
return fault;
|
||||
}
|
||||
|
||||
int load_cdu_complete_backup_operation(mxml_node_t *b, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
if (b == NULL)
|
||||
return FAULT_CPE_INTERNAL_ERROR;
|
||||
struct opresult *elem = (opresult *)calloc(1, sizeof(opresult));
|
||||
list_add_tail(&(elem->list), &(xml_attrs->cdu_complete->list_opresult));
|
||||
struct xml_data_struct opresult_bkp = {0};
|
||||
opresult_bkp.uuid = &elem->uuid;
|
||||
opresult_bkp.version = &elem->version;
|
||||
opresult_bkp.du_ref = &elem->du_ref;
|
||||
opresult_bkp.current_state = &elem->current_state;
|
||||
opresult_bkp.resolved = &elem->resolved;
|
||||
opresult_bkp.start_time = &elem->start_time;
|
||||
opresult_bkp.complete_time = &elem->complete_time;
|
||||
opresult_bkp.fault_code = &elem->fault;
|
||||
opresult_bkp.exec_unit_ref = &elem->execution_unit_ref;
|
||||
int fault = load_xml_node_data(BKP_CDU_COMPLETE_OPRES, b, &opresult_bkp);
|
||||
return fault;
|
||||
}
|
||||
|
||||
int build_inform_env_header(mxml_node_t *b, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
if (b == NULL || xml_attrs == NULL)
|
||||
|
|
@ -474,6 +609,21 @@ int build_parameter_structure(mxml_node_t *param_list, struct xml_data_struct *x
|
|||
return FAULT_CPE_NO_FAULT;
|
||||
}
|
||||
|
||||
int build_backup_cdu_option(mxml_node_t *cdu, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
mxml_node_t *cdu_opt = NULL;
|
||||
if (*(xml_attrs->cdu_type) == DU_INSTALL) {
|
||||
cdu_opt = mxmlNewElement(cdu, "install");
|
||||
return build_xml_node_data(BKP_CDU_INSTALL, cdu_opt, xml_attrs);
|
||||
} else if (*(xml_attrs->cdu_type) == DU_UPDATE) {
|
||||
cdu_opt = mxmlNewElement(cdu, "update");
|
||||
return build_xml_node_data(BKP_CDU_UPDATE, cdu_opt, xml_attrs);
|
||||
} else if (*(xml_attrs->cdu_type) == DU_UNINSTALL) {
|
||||
cdu_opt = mxmlNewElement(cdu, "uninstall");
|
||||
return build_xml_node_data(BKP_CDU_UNINSTALL, cdu_opt, xml_attrs);
|
||||
}
|
||||
return FAULT_CPE_INTERNAL_ERROR;
|
||||
}
|
||||
int get_soap_enc_array_type(mxml_node_t *node __attribute__((unused)), struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
if (xml_attrs->soap_enc_array_type == NULL)
|
||||
|
|
@ -504,6 +654,36 @@ int get_xml_type(int node_ref, int soap_idx)
|
|||
return xml_nodes_data[node_ref].xml_tags[soap_idx].tag_type;
|
||||
}
|
||||
|
||||
char *get_xml_node_name_switch(char *node_name)
|
||||
{
|
||||
unsigned int i;
|
||||
if (node_name == NULL)
|
||||
return NULL;
|
||||
|
||||
size_t total_size = sizeof(xml_nodes_names_switches) / sizeof(struct xml_switch);
|
||||
for (i = 0; i < total_size; i++)
|
||||
{
|
||||
if (strcmp(node_name, xml_nodes_names_switches[i].node_name) == 0)
|
||||
return xml_nodes_names_switches[i].switch_node_name;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *get_xml_node_name_by_switch_name(char *switch_node_name)
|
||||
{
|
||||
unsigned int i;
|
||||
if (switch_node_name == NULL)
|
||||
return NULL;
|
||||
|
||||
size_t total_size = sizeof(xml_nodes_names_switches) / sizeof(struct xml_switch);
|
||||
for (i = 0; i < total_size; i++)
|
||||
{
|
||||
if (strcmp(switch_node_name, xml_nodes_names_switches[i].switch_node_name) == 0)
|
||||
return xml_nodes_names_switches[i].node_name;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int get_xml_tag_index(const char *name)
|
||||
{
|
||||
unsigned int i;
|
||||
|
|
@ -614,6 +794,20 @@ bool validate_xml_node_opaque_value(char *node_name, char *opaque, struct xml_ta
|
|||
return true;
|
||||
}
|
||||
|
||||
bool check_node_is_switch_by_node_name(int node_ref, char *node_name)
|
||||
{
|
||||
unsigned int i;
|
||||
if (node_name == NULL)
|
||||
return false;
|
||||
size_t total_size = sizeof(xml_nodes_data[node_ref].xml_tags) / sizeof(struct xml_tag);
|
||||
for (i = 0; i < total_size; i++)
|
||||
{
|
||||
if (strcmp(xml_nodes_data[node_ref].xml_tags[i].tag_name, node_name) == 0 && xml_nodes_data[node_ref].xml_tags[i].rec_ref == XML_SWITCH)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int load_single_xml_node_data(int node_ref, mxml_node_t *node, struct xml_data_struct *xml_attrs)
|
||||
{
|
||||
mxml_node_t *b = node;
|
||||
|
|
@ -621,12 +815,16 @@ int load_single_xml_node_data(int node_ref, mxml_node_t *node, struct xml_data_s
|
|||
void **ptr = NULL;
|
||||
int error = FAULT_CPE_NO_FAULT;
|
||||
while (b) {
|
||||
const char *node_name = mxmlGetElement(b);
|
||||
const char *xml_node_name = mxmlGetElement(b);
|
||||
mxml_type_t node_type = mxmlGetType(b);
|
||||
mxml_node_t *firstchild = mxmlGetFirstChild(b);
|
||||
|
||||
char *node_name = get_xml_node_name_by_switch_name((char *)xml_node_name);
|
||||
if (!check_node_is_switch_by_node_name(node_ref, node_name))
|
||||
node_name = (char *)xml_node_name;
|
||||
|
||||
if (node_type == MXML_ELEMENT) {
|
||||
soap_idx = get_xml_soap_tag_index(node_ref, node_name);
|
||||
soap_idx = get_xml_soap_tag_index(node_ref, (char *)node_name);
|
||||
if (soap_idx == -1) {
|
||||
b = mxmlWalkNext(b, node, MXML_DESCEND);
|
||||
continue;
|
||||
|
|
@ -646,7 +844,7 @@ int load_single_xml_node_data(int node_ref, mxml_node_t *node, struct xml_data_s
|
|||
b = mxmlWalkNext(b, node, MXML_DESCEND);
|
||||
continue;
|
||||
}
|
||||
idx = get_xml_tag_index(node_name);
|
||||
idx = get_xml_tag_index((char *)node_name);
|
||||
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
/*
|
||||
|
|
@ -784,20 +982,36 @@ void xml_data_list_to_cdu_operations_list(struct list_head *xml_data_list, struc
|
|||
}
|
||||
}
|
||||
|
||||
void cdu_operations_result_list_to_xml_data_list(struct list_head *du_op_res_list, struct list_head *xml_data_list)
|
||||
{
|
||||
struct opresult *du_op_res_data = NULL;
|
||||
list_for_each_entry (du_op_res_data, du_op_res_list, list) {
|
||||
struct xml_list_data *xml_data = calloc(1, sizeof(struct xml_list_data));
|
||||
list_add_tail(&xml_data->list, xml_data_list);
|
||||
xml_data->uuid = strdup(du_op_res_data->uuid ? du_op_res_data->uuid : "");
|
||||
xml_data->du_ref = strdup(du_op_res_data->du_ref ? du_op_res_data->du_ref : "");
|
||||
xml_data->version = strdup(du_op_res_data->version ? du_op_res_data->version : "");
|
||||
xml_data->current_state = strdup(du_op_res_data->current_state ? du_op_res_data->current_state : "");
|
||||
xml_data->start_time = strdup(du_op_res_data->start_time ? du_op_res_data->start_time : "");
|
||||
xml_data->complete_time = strdup(du_op_res_data->complete_time ? du_op_res_data->complete_time : "");
|
||||
xml_data->fault_code = du_op_res_data->fault ? atoi(FAULT_CPE_ARRAY[du_op_res_data->fault].CODE) : 0;
|
||||
xml_data->fault_string = du_op_res_data->fault ? strdup(FAULT_CPE_ARRAY[du_op_res_data->fault].DESCRIPTION) : strdup("");
|
||||
}
|
||||
}
|
||||
|
||||
void cdu_operations_list_to_xml_data_list(struct list_head *du_op_list, struct list_head *xml_data_list)
|
||||
{
|
||||
struct opresult *du_opt_data = NULL;
|
||||
struct operations *du_opt_data = NULL;
|
||||
list_for_each_entry (du_opt_data, du_op_list, list) {
|
||||
struct xml_list_data *xml_data = calloc(1, sizeof(struct xml_list_data));
|
||||
list_add_tail(&xml_data->list, xml_data_list);
|
||||
xml_data->uuid = strdup(du_opt_data->uuid ? du_opt_data->uuid : "");
|
||||
xml_data->du_ref = strdup(du_opt_data->du_ref ? du_opt_data->du_ref : "");
|
||||
xml_data->du_ref = strdup(du_opt_data->url ? du_opt_data->url : "");
|
||||
xml_data->username = strdup(du_opt_data->username ? du_opt_data->username : "");
|
||||
xml_data->password = strdup(du_opt_data->password ? du_opt_data->password : "");
|
||||
xml_data->execution_env_ref = strdup(du_opt_data->executionenvref ? du_opt_data->executionenvref : "");
|
||||
xml_data->version = strdup(du_opt_data->version ? du_opt_data->version : "");
|
||||
xml_data->current_state = strdup(du_opt_data->current_state ? du_opt_data->current_state : "");
|
||||
xml_data->start_time = strdup(du_opt_data->start_time ? du_opt_data->start_time : "");
|
||||
xml_data->complete_time = strdup(du_opt_data->complete_time ? du_opt_data->complete_time : "");
|
||||
xml_data->fault_code = du_opt_data->fault ? atoi(FAULT_CPE_ARRAY[du_opt_data->fault].CODE) : 0;
|
||||
xml_data->fault_string = du_opt_data->fault ? strdup(FAULT_CPE_ARRAY[du_opt_data->fault].DESCRIPTION) : strdup("");
|
||||
xml_data->cdu_type = du_opt_data->type;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -829,23 +1043,23 @@ void get_xml_data_value_by_name(int type, int idx, struct xml_data_struct *xml_a
|
|||
switch(type) {
|
||||
case XML_STRING:
|
||||
str = (char **)(*ptr);
|
||||
*data_value = icwmp_strdup(*str ? *str : "");
|
||||
*data_value = icwmp_strdup((str && *str) ? *str : "");
|
||||
break;
|
||||
case XML_INTEGER:
|
||||
intgr = (int *)(*ptr);
|
||||
icwmp_asprintf(data_value, "%d", *intgr);
|
||||
icwmp_asprintf(data_value, "%d", intgr ? *intgr : 0);
|
||||
break;
|
||||
case XML_LINTEGER:
|
||||
lint = (long int *)(*ptr);
|
||||
icwmp_asprintf(data_value, "%ld", *lint);
|
||||
icwmp_asprintf(data_value, "%ld", lint ? *lint : 0);
|
||||
break;
|
||||
case XML_BOOL:
|
||||
bol = (bool *)(*ptr);
|
||||
*data_value = icwmp_strdup(bol ? "1" : "0");
|
||||
*data_value = icwmp_strdup((bol && *bol) ? "1" : "0");
|
||||
break;
|
||||
case XML_TIME:
|
||||
time = (time_t *)(*ptr);
|
||||
icwmp_asprintf(data_value, "%ld", *time);
|
||||
icwmp_asprintf(data_value, "%ld", time ? *time : 0);
|
||||
break;
|
||||
case XML_NODE:
|
||||
*data_value = *ptr;
|
||||
|
|
@ -884,12 +1098,17 @@ int build_single_xml_node_data(int node_ref, mxml_node_t *node, struct xml_data_
|
|||
int total_size = get_xml_tags_array_total_size(node_ref);
|
||||
for(i =0; i < total_size; i++) {
|
||||
if (xml_nodes_data[node_ref].xml_tags[i].tag_name != NULL) {
|
||||
n = mxmlNewElement(node, xml_nodes_data[node_ref].xml_tags[i].tag_name);
|
||||
char *node_name = NULL;
|
||||
if (xml_nodes_data[node_ref].xml_tags[i].rec_ref == XML_SWITCH)
|
||||
node_name = get_xml_node_name_switch(xml_nodes_data[node_ref].xml_tags[i].tag_name);
|
||||
else
|
||||
node_name = xml_nodes_data[node_ref].xml_tags[i].tag_name;
|
||||
n = mxmlNewElement(node, node_name);
|
||||
if (!n)
|
||||
return FAULT_CPE_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
if (xml_nodes_data[node_ref].xml_tags[i].rec_ref >= ATTR_PARAM_STRUCT) {
|
||||
if ((xml_nodes_data[node_ref].xml_tags[i].rec_ref >= ATTR_PARAM_STRUCT) && (xml_nodes_data[node_ref].xml_tags[i].rec_ref < XML_SWITCH)) {
|
||||
set_node_attributes(xml_nodes_data[node_ref].xml_tags[i].rec_ref, n, xml_attrs);
|
||||
if (xml_nodes_data[node_ref].xml_tags[i].tag_type == XML_REC)
|
||||
continue;
|
||||
|
|
|
|||
72
src/xml.h
72
src/xml.h
|
|
@ -81,9 +81,44 @@ enum soap_methods {
|
|||
SOAP_CDU_RESULTS_REF,
|
||||
SOAP_ACDU_OPTS_REF,
|
||||
SOAP_CDU_OPTS_REF,
|
||||
|
||||
BKP_EVT_LOAD,
|
||||
BKP_EVT_PARAM_REF,
|
||||
BKP_EVT_SINGLE_PARAM,
|
||||
BKP_EVT_BUILD,
|
||||
BKP_EVT_BUILD_REF,
|
||||
BKP_SCHEDULE_INFORM_BUILD,
|
||||
BKP_SCHEDULE_INFORM,
|
||||
BKP_DOWNLOAD_BUILD,
|
||||
BKP_DOWNLOAD,
|
||||
BKP_SCHED_DOWNLOAD_BUILD,
|
||||
BKP_SCHED_DOWNLOAD,
|
||||
BKP_UPLOAD_BUILD,
|
||||
BKP_UPLOAD,
|
||||
BKP_CDU_BUILD,
|
||||
BKP_CDU_BUILD_REF,
|
||||
BKP_CDU_OPS_REF,
|
||||
BKP_CDU_OPTION,
|
||||
BKP_CDU,
|
||||
BKP_CDU_UPDATE,
|
||||
BKP_CDU_INSTALL,
|
||||
BKP_CDU_UNINSTALL,
|
||||
BKP_CDU_COMPLETE_BUILD,
|
||||
BKP_CDU_COMPLETE,
|
||||
BKP_CDU_COMPLETE_OPRES,
|
||||
BKP_TRANSFER_COMPLETE_BUILD,
|
||||
BKP_TRANSFER_COMPLETE,
|
||||
BKP_AUTO_CDU_BUILD,
|
||||
BKP_AUTO_CDU,
|
||||
BKP_AUTO_TRANSFER_COMPLETE_BUILD,
|
||||
BKP_AUTO_TRANSFER_COMPLETE,
|
||||
|
||||
ATTR_PARAM_STRUCT,
|
||||
ATTR_SOAP_ENV,
|
||||
GET_RPC_ATTR,
|
||||
|
||||
XML_SWITCH,
|
||||
|
||||
SOAP_MAX
|
||||
};
|
||||
|
||||
|
|
@ -111,6 +146,11 @@ enum validation_types {
|
|||
VALIDATE_INT_RANGE
|
||||
};
|
||||
|
||||
struct xml_switch {
|
||||
char *node_name;
|
||||
char *switch_node_name;
|
||||
};
|
||||
|
||||
struct xml_tag_validation {
|
||||
char *tag_name;
|
||||
int validation_type;
|
||||
|
|
@ -137,6 +177,7 @@ struct xml_data_struct {
|
|||
char **uuid;
|
||||
char **exec_env_ref;
|
||||
char **du_ref;
|
||||
char **exec_unit_ref;
|
||||
char **current_state;
|
||||
char **version;
|
||||
char **operation;
|
||||
|
|
@ -154,29 +195,50 @@ struct xml_data_struct {
|
|||
char **serial_number;
|
||||
char **current_time;
|
||||
char **product_class;
|
||||
char **window_mode1;
|
||||
char **window_mode2;
|
||||
char **user_message1;
|
||||
char **user_message2;
|
||||
char **op;
|
||||
char **old_software_version;
|
||||
char **parameter;
|
||||
char **xsi_type;
|
||||
char **soap_enc_array_type;
|
||||
char **target_file_name;
|
||||
int *index;
|
||||
int *id;
|
||||
int *bkp_id;
|
||||
int *time;
|
||||
int *file_size;
|
||||
int *notification;
|
||||
int *scheddown_max_retries;
|
||||
int *max_retries1;
|
||||
int *max_retries2;
|
||||
int *status;
|
||||
int *instance;
|
||||
int *fault_code;
|
||||
int *max_envelopes;
|
||||
int *retry_count;
|
||||
int *type;
|
||||
long int *delay_seconds;
|
||||
long int *window_start;
|
||||
long int *window_end;
|
||||
time_t *window_start1;
|
||||
time_t *window_start2;
|
||||
time_t *window_end1;
|
||||
time_t *window_end2;
|
||||
bool *next_level;
|
||||
bool *notification_change;
|
||||
bool *writable;
|
||||
bool *is_download;
|
||||
|
||||
struct change_du_state *cdu;
|
||||
struct du_state_change_complete *cdu_complete;
|
||||
mxml_node_t **xml_env;
|
||||
struct list_head *data_list;
|
||||
char **xcwmp;
|
||||
int *amd_version;
|
||||
struct event_container *event_save;
|
||||
unsigned int *session_timeout;
|
||||
int *cdu_type;
|
||||
int *counter;
|
||||
|
|
@ -230,7 +292,7 @@ struct xml_node_data {
|
|||
int node_ms;
|
||||
int tag_node_ref;
|
||||
char *tag_list_name;
|
||||
struct xml_tag xml_tags[10];
|
||||
struct xml_tag xml_tags[20];
|
||||
};
|
||||
|
||||
#define MXML_DELETE(X) \
|
||||
|
|
@ -263,17 +325,25 @@ mxml_node_t * build_top_body_soap_request(mxml_node_t *node, char *method);
|
|||
void dm_parameter_list_to_xml_data_list(struct list_head *dm_parameter_list, struct list_head *xml_data_list);
|
||||
void xml_data_list_to_dm_parameter_list(struct list_head *xml_data_list, struct list_head *dm_parameter_list);
|
||||
void xml_data_list_to_cdu_operations_list(struct list_head *xml_data_list, struct list_head *du_op_list);
|
||||
void cdu_operations_result_list_to_xml_data_list(struct list_head *du_op_res_list, struct list_head *xml_data_list);
|
||||
void cdu_operations_list_to_xml_data_list(struct list_head *du_op_list, struct list_head *xml_data_list);
|
||||
void event_container_list_to_xml_data_list(struct list_head *event_container, struct list_head *xml_data_list);
|
||||
void cwmp_param_fault_list_to_xml_data_list(struct list_head *param_fault_list, struct list_head *xml_data_list);
|
||||
void cwmp_free_all_xml_data_list(struct list_head *list);
|
||||
int load_upload_filetype(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_backup_event_command_key(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_backup_event_parameter(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_get_rpc_method_acs_resp_string(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_download_filetype(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_sched_download_window_mode(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_change_du_state_operation(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_cdu_backup_operation(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int load_cdu_complete_backup_operation(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int build_inform_events(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int build_inform_env_header(mxml_node_t *b, struct xml_data_struct *xml_attrs);
|
||||
int build_parameter_structure(mxml_node_t *param_list, struct xml_data_struct *xml_attrs);
|
||||
int build_backup_cdu_option(mxml_node_t *cdu, struct xml_data_struct *xml_attrs);
|
||||
int get_soap_enc_array_type(mxml_node_t *node, struct xml_data_struct *xml_attrs);
|
||||
char *get_xml_node_name_switch(char *node_name);
|
||||
char *get_xml_node_name_by_switch_name(char *switch_node_name);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
mxml_node_t *bkp_event1 = NULL, *bkp_event2 = NULL, *event_tree1 = NULL, *event_tree2;
|
||||
|
||||
// Case of one event
|
||||
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0);
|
||||
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "VALUE_CHANGE", 0);
|
||||
bkp_session_save();
|
||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
||||
|
|
@ -80,7 +80,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
||||
n = mxmlFindElement(event_tree1, event_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
||||
assert_non_null(n);
|
||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "VALUE_CHANGE");
|
||||
MXML_DELETE(bkp_event1);
|
||||
bkp_session_save();
|
||||
MXML_DELETE(backup_tree);
|
||||
|
|
@ -137,6 +137,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
download->password = icwmp_strdup("iopsys");
|
||||
download->username = icwmp_strdup("iopsys");
|
||||
download->url = icwmp_strdup("http://192.168.1.160:8080/openacs/acs");
|
||||
download->id = 1;
|
||||
bkp_session_insert_download(download);
|
||||
bkp_session_save();
|
||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||
|
|
@ -161,9 +162,6 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
n = mxmlFindElement(download_tree, download_tree, "password", NULL, NULL, MXML_DESCEND);
|
||||
assert_non_null(n);
|
||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "iopsys");
|
||||
n = mxmlFindElement(download_tree, download_tree, "file_size", NULL, NULL, MXML_DESCEND);
|
||||
assert_non_null(n);
|
||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "0");
|
||||
n = mxmlFindElement(download_tree, download_tree, "time", NULL, NULL, MXML_DESCEND);
|
||||
assert_non_null(n);
|
||||
MXML_DELETE(backup_tree);
|
||||
|
|
@ -171,7 +169,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
/*
|
||||
* Delete download
|
||||
*/
|
||||
bkp_session_delete_download(download);
|
||||
bkp_session_delete_element("download", download->id);
|
||||
bkp_session_save();
|
||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
||||
|
|
@ -182,7 +180,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
MXML_DELETE(backup_tree);
|
||||
|
||||
/*
|
||||
* Insert TransferComplete bkp_session_delete_transfer_complete
|
||||
* Insert TransferComplete bkp_session_insert_transfer_complete
|
||||
*/
|
||||
struct transfer_complete *p;
|
||||
p = icwmp_calloc(1, sizeof(struct transfer_complete));
|
||||
|
|
@ -192,6 +190,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
p->old_software_version = icwmp_strdup("iopsys_img_old");
|
||||
p->type = TYPE_DOWNLOAD;
|
||||
p->fault_code = FAULT_CPE_NO_FAULT;
|
||||
p->id = 1;
|
||||
bkp_session_insert_transfer_complete(p);
|
||||
bkp_session_save();
|
||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||
|
|
@ -219,7 +218,7 @@ static void cwmp_backup_session_unit_test(void **state)
|
|||
/*
|
||||
* Delete TransferComplete
|
||||
*/
|
||||
bkp_session_delete_transfer_complete(p);
|
||||
bkp_session_delete_element_by_key("transfer_complete", "start_time", p->start_time);
|
||||
bkp_session_save();
|
||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue