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)
|
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
|
||||||
{
|
{
|
||||||
char event_idx[32];
|
|
||||||
mxml_node_t *b;
|
mxml_node_t *b;
|
||||||
|
|
||||||
snprintf(event_idx, sizeof(event_idx), "%d", index);
|
|
||||||
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
|
b = get_bkp_session_node_by_id(bkp_tree, "cwmp_event", id);
|
||||||
if (!b) {
|
if (!b) {
|
||||||
struct xml_data_struct bkp_xml_event = {0};
|
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);
|
int fault = build_xml_node_data(BKP_EVT_BUILD, bkp_tree, &bkp_xml_event);
|
||||||
if (fault != CWMP_OK)
|
if (fault != CWMP_OK)
|
||||||
return NULL;
|
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;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,10 @@
|
||||||
static struct event_container *__cwmp_add_event_container(int event_code, const char *command_key)
|
static struct event_container *__cwmp_add_event_container(int event_code, const char *command_key)
|
||||||
{
|
{
|
||||||
struct event_container *event_container = NULL;
|
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) {
|
if (event_container->code == event_code) {
|
||||||
return event_container;
|
return event_container;
|
||||||
}
|
}
|
||||||
|
|
@ -30,7 +33,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, const
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
INIT_LIST_HEAD(&(event_container->head_dm_parameter));
|
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->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;
|
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++;
|
cwmp_ctx.event_id++;
|
||||||
event_container->id = cwmp_ctx.event_id;
|
event_container->id = cwmp_ctx.event_id;
|
||||||
|
|
||||||
return event_container;
|
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);
|
struct list_head *event_container_list = &(cwmp_ctx.session->events);
|
||||||
list_for_each_entry (event_container, event_container_list, list) {
|
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;
|
event_container->next_session = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -61,21 +70,21 @@ void move_next_session_events_to_actual_session()
|
||||||
int cwmp_remove_all_session_events()
|
int cwmp_remove_all_session_events()
|
||||||
{
|
{
|
||||||
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
||||||
struct list_head *events_ptr = cwmp_ctx.session->events.next;
|
struct event_container *event_container = NULL, *node = NULL;
|
||||||
while (events_ptr != &cwmp_ctx.session->events) {
|
struct list_head *events_container_list = &(cwmp_ctx.session->events);
|
||||||
struct event_container *event_container;
|
|
||||||
event_container = list_entry(events_ptr, struct event_container, list);
|
list_for_each_entry_safe(event_container, node, events_container_list, list) {
|
||||||
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
|
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
|
||||||
events_ptr = events_ptr->next;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bkp_session_delete_element("cwmp_event", event_container->id);
|
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));
|
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
||||||
list_del(&(event_container->list));
|
list_del(&(event_container->list));
|
||||||
free(event_container);
|
free(event_container);
|
||||||
events_ptr = cwmp_ctx.session->events.next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bkp_session_save();
|
bkp_session_save();
|
||||||
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
||||||
return CWMP_OK;
|
return CWMP_OK;
|
||||||
|
|
@ -84,29 +93,21 @@ int cwmp_remove_all_session_events()
|
||||||
int remove_single_event(int event_code)
|
int remove_single_event(int event_code)
|
||||||
{
|
{
|
||||||
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
CWMP_LOG(DEBUG, "%s:%d entry", __func__, __LINE__);
|
||||||
while (cwmp_ctx.session->events.next != &cwmp_ctx.session->events) {
|
struct event_container *event_container = NULL, *node = NULL;
|
||||||
struct event_container *event_container;
|
struct list_head *events_container_list = &(cwmp_ctx.session->events);
|
||||||
event_container = list_entry(cwmp_ctx.session->events.next, struct event_container, list);
|
|
||||||
if (event_container->next_session)
|
list_for_each_entry_safe(event_container, node, events_container_list, list) {
|
||||||
continue;
|
if (event_container->code == event_code || !event_container->next_session) {
|
||||||
if (event_container->code == event_code) {
|
bkp_session_delete_element("cwmp_event", event_container->id);
|
||||||
bkp_session_delete_element("cwmp_event",event_container->id);
|
FREE(event_container->command_key);
|
||||||
if (event_container->command_key)
|
|
||||||
free(event_container->command_key);
|
|
||||||
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
|
||||||
list_del(&(event_container->list));
|
list_del(&(event_container->list));
|
||||||
free(event_container);
|
free(event_container);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bkp_session_save();
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
CWMP_LOG(DEBUG, "%s:%d exit", __func__, __LINE__);
|
||||||
return CWMP_OK;
|
return CWMP_OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue