Add session search function by sessionid
This commit is contained in:
parent
ebd342c3ad
commit
992b742478
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user