From 831d8a6184cf6269b4e39615fe1997c29b1137cb Mon Sep 17 00:00:00 2001 From: vemax78 Date: Sun, 1 Dec 2013 22:48:38 +0100 Subject: [PATCH] Cancel all notify event when teardown connection --- src/ac/ac_backend.h | 1 + src/ac/ac_session.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/ac/ac_backend.h b/src/ac/ac_backend.h index e7f9aa5..ddb5e1e 100644 --- a/src/ac/ac_backend.h +++ b/src/ac/ac_backend.h @@ -6,6 +6,7 @@ /* SOAP event status*/ #define SOAP_EVENT_STATUS_GENERIC_ERROR -1 +#define SOAP_EVENT_STATUS_CANCEL -2 #define SOAP_EVENT_STATUS_RUNNING 0 #define SOAP_EVENT_STATUS_COMPLETE 1 diff --git a/src/ac/ac_session.c b/src/ac/ac_session.c index 9adb580..a3e0405 100644 --- a/src/ac/ac_session.c +++ b/src/ac/ac_session.c @@ -549,6 +549,26 @@ void ac_session_teardown(struct ac_session_t* session) { capwap_killall_timeout(&session->timeout); capwap_set_timeout(session->dfa.rfcDTLSSessionDelete, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); ac_dfa_change_state(session, CAPWAP_DTLS_TEARDOWN_STATE); + + /* Cancel all notify event */ + if (session->notifyevent->first) { + char buffer[5]; + struct ac_soap_response* response; + + capwap_itoa(SOAP_EVENT_STATUS_CANCEL, buffer); + while (session->notifyevent->first != NULL) { + struct ac_session_notify_event_t* notify = (struct ac_session_notify_event_t*)session->notifyevent->first->item; + + /* Cancel event */ + response = ac_soap_updatebackendevent(session, notify->idevent, buffer); + if (response) { + ac_soapclient_free_response(response); + } + + /* Remove notify event */ + capwap_itemlist_free(capwap_itemlist_remove(session->notifyevent, session->notifyevent->first)); + } + } } /* */