diff --git a/src/ac/ac_execute.c b/src/ac/ac_execute.c index 4610c33..5a9a81b 100644 --- a/src/ac/ac_execute.c +++ b/src/ac/ac_execute.c @@ -218,6 +218,39 @@ static struct ac_session_t* ac_search_session_from_wtpaddress(struct sockaddr_st return result; } +/* Find WTP session id */ +struct ac_session_t* ac_search_session_from_sessionid(struct capwap_sessionid_element* sessionid) { + struct ac_session_t* result = NULL; + struct capwap_list_item* search; + + ASSERT(sessionid != NULL); + + capwap_rwlock_rdlock(&g_ac.sessionslock); + + search = g_ac.sessions->first; + while (search != NULL) { + struct ac_session_t* session = (struct ac_session_t*)search->item; + ASSERT(session != NULL); + + if (!memcmp(sessionid, &session->sessionid, sizeof(struct capwap_sessionid_element))) { + /* Increment session count */ + capwap_lock_enter(&session->sessionlock); + session->count++; + capwap_lock_exit(&session->sessionlock); + + /* */ + result = session; + break; + } + + search = search->next; + } + + capwap_rwlock_exit(&g_ac.sessionslock); + + return result; +} + /* */ int ac_has_sessionid(struct capwap_sessionid_element* sessionid) { int result = 0; @@ -362,30 +395,6 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff return result; } -/* */ -void ac_notify_event_session(struct capwap_sessionid_element* sessionid, long param) { - struct capwap_list_item* search; - - ASSERT(sessionid != NULL); - - capwap_rwlock_rdlock(&g_ac.sessionslock); - - search = g_ac.sessions->first; - while (search != NULL) { - struct ac_session_t* session = (struct ac_session_t*)search->item; - ASSERT(session != NULL); - - if (!memcmp(sessionid, &session->sessionid, sizeof(struct capwap_sessionid_element))) { - ac_session_send_action(session, AC_SESSION_ACTION_NOTIFY_EVENT, param, NULL, 0); - break; - } - - search = search->next; - } - - capwap_rwlock_exit(&g_ac.sessionslock); -} - /* Close sessions */ static void ac_close_sessions() { struct capwap_list_item* search; diff --git a/src/ac/ac_session.h b/src/ac/ac_session.h index 6e0e2b9..768ce90 100644 --- a/src/ac/ac_session.h +++ b/src/ac/ac_session.h @@ -13,7 +13,6 @@ /* */ #define AC_SESSION_ACTION_CLOSE 0 -#define AC_SESSION_ACTION_NOTIFY_EVENT 1 /* AC packet */ struct ac_packet { @@ -87,6 +86,7 @@ struct ac_session_t { /* */ void* ac_session_thread(void* param); +struct ac_session_t* ac_search_session_from_sessionid(struct capwap_sessionid_element* sessionid); int ac_session_teardown_connection(struct ac_session_t* session); void ac_session_release_reference(struct ac_session_t* session);