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;
|
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 ac_has_sessionid(struct capwap_sessionid_element* sessionid) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
@ -362,30 +395,6 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff
|
|||||||
return result;
|
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 */
|
/* Close sessions */
|
||||||
static void ac_close_sessions() {
|
static void ac_close_sessions() {
|
||||||
struct capwap_list_item* search;
|
struct capwap_list_item* search;
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
/* */
|
/* */
|
||||||
#define AC_SESSION_ACTION_CLOSE 0
|
#define AC_SESSION_ACTION_CLOSE 0
|
||||||
#define AC_SESSION_ACTION_NOTIFY_EVENT 1
|
|
||||||
|
|
||||||
/* AC packet */
|
/* AC packet */
|
||||||
struct ac_packet {
|
struct ac_packet {
|
||||||
@ -87,6 +86,7 @@ struct ac_session_t {
|
|||||||
|
|
||||||
/* */
|
/* */
|
||||||
void* ac_session_thread(void* param);
|
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);
|
int ac_session_teardown_connection(struct ac_session_t* session);
|
||||||
void ac_session_release_reference(struct ac_session_t* session);
|
void ac_session_release_reference(struct ac_session_t* session);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user