Ignore session in teardown state

This commit is contained in:
vemax78 2013-10-21 18:54:40 +02:00
parent 3147abc9bc
commit f82cca5e81

View File

@ -70,12 +70,16 @@ static struct ac_session_t* ac_search_session_from_wtpaddress(struct sockaddr_st
ASSERT(session != NULL); ASSERT(session != NULL);
if (!capwap_compare_ip(address, (isctrlsocket ? &session->wtpctrladdress : &session->wtpdataaddress))) { if (!capwap_compare_ip(address, (isctrlsocket ? &session->wtpctrladdress : &session->wtpdataaddress))) {
session->count++; /* Return session if not teardown */
result = session; if (!session->teardown) {
session->count++;
result = session;
}
break; break;
} }
search = search->next; search = search->next;
} }
capwap_lock_exit(&g_ac.sessionslock); capwap_lock_exit(&g_ac.sessionslock);
@ -202,8 +206,11 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff
ASSERT(session != NULL); ASSERT(session != NULL);
if (!memcmp(sessionid, &session->sessionid, sizeof(struct capwap_sessionid_element))) { if (!memcmp(sessionid, &session->sessionid, sizeof(struct capwap_sessionid_element))) {
session->count++; if (!session->teardown) {
result = session; session->count++;
result = session;
}
break; break;
} }
@ -227,7 +234,9 @@ static struct ac_session_t* ac_get_session_from_keepalive(void* buffer, int buff
/* Close session */ /* Close session */
static void ac_close_session(struct ac_session_t* session) { static void ac_close_session(struct ac_session_t* session) {
ac_session_send_action(session, AC_SESSION_ACTION_CLOSE, 0, NULL, 0); if (!session->teardown) {
ac_session_send_action(session, AC_SESSION_ACTION_CLOSE, 0, NULL, 0);
}
} }
/* Close sessions */ /* Close sessions */