mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
Events issues fixes
This commit is contained in:
parent
93d3710422
commit
4072ae1966
11 changed files with 140 additions and 166 deletions
|
|
@ -237,22 +237,20 @@ mxml_node_t *bkp_session_node_found(mxml_node_t *tree, char *name, struct search
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char *status)
|
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
|
||||||
{
|
{
|
||||||
struct search_keywords keys[1];
|
struct search_keywords keys[1];
|
||||||
char parent_name[32];
|
|
||||||
char event_id[32];
|
char event_id[32];
|
||||||
char event_idx[32];
|
char event_idx[32];
|
||||||
mxml_node_t *b;
|
mxml_node_t *b;
|
||||||
|
|
||||||
snprintf(parent_name, sizeof(parent_name), "%s_event", status ? status : "");
|
|
||||||
snprintf(event_id, sizeof(event_id), "%d", id);
|
snprintf(event_id, sizeof(event_id), "%d", id);
|
||||||
snprintf(event_idx, sizeof(event_idx), "%d", index);
|
snprintf(event_idx, sizeof(event_idx), "%d", index);
|
||||||
keys[0].name = "id";
|
keys[0].name = "id";
|
||||||
keys[0].value = event_id;
|
keys[0].value = event_id;
|
||||||
b = bkp_session_node_found(bkp_tree, parent_name, keys, 1);
|
b = bkp_session_node_found(bkp_tree, "cwmp_event", keys, 1);
|
||||||
if (!b) {
|
if (!b) {
|
||||||
b = bkp_session_insert(bkp_tree, parent_name, NULL);
|
b = bkp_session_insert(bkp_tree, "cwmp_event", NULL);
|
||||||
bkp_session_insert(b, "index", event_idx);
|
bkp_session_insert(b, "index", event_idx);
|
||||||
bkp_session_insert(b, "id", event_id);
|
bkp_session_insert(b, "id", event_id);
|
||||||
bkp_session_insert(b, "command_key", command_key ? command_key : "");
|
bkp_session_insert(b, "command_key", command_key ? command_key : "");
|
||||||
|
|
@ -260,18 +258,16 @@ mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bkp_session_delete_event(int id, char *status)
|
void bkp_session_delete_event(int id)
|
||||||
{
|
{
|
||||||
struct search_keywords keys[1];
|
struct search_keywords keys[1];
|
||||||
char parent_name[32];
|
|
||||||
char event_id[32];
|
char event_id[32];
|
||||||
mxml_node_t *b;
|
mxml_node_t *b;
|
||||||
|
|
||||||
snprintf(parent_name, sizeof(parent_name), "%s_event", status ? status : "");
|
|
||||||
snprintf(event_id, sizeof(event_id), "%d", id);
|
snprintf(event_id, sizeof(event_id), "%d", id);
|
||||||
keys[0].name = "id";
|
keys[0].name = "id";
|
||||||
keys[0].value = event_id;
|
keys[0].value = event_id;
|
||||||
b = bkp_session_node_found(bkp_tree, parent_name, keys, 1);
|
b = bkp_session_node_found(bkp_tree, "cwmp_event", keys, 1);
|
||||||
if (b)
|
if (b)
|
||||||
mxmlDelete(b);
|
mxmlDelete(b);
|
||||||
}
|
}
|
||||||
|
|
@ -313,34 +309,6 @@ void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value)
|
||||||
bkp_session_insert(n, child, value);
|
bkp_session_insert(n, child, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bkp_session_move_inform_to_inform_send()
|
|
||||||
{
|
|
||||||
mxml_node_t *b = bkp_tree;
|
|
||||||
|
|
||||||
while (b) {
|
|
||||||
mxml_node_t *p = mxmlGetParent(b);
|
|
||||||
const char *parent_name = p ? mxmlGetElement(p) : NULL;
|
|
||||||
if (mxmlGetType(b) == MXML_ELEMENT && !strcmp(mxmlGetElement(b), "queue_event") && mxmlGetType(p) == MXML_ELEMENT && parent_name && !strcmp(parent_name, "cwmp"))
|
|
||||||
mxmlSetElement(b, "send_event");
|
|
||||||
|
|
||||||
b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void bkp_session_move_inform_to_inform_queue()
|
|
||||||
{
|
|
||||||
mxml_node_t *b = bkp_tree;
|
|
||||||
|
|
||||||
while (b) {
|
|
||||||
mxml_node_t *p = mxmlGetParent(b);
|
|
||||||
const char *parent_name = p ? mxmlGetElement(p) : NULL;
|
|
||||||
if (mxmlGetType(b) == MXML_ELEMENT && !strcmp(mxmlGetElement(b), "send_event") && mxmlGetType(p) == MXML_ELEMENT && parent_name && !strcmp(parent_name, "cwmp"))
|
|
||||||
mxmlSetElement(b, "queue_event");
|
|
||||||
|
|
||||||
b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void bkp_session_insert_schedule_inform(time_t time, char *command_key)
|
void bkp_session_insert_schedule_inform(time_t time, char *command_key)
|
||||||
{
|
{
|
||||||
char schedule_time[128];
|
char schedule_time[128];
|
||||||
|
|
@ -1100,7 +1068,6 @@ int bkp_session_check_file()
|
||||||
bkp_session_create_file();
|
bkp_session_create_file();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
bkp_session_move_inform_to_inform_queue();
|
|
||||||
bkp_session_save();
|
bkp_session_save();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1148,7 +1115,7 @@ int cwmp_load_saved_session(char **ret, enum backup_loading load)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (load == ALL) {
|
if (load == ALL) {
|
||||||
if (ntype == MXML_ELEMENT && strcmp(elem_name, "queue_event") == 0) {
|
if (ntype == MXML_ELEMENT && strcmp(elem_name, "cwmp_event") == 0) {
|
||||||
load_queue_event(b);
|
load_queue_event(b);
|
||||||
} else if (ntype == MXML_ELEMENT && strcmp(elem_name, "download") == 0) {
|
} else if (ntype == MXML_ELEMENT && strcmp(elem_name, "download") == 0) {
|
||||||
load_download(b);
|
load_download(b);
|
||||||
|
|
|
||||||
|
|
@ -40,13 +40,11 @@ struct search_keywords {
|
||||||
int cwmp_init_backup_session(char **ret, enum backup_loading load);
|
int cwmp_init_backup_session(char **ret, enum backup_loading load);
|
||||||
void bkp_session_save();
|
void bkp_session_save();
|
||||||
int cwmp_load_saved_session(char **acsurl, enum backup_loading load);
|
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, char *status);
|
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id);
|
||||||
void bkp_session_delete_event(int id, char *status);
|
void bkp_session_delete_event(int id);
|
||||||
void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value);
|
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_insert_parameter(mxml_node_t *b, char *name);
|
||||||
void bkp_session_simple_insert(char *parent, char *child, char *value);
|
void bkp_session_simple_insert(char *parent, char *child, char *value);
|
||||||
void bkp_session_move_inform_to_inform_send();
|
|
||||||
void bkp_session_move_inform_to_inform_queue();
|
|
||||||
void bkp_session_insert_schedule_inform(time_t schedule_time, char *command_key);
|
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_delete_schedule_inform(time_t schedule_time, char *command_key);
|
||||||
void bkp_session_insert_download(struct download *pdownload);
|
void bkp_session_insert_download(struct download *pdownload);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
#include "cwmp_event.h"
|
#include "cwmp_event.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
|
#include "backupSession.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
pthread_mutex_t add_event_mutex = PTHREAD_MUTEX_INITIALIZER;
|
pthread_mutex_t add_event_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
|
|
@ -33,6 +35,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, char *
|
||||||
list_add_tail(&(event_container->list), &(cwmp_main->session->events));
|
list_add_tail(&(event_container->list), &(cwmp_main->session->events));
|
||||||
event_container->code = event_code;
|
event_container->code = event_code;
|
||||||
event_container->command_key = command_key ? strdup(command_key) : strdup("");
|
event_container->command_key = command_key ? strdup(command_key) : strdup("");
|
||||||
|
event_container->next_session = true;
|
||||||
if ((cwmp_main->event_id < 0) || (cwmp_main->event_id >= MAX_INT_ID)) {
|
if ((cwmp_main->event_id < 0) || (cwmp_main->event_id >= MAX_INT_ID)) {
|
||||||
cwmp_main->event_id = 0;
|
cwmp_main->event_id = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -48,3 +51,62 @@ struct event_container *cwmp_add_event_container(int event_code, char *command_k
|
||||||
pthread_mutex_unlock(&add_event_mutex);
|
pthread_mutex_unlock(&add_event_mutex);
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void move_next_session_events_to_actual_session()
|
||||||
|
{
|
||||||
|
struct event_container *event_container;
|
||||||
|
|
||||||
|
struct list_head *event_container_list = &(cwmp_main->session->events);
|
||||||
|
list_for_each_entry (event_container, event_container_list, list) {
|
||||||
|
event_container->next_session = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int cwmp_remove_all_session_events()
|
||||||
|
{
|
||||||
|
struct list_head *events_ptr = cwmp_main->session->events.next;
|
||||||
|
while (events_ptr != &cwmp_main->session->events) {
|
||||||
|
struct event_container *event_container;
|
||||||
|
event_container = list_entry(events_ptr, struct event_container, list);
|
||||||
|
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
|
||||||
|
events_ptr = events_ptr->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bkp_session_delete_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));
|
||||||
|
free(event_container);
|
||||||
|
events_ptr = cwmp_main->session->events.next;
|
||||||
|
}
|
||||||
|
bkp_session_save();
|
||||||
|
return CWMP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int remove_single_event(int event_code)
|
||||||
|
{
|
||||||
|
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
|
||||||
|
struct event_container *event_container;
|
||||||
|
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
|
||||||
|
if (event_container->next_session)
|
||||||
|
continue;
|
||||||
|
if (event_container->code == event_code) {
|
||||||
|
bkp_session_delete_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));
|
||||||
|
list_del(&(event_container->list));
|
||||||
|
free(event_container);
|
||||||
|
bkp_session_save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (event_container) {
|
||||||
|
if (event_container->command_key)
|
||||||
|
free(event_container->command_key);
|
||||||
|
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
||||||
|
list_del(&(event_container->list));
|
||||||
|
free(event_container);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return CWMP_OK;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,7 @@
|
||||||
#define CWMP_EVENT_H
|
#define CWMP_EVENT_H
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
struct event_container *cwmp_add_event_container(int event_code, char *command_key);
|
struct event_container *cwmp_add_event_container(int event_code, char *command_key);
|
||||||
|
void move_next_session_events_to_actual_session();
|
||||||
|
int cwmp_remove_all_session_events();
|
||||||
|
int remove_single_event(int event_code);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
90
src/event.c
90
src/event.c
|
|
@ -36,13 +36,14 @@ const struct EVENT_CONST_STRUCT EVENT_CONST[] = {[EVENT_IDX_0BOOTSTRAP] = { "0 B
|
||||||
[EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE] = { "10 AUTONOMOUS TRANSFER COMPLETE", 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 },
|
||||||
[EVENT_IDX_11DU_STATE_CHANGE_COMPLETE] = { "11 DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
[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 },
|
[EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE] = { "12 AUTONOMOUS DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
||||||
|
[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 },
|
[EVENT_IDX_M_Reboot] = { "M Reboot", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
||||||
[EVENT_IDX_M_ScheduleInform] = { "M ScheduleInform", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
[EVENT_IDX_M_ScheduleInform] = { "M ScheduleInform", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
||||||
[EVENT_IDX_M_Download] = { "M Download", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
|
[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_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 },
|
[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 },
|
[EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } };
|
||||||
[EVENT_IDX_14HEARTBEAT] = { "14 HEARTBEAT", 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) //to be moved to backupsession
|
||||||
{
|
{
|
||||||
|
|
@ -54,7 +55,7 @@ void cwmp_save_event_container(struct event_container *event_container) //to be
|
||||||
struct list_head *ilist;
|
struct list_head *ilist;
|
||||||
mxml_node_t *b;
|
mxml_node_t *b;
|
||||||
|
|
||||||
b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id, "queue");
|
b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id);
|
||||||
|
|
||||||
list_for_each (ilist, &(event_container->head_dm_parameter)) {
|
list_for_each (ilist, &(event_container->head_dm_parameter)) {
|
||||||
struct cwmp_dm_parameter *dm_parameter;
|
struct cwmp_dm_parameter *dm_parameter;
|
||||||
|
|
@ -81,49 +82,6 @@ int cwmp_root_cause_event_boot()
|
||||||
return CWMP_OK;
|
return CWMP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int event_remove_all_event_container(int rem_from)
|
|
||||||
{
|
|
||||||
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
|
|
||||||
struct event_container *event_container;
|
|
||||||
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
|
|
||||||
if (event_container->code == EVENT_IDX_14HEARTBEAT)
|
|
||||||
continue;
|
|
||||||
bkp_session_delete_event(event_container->id, rem_from ? "send" : "queue");
|
|
||||||
free(event_container->command_key);
|
|
||||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
|
||||||
list_del(&(event_container->list));
|
|
||||||
free(event_container);
|
|
||||||
}
|
|
||||||
bkp_session_save();
|
|
||||||
return CWMP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
int remove_single_event(int event_code)
|
|
||||||
{
|
|
||||||
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
|
|
||||||
struct event_container *event_container;
|
|
||||||
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
|
|
||||||
if (event_container->code == event_code) {
|
|
||||||
bkp_session_delete_event(event_container->id, "send");
|
|
||||||
if (event_container->command_key)
|
|
||||||
free(event_container->command_key);
|
|
||||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
|
||||||
list_del(&(event_container->list));
|
|
||||||
free(event_container);
|
|
||||||
bkp_session_save();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (event_container) {
|
|
||||||
if (event_container->command_key)
|
|
||||||
free(event_container->command_key);
|
|
||||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
|
||||||
list_del(&(event_container->list));
|
|
||||||
free(event_container);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CWMP_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
int event_remove_noretry_event_container()
|
int event_remove_noretry_event_container()
|
||||||
{
|
{
|
||||||
struct list_head *ilist, *q;
|
struct list_head *ilist, *q;
|
||||||
|
|
@ -434,26 +392,54 @@ int cwmp_root_cause_events()
|
||||||
return CWMP_OK;
|
return CWMP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool event_code_is_valid(const char *code)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if (code == NULL || strlen(code) == 0)
|
||||||
|
return true;
|
||||||
|
for (i=0; i < __EVENT_IDX_MAX; i++) {
|
||||||
|
if (EVENT_CONST[i].CODE && strcmp(code, EVENT_CONST[i].CODE) == 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int cwmp_get_int_event_code(const char *code)
|
int cwmp_get_int_event_code(const char *code)
|
||||||
{
|
{
|
||||||
if (code && code[0] == '1')
|
|
||||||
|
if (!event_code_is_valid(code))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (code && strncmp(code, "1 ", 2) == 0)
|
||||||
return EVENT_IDX_1BOOT;
|
return EVENT_IDX_1BOOT;
|
||||||
|
|
||||||
else if (code && code[0] == '2')
|
else if (code && strncmp(code, "2 ", 2) == 0)
|
||||||
return EVENT_IDX_2PERIODIC;
|
return EVENT_IDX_2PERIODIC;
|
||||||
|
|
||||||
else if (code && code[0] == '3')
|
else if (code && strncmp(code, "3 ", 2) == 0)
|
||||||
return EVENT_IDX_3SCHEDULED;
|
return EVENT_IDX_3SCHEDULED;
|
||||||
|
|
||||||
else if (code && code[0] == '4')
|
else if (code && strncmp(code, "4 ", 2) == 0)
|
||||||
return EVENT_IDX_4VALUE_CHANGE;
|
return EVENT_IDX_4VALUE_CHANGE;
|
||||||
|
|
||||||
else if (code && code[0] == '6')
|
else if (code && strncmp(code, "6 ", 2) == 0)
|
||||||
return EVENT_IDX_6CONNECTION_REQUEST;
|
return EVENT_IDX_6CONNECTION_REQUEST;
|
||||||
|
|
||||||
else if (code && code[0] == '8')
|
else if (code && strncmp(code, "8 ", 2) == 0)
|
||||||
return EVENT_IDX_8DIAGNOSTICS_COMPLETE;
|
return EVENT_IDX_8DIAGNOSTICS_COMPLETE;
|
||||||
|
|
||||||
|
|
||||||
|
else if (code && strncmp(code, "9 ", 2) == 0)
|
||||||
|
return EVENT_IDX_9REQUEST_DOWNLOAD;
|
||||||
|
|
||||||
|
|
||||||
|
else if (code && strncmp(code, "13", 2) == 0)
|
||||||
|
return EVENT_IDX_13WAKEUP;
|
||||||
|
|
||||||
|
|
||||||
|
else if (code && strncmp(code, "14", 2) == 0)
|
||||||
|
return EVENT_IDX_14HEARTBEAT;
|
||||||
|
|
||||||
else
|
else
|
||||||
return EVENT_IDX_6CONNECTION_REQUEST;
|
return EVENT_IDX_6CONNECTION_REQUEST;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
typedef struct event_container {
|
typedef struct event_container {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
int code; /* required element of type xsd:string */
|
int code; /* required element of type xsd:string */
|
||||||
|
bool next_session;
|
||||||
char *command_key;
|
char *command_key;
|
||||||
struct list_head head_dm_parameter;
|
struct list_head head_dm_parameter;
|
||||||
int id;
|
int id;
|
||||||
|
|
@ -51,13 +52,14 @@ enum event_idx_enum
|
||||||
EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE,
|
EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE,
|
||||||
EVENT_IDX_11DU_STATE_CHANGE_COMPLETE,
|
EVENT_IDX_11DU_STATE_CHANGE_COMPLETE,
|
||||||
EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE,
|
EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE,
|
||||||
|
EVENT_IDX_13WAKEUP,
|
||||||
|
EVENT_IDX_14HEARTBEAT,
|
||||||
EVENT_IDX_M_Reboot,
|
EVENT_IDX_M_Reboot,
|
||||||
EVENT_IDX_M_ScheduleInform,
|
EVENT_IDX_M_ScheduleInform,
|
||||||
EVENT_IDX_M_Download,
|
EVENT_IDX_M_Download,
|
||||||
EVENT_IDX_M_Schedule_Download,
|
EVENT_IDX_M_Schedule_Download,
|
||||||
EVENT_IDX_M_Upload,
|
EVENT_IDX_M_Upload,
|
||||||
EVENT_IDX_M_ChangeDUState,
|
EVENT_IDX_M_ChangeDUState,
|
||||||
EVENT_IDX_14HEARTBEAT,
|
|
||||||
TransferClt_Evt,
|
TransferClt_Evt,
|
||||||
Schedule_Inform_Evt,
|
Schedule_Inform_Evt,
|
||||||
CDU_Evt,
|
CDU_Evt,
|
||||||
|
|
@ -66,8 +68,6 @@ enum event_idx_enum
|
||||||
|
|
||||||
extern const struct EVENT_CONST_STRUCT EVENT_CONST[__EVENT_IDX_MAX];
|
extern const struct EVENT_CONST_STRUCT EVENT_CONST[__EVENT_IDX_MAX];
|
||||||
|
|
||||||
int event_remove_all_event_container(int rem_from);
|
|
||||||
int remove_single_event(int event_code);
|
|
||||||
int event_remove_noretry_event_container();
|
int event_remove_noretry_event_container();
|
||||||
void cwmp_save_event_container(struct event_container *event_container);
|
void cwmp_save_event_container(struct event_container *event_container);
|
||||||
void connection_request_ip_value_change( int version);
|
void connection_request_ip_value_change( int version);
|
||||||
|
|
|
||||||
|
|
@ -301,6 +301,7 @@ static void load_inform_xml_schema(mxml_node_t **tree)
|
||||||
MXML_DELETE(xml);
|
MXML_DELETE(xml);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
move_next_session_events_to_actual_session();
|
||||||
cwmp_free_all_xml_data_list(&xml_events_list);
|
cwmp_free_all_xml_data_list(&xml_events_list);
|
||||||
mxml_node_t *param_list = mxmlNewElement(inform, "ParameterList");
|
mxml_node_t *param_list = mxmlNewElement(inform, "ParameterList");
|
||||||
if (param_list == NULL) {
|
if (param_list == NULL) {
|
||||||
|
|
|
||||||
|
|
@ -346,8 +346,7 @@ void start_cwmp_session()
|
||||||
CWMP_LOG(INFO, "End session");
|
CWMP_LOG(INFO, "End session");
|
||||||
|
|
||||||
if (cwmp_stop) {
|
if (cwmp_stop) {
|
||||||
event_remove_all_event_container(RPC_SEND);
|
cwmp_remove_all_session_events();
|
||||||
event_remove_all_event_container(RPC_QUEUE);
|
|
||||||
run_session_end_func();
|
run_session_end_func();
|
||||||
cwmp_session_exit();
|
cwmp_session_exit();
|
||||||
rpc_exit();
|
rpc_exit();
|
||||||
|
|
@ -368,10 +367,9 @@ void start_cwmp_session()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!cwmp_main->session->session_status.is_heartbeat)
|
if (!cwmp_main->session->session_status.is_heartbeat)
|
||||||
event_remove_all_event_container(RPC_SEND);
|
cwmp_remove_all_session_events();
|
||||||
else
|
else
|
||||||
remove_single_event(EVENT_IDX_14HEARTBEAT);
|
remove_single_event(EVENT_IDX_14HEARTBEAT);
|
||||||
//event_remove_all_event_container(RPC_QUEUE);
|
|
||||||
cwmp_main->retry_count_session = 0;
|
cwmp_main->retry_count_session = 0;
|
||||||
set_cwmp_session_status(SESSION_SUCCESS, 0);
|
set_cwmp_session_status(SESSION_SUCCESS, 0);
|
||||||
rpc_exit();
|
rpc_exit();
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ static int icwmp_inform_get_rpc_method(struct blob_buf *bb)
|
||||||
static int icwmp_inform_event(struct blob_buf *bb, char *event)
|
static int icwmp_inform_event(struct blob_buf *bb, char *event)
|
||||||
{
|
{
|
||||||
int event_code = cwmp_get_int_event_code(event);
|
int event_code = cwmp_get_int_event_code(event);
|
||||||
if (event_code != EVENT_IDX_14HEARTBEAT) {
|
if (event_code != -1) {
|
||||||
if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) {
|
if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) {
|
||||||
blobmsg_add_u32(bb, "status", -1);
|
blobmsg_add_u32(bb, "status", -1);
|
||||||
blobmsg_add_string(bb, "info", "Session already running, event will be sent at the end of the session");
|
blobmsg_add_string(bb, "info", "Session already running, event will be sent at the end of the session");
|
||||||
|
|
|
||||||
|
|
@ -61,61 +61,61 @@ static void cwmp_backup_session_unit_test(void **state)
|
||||||
/*
|
/*
|
||||||
* Insert Event
|
* Insert Event
|
||||||
*/
|
*/
|
||||||
mxml_node_t *bkp_event1 = NULL, *bkp_event2 = NULL, *queue_tree1 = NULL, *queue_tree2 = NULL;
|
mxml_node_t *bkp_event1 = NULL, *bkp_event2 = NULL, *event_tree1 = NULL, *event_tree2;
|
||||||
|
|
||||||
// Case of one event
|
// Case of one event
|
||||||
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0, "queue");
|
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0);
|
||||||
bkp_session_save();
|
bkp_session_save();
|
||||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
assert_non_null(bkp_event1);
|
assert_non_null(bkp_event1);
|
||||||
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
|
event_tree1 = mxmlFindElement(backup_tree, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(queue_tree1);
|
assert_non_null(event_tree1);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "index", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "id", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
||||||
MXML_DELETE(bkp_event1);
|
MXML_DELETE(bkp_event1);
|
||||||
bkp_session_save();
|
bkp_session_save();
|
||||||
MXML_DELETE(backup_tree);
|
MXML_DELETE(backup_tree);
|
||||||
|
|
||||||
//case of two events with different ids under the same queue
|
//case of two events with different ids
|
||||||
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0, "queue");
|
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0);
|
||||||
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 1, "queue");
|
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 1);
|
||||||
bkp_session_save();
|
bkp_session_save();
|
||||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
pFile = fopen(CWMP_BKP_FILE, "r");
|
||||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
||||||
fclose(pFile);
|
fclose(pFile);
|
||||||
assert_non_null(bkp_event1);
|
assert_non_null(bkp_event1);
|
||||||
assert_non_null(bkp_event2);
|
assert_non_null(bkp_event2);
|
||||||
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
|
event_tree1 = mxmlFindElement(backup_tree, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
|
||||||
queue_tree2 = mxmlFindElement(queue_tree1, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
|
event_tree2 = mxmlFindElement(event_tree1, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
|
||||||
|
|
||||||
assert_non_null(queue_tree1);
|
assert_non_null(event_tree1);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "index", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_1BOOT);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_1BOOT);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "id", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree1, event_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "1 BOOT");
|
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "1 BOOT");
|
||||||
|
|
||||||
assert_non_null(queue_tree2);
|
assert_non_null(event_tree2);
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "index", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree2, event_tree2, "index", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "id", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree2, event_tree2, "id", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 1);
|
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 1);
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "command_key", NULL, NULL, MXML_DESCEND);
|
n = mxmlFindElement(event_tree2, event_tree2, "command_key", NULL, NULL, MXML_DESCEND);
|
||||||
assert_non_null(n);
|
assert_non_null(n);
|
||||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
||||||
|
|
||||||
|
|
@ -126,46 +126,6 @@ static void cwmp_backup_session_unit_test(void **state)
|
||||||
bkp_event1 = NULL;
|
bkp_event1 = NULL;
|
||||||
bkp_event2 = NULL;
|
bkp_event2 = NULL;
|
||||||
|
|
||||||
//case of two events with same id under different queues
|
|
||||||
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0, "queue1");
|
|
||||||
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0, "queue2");
|
|
||||||
bkp_session_save();
|
|
||||||
pFile = fopen(CWMP_BKP_FILE, "r");
|
|
||||||
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
|
|
||||||
fclose(pFile);
|
|
||||||
assert_non_null(bkp_event1);
|
|
||||||
assert_non_null(bkp_event2);
|
|
||||||
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue1_event", NULL, NULL, MXML_DESCEND);
|
|
||||||
queue_tree2 = mxmlFindElement(queue_tree1, backup_tree, "queue2_event", NULL, NULL, MXML_DESCEND);
|
|
||||||
|
|
||||||
assert_non_null(queue_tree1);
|
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_1BOOT);
|
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
|
||||||
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "1 BOOT");
|
|
||||||
|
|
||||||
assert_non_null(queue_tree2);
|
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "index", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
|
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "id", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
|
|
||||||
n = mxmlFindElement(queue_tree2, queue_tree2, "command_key", NULL, NULL, MXML_DESCEND);
|
|
||||||
assert_non_null(n);
|
|
||||||
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
|
|
||||||
|
|
||||||
MXML_DELETE(bkp_event1);
|
|
||||||
MXML_DELETE(bkp_event2);
|
|
||||||
bkp_session_save();
|
|
||||||
MXML_DELETE(backup_tree);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Insert Download
|
* Insert Download
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
verify_download_method.sh
|
|
||||||
verify_add_method.sh
|
verify_add_method.sh
|
||||||
verify_delete_method.sh
|
verify_delete_method.sh
|
||||||
verify_get_method.sh
|
verify_get_method.sh
|
||||||
verify_set_method.sh
|
verify_set_method.sh
|
||||||
verify_cmd_line.sh
|
verify_download_method.sh
|
||||||
|
verify_cmd_line.sh
|
||||||
Loading…
Add table
Reference in a new issue