mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
Fix duplicate events in inform
This commit is contained in:
parent
4d57b1ed19
commit
21021a7134
2 changed files with 30 additions and 30 deletions
|
|
@ -215,10 +215,8 @@ void bkp_session_simple_insert_in_parent(const char *parent, const char *child,
|
|||
|
||||
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
|
||||
{
|
||||
char event_idx[32];
|
||||
mxml_node_t *b;
|
||||
|
||||
snprintf(event_idx, sizeof(event_idx), "%d", index);
|
||||
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
|
||||
if (!b) {
|
||||
struct xml_data_struct bkp_xml_event = {0};
|
||||
|
|
@ -228,8 +226,9 @@ mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
|
|||
int fault = build_xml_node_data(BKP_EVT_BUILD, bkp_tree, &bkp_xml_event);
|
||||
if (fault != CWMP_OK)
|
||||
return NULL;
|
||||
|
||||
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
|
||||
}
|
||||
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
|
||||
return b;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,10 @@
|
|||
static struct event_container *__cwmp_add_event_container(int event_code, const char *command_key)
|
||||
{
|
||||
struct event_container *event_container = NULL;
|
||||
list_for_each_entry(event_container, &cwmp_ctx.session->events, list) {
|
||||
struct list_head *ilist;
|
||||
|
||||
list_for_each (ilist, &(cwmp_ctx.session->events)) {
|
||||
event_container = list_entry(ilist, struct event_container, list);
|
||||
if (event_container->code == event_code) {
|
||||
return event_container;
|
||||
}
|
||||
|
|
@ -30,7 +33,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, const
|
|||
return NULL;
|
||||
}
|
||||
INIT_LIST_HEAD(&(event_container->head_dm_parameter));
|
||||
list_add_tail(&(event_container->list), &(cwmp_ctx.session->events));
|
||||
list_add(&(event_container->list), ilist->prev);
|
||||
event_container->code = event_code;
|
||||
event_container->command_key = command_key ? strdup(command_key) : strdup("");
|
||||
event_container->next_session = true;
|
||||
|
|
@ -39,6 +42,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, const
|
|||
}
|
||||
cwmp_ctx.event_id++;
|
||||
event_container->id = cwmp_ctx.event_id;
|
||||
|
||||
return event_container;
|
||||
}
|
||||
|
||||
|
|
@ -54,6 +58,11 @@ void move_next_session_events_to_actual_session()
|
|||
|
||||
struct list_head *event_container_list = &(cwmp_ctx.session->events);
|
||||
list_for_each_entry (event_container, event_container_list, list) {
|
||||
// cppcheck-suppress uninitvar
|
||||
if (cwmp_ctx.session->session_status.is_heartbeat && event_container->code != EVENT_IDX_14HEARTBEAT)
|
||||
continue;
|
||||
if ((!cwmp_ctx.session->session_status.is_heartbeat) && (event_container->code == EVENT_IDX_14HEARTBEAT))
|
||||
continue;
|
||||
event_container->next_session = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -61,21 +70,21 @@ void move_next_session_events_to_actual_session()
|
|||
int cwmp_remove_all_session_events()
|
||||
{
|
||||
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
||||
struct list_head *events_ptr = cwmp_ctx.session->events.next;
|
||||
while (events_ptr != &cwmp_ctx.session->events) {
|
||||
struct event_container *event_container;
|
||||
event_container = list_entry(events_ptr, struct event_container, list);
|
||||
struct event_container *event_container = NULL, *node = NULL;
|
||||
struct list_head *events_container_list = &(cwmp_ctx.session->events);
|
||||
|
||||
list_for_each_entry_safe(event_container, node, events_container_list, list) {
|
||||
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
|
||||
events_ptr = events_ptr->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
bkp_session_delete_element("cwmp_event", event_container->id);
|
||||
free(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);
|
||||
events_ptr = cwmp_ctx.session->events.next;
|
||||
}
|
||||
|
||||
bkp_session_save();
|
||||
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
||||
return CWMP_OK;
|
||||
|
|
@ -84,29 +93,21 @@ int cwmp_remove_all_session_events()
|
|||
int remove_single_event(int event_code)
|
||||
{
|
||||
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
||||
while (cwmp_ctx.session->events.next != &cwmp_ctx.session->events) {
|
||||
struct event_container *event_container;
|
||||
event_container = list_entry(cwmp_ctx.session->events.next, struct event_container, list);
|
||||
if (event_container->next_session)
|
||||
continue;
|
||||
if (event_container->code == event_code) {
|
||||
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));
|
||||
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);
|
||||
struct event_container *event_container = NULL, *node = NULL;
|
||||
struct list_head *events_container_list = &(cwmp_ctx.session->events);
|
||||
|
||||
list_for_each_entry_safe(event_container, node, events_container_list, list) {
|
||||
if (event_container->code == event_code || !event_container->next_session) {
|
||||
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));
|
||||
free(event_container);
|
||||
}
|
||||
}
|
||||
|
||||
bkp_session_save();
|
||||
|
||||
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
||||
return CWMP_OK;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue