Refactoring timeout functions, change functions name and add timeout handler
into session.
This commit is contained in:
@ -762,7 +762,7 @@ void ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_p
|
||||
/* Change state */
|
||||
if (CAPWAP_RESULTCODE_OK(result)) {
|
||||
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_STATE);
|
||||
capwap_set_timeout(session->dfa.rfcChangeStatePendingTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcChangeStatePendingTimer, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
ac_session_teardown(session);
|
||||
}
|
||||
|
@ -228,7 +228,7 @@ void ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_p
|
||||
/* Change state */
|
||||
if (CAPWAP_RESULTCODE_OK(result)) {
|
||||
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_RUN_STATE);
|
||||
capwap_set_timeout(session->dfa.rfcDataCheckTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcDataCheckTimer, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
ac_session_teardown(session);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ int ac_dtls_setup(struct ac_session_t* session) {
|
||||
|
||||
/* Wait DTLS handshake complete */
|
||||
ac_dfa_change_state(session, CAPWAP_DTLS_CONNECT_STATE);
|
||||
capwap_set_timeout(session->dfa.rfcWaitDTLS, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcWaitDTLS, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ void ac_dfa_state_reset(struct ac_session_t* session, struct capwap_parsed_packe
|
||||
}
|
||||
|
||||
/* Update timeout */
|
||||
capwap_set_timeout(session->dfa.rfcRetransmitInterval, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcRetransmitInterval, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -86,19 +86,19 @@ void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet*
|
||||
/* TODO */
|
||||
|
||||
/* */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
case CAPWAP_CHANGE_STATE_EVENT_REQUEST: {
|
||||
/* TODO */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
case CAPWAP_ECHO_REQUEST: {
|
||||
if (!receive_echo_request(session, packet)) {
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
ac_session_teardown(session);
|
||||
}
|
||||
@ -110,19 +110,19 @@ void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet*
|
||||
/* TODO */
|
||||
|
||||
/* */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
case CAPWAP_WTP_EVENT_REQUEST: {
|
||||
/* TODO */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
case CAPWAP_DATA_TRANSFER_REQUEST: {
|
||||
/* TODO */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet*
|
||||
/* TODO */
|
||||
|
||||
/* */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -138,13 +138,13 @@ void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet*
|
||||
/* TODO */
|
||||
|
||||
/* */
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
|
||||
case CAPWAP_IEEE80211_WLAN_CONFIGURATION_RESPONSE: {
|
||||
receive_ieee80211_wlan_configuration_response(session, packet);
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -163,7 +163,7 @@ void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet*
|
||||
}
|
||||
|
||||
/* Update timeout */
|
||||
capwap_set_timeout(session->dfa.rfcRetransmitInterval, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcRetransmitInterval, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
}
|
||||
} else {
|
||||
ac_session_teardown(session);
|
||||
|
@ -102,7 +102,7 @@ void ac_msgqueue_notify_closethread(pthread_t threadid) {
|
||||
}
|
||||
|
||||
/* */
|
||||
static int ac_recvfrom(struct pollfd* fds, int fdscount, void* buffer, int* size, struct sockaddr_storage* recvfromaddr, struct sockaddr_storage* recvtoaddr, struct timeout_control* timeout) {
|
||||
static int ac_recvfrom(struct pollfd* fds, int fdscount, void* buffer, int* size, struct sockaddr_storage* recvfromaddr, struct sockaddr_storage* recvtoaddr) {
|
||||
int index;
|
||||
|
||||
ASSERT(fds);
|
||||
@ -114,7 +114,7 @@ static int ac_recvfrom(struct pollfd* fds, int fdscount, void* buffer, int* size
|
||||
ASSERT(recvtoaddr != NULL);
|
||||
|
||||
/* Wait packet */
|
||||
index = capwap_wait_recvready(fds, fdscount, timeout);
|
||||
index = capwap_wait_recvready(fds, fdscount, NULL);
|
||||
if (index < 0) {
|
||||
return index;
|
||||
} else if (index == (fdscount - 1)) {
|
||||
@ -502,7 +502,7 @@ static struct ac_session_t* ac_create_session(struct sockaddr_storage* wtpaddres
|
||||
capwap_event_init(&session->changereference);
|
||||
|
||||
/* */
|
||||
capwap_init_timeout(&session->timeout);
|
||||
session->timeout = capwap_timeout_init();
|
||||
|
||||
/* Duplicate state for DFA */
|
||||
memcpy(&session->dfa, &g_ac.dfa, sizeof(struct ac_state));
|
||||
@ -587,7 +587,7 @@ static struct ac_session_data_t* ac_create_session_data(struct sockaddr_storage*
|
||||
capwap_event_init(&sessiondata->changereference);
|
||||
|
||||
/* */
|
||||
capwap_init_timeout(&sessiondata->timeout);
|
||||
sessiondata->timeout = capwap_timeout_init();
|
||||
|
||||
/* Connection info */
|
||||
memcpy(&sessiondata->connection.socket, sock, sizeof(struct capwap_socket));
|
||||
@ -718,7 +718,7 @@ int ac_execute(void) {
|
||||
while (g_ac.running) {
|
||||
/* Receive packet */
|
||||
buffersize = sizeof(buffer);
|
||||
index = ac_recvfrom(fds, fdscount, buffer, &buffersize, &recvfromaddr, &recvtoaddr, NULL);
|
||||
index = ac_recvfrom(fds, fdscount, buffer, &buffersize, &recvfromaddr, &recvtoaddr);
|
||||
if (!g_ac.running) {
|
||||
capwap_logging_debug("Closing AC");
|
||||
break;
|
||||
|
@ -40,8 +40,8 @@ static int ac_session_action_resetwtp(struct ac_session_t* session, struct ac_no
|
||||
/* Send Reset Request to WTP */
|
||||
if (capwap_crypt_sendto_fragmentpacket(&session->dtls, session->connection.socket.socket[session->connection.socket.type], session->requestfragmentpacket, &session->connection.localaddr, &session->connection.remoteaddr)) {
|
||||
session->dfa.rfcRetransmitCount = 0;
|
||||
capwap_killall_timeout(&session->timeout);
|
||||
capwap_set_timeout(session->dfa.rfcRetransmitInterval, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_killall(session->timeout);
|
||||
capwap_timeout_set(session->dfa.rfcRetransmitInterval, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
ac_dfa_change_state(session, CAPWAP_RESET_STATE);
|
||||
} else {
|
||||
capwap_logging_debug("Warning: error to send reset request packet");
|
||||
@ -95,8 +95,8 @@ static int ac_session_action_addwlan(struct ac_session_t* session, struct ac_not
|
||||
/* Send WLAN Configuration Request to WTP */
|
||||
if (capwap_crypt_sendto_fragmentpacket(&session->dtls, session->connection.socket.socket[session->connection.socket.type], session->requestfragmentpacket, &session->connection.localaddr, &session->connection.remoteaddr)) {
|
||||
session->dfa.rfcRetransmitCount = 0;
|
||||
capwap_killall_timeout(&session->timeout);
|
||||
capwap_set_timeout(session->dfa.rfcRetransmitInterval, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_killall(session->timeout);
|
||||
capwap_timeout_set(session->dfa.rfcRetransmitInterval, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
capwap_logging_debug("Warning: error to send reset request packet");
|
||||
ac_free_reference_last_request(session);
|
||||
@ -139,7 +139,7 @@ static int ac_session_action_execute(struct ac_session_t* session, struct ac_ses
|
||||
|
||||
if (valid) {
|
||||
ac_dfa_change_state(session, CAPWAP_RUN_STATE);
|
||||
capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_ECHO_INTERVAL, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
result = CAPWAP_ERROR_CLOSE;
|
||||
}
|
||||
@ -163,7 +163,7 @@ static int ac_session_action_execute(struct ac_session_t* session, struct ac_ses
|
||||
}
|
||||
|
||||
/* */
|
||||
static int ac_network_read(struct ac_session_t* session, void* buffer, int length, struct timeout_control* timeout) {
|
||||
static int ac_network_read(struct ac_session_t* session, void* buffer, int length) {
|
||||
int result = 0;
|
||||
long indextimer;
|
||||
long waittimeout;
|
||||
@ -213,7 +213,7 @@ static int ac_network_read(struct ac_session_t* session, void* buffer, int lengt
|
||||
if ((oldaction == CAPWAP_DTLS_ACTION_HANDSHAKE) && (session->dtls.action == CAPWAP_DTLS_ACTION_DATA)) {
|
||||
if (session->state == CAPWAP_DTLS_CONNECT_STATE) {
|
||||
ac_dfa_change_state(session, CAPWAP_JOIN_STATE);
|
||||
capwap_set_timeout(session->dfa.rfcWaitJoin, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcWaitJoin, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -234,8 +234,8 @@ static int ac_network_read(struct ac_session_t* session, void* buffer, int lengt
|
||||
capwap_lock_exit(&session->sessionlock);
|
||||
|
||||
/* Update timeout */
|
||||
capwap_update_timeout(timeout);
|
||||
waittimeout = capwap_get_timeout(timeout, &indextimer);
|
||||
capwap_timeout_update(session->timeout);
|
||||
waittimeout = capwap_timeout_get(session->timeout, &indextimer);
|
||||
if ((waittimeout <= 0) && (indextimer != CAPWAP_TIMER_UNDEF)) {
|
||||
return AC_ERROR_TIMEOUT;
|
||||
}
|
||||
@ -414,6 +414,7 @@ static void ac_session_destroy(struct ac_session_t* session) {
|
||||
capwap_list_free(session->requestfragmentpacket);
|
||||
capwap_list_free(session->responsefragmentpacket);
|
||||
capwap_list_free(session->notifyevent);
|
||||
capwap_timeout_free(session->timeout);
|
||||
|
||||
/* Free DFA resource */
|
||||
capwap_array_free(session->dfa.acipv4list.addresses);
|
||||
@ -480,12 +481,12 @@ static void ac_session_run(struct ac_session_t* session) {
|
||||
} else {
|
||||
/* Wait Join request */
|
||||
ac_dfa_change_state(session, CAPWAP_JOIN_STATE);
|
||||
capwap_set_timeout(session->dfa.rfcWaitJoin, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(session->dfa.rfcWaitJoin, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
}
|
||||
|
||||
while (session->state != CAPWAP_DTLS_TEARDOWN_STATE) {
|
||||
/* Get packet */
|
||||
length = ac_network_read(session, buffer, sizeof(buffer), &session->timeout);
|
||||
length = ac_network_read(session, buffer, sizeof(buffer));
|
||||
if (length < 0) {
|
||||
if (length == AC_ERROR_TIMEOUT) {
|
||||
ac_dfa_execute(session, NULL);
|
||||
@ -601,7 +602,7 @@ static void ac_session_run(struct ac_session_t* session) {
|
||||
}
|
||||
|
||||
/* Wait teardown timeout before kill session */
|
||||
capwap_wait_timeout(&session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_wait(session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
ac_dfa_state_teardown(session);
|
||||
|
||||
/* Release reference session */
|
||||
@ -668,8 +669,8 @@ 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);
|
||||
capwap_timeout_killall(session->timeout);
|
||||
capwap_timeout_set(session->dfa.rfcDTLSSessionDelete, session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
ac_dfa_change_state(session, CAPWAP_DTLS_TEARDOWN_STATE);
|
||||
|
||||
/* Cancel all notify event */
|
||||
|
@ -66,7 +66,7 @@ struct ac_session_data_t {
|
||||
unsigned short mtu;
|
||||
struct capwap_connection connection;
|
||||
struct capwap_dtls dtls;
|
||||
struct timeout_control timeout;
|
||||
struct timeout_control* timeout;
|
||||
|
||||
capwap_event_t waitpacket;
|
||||
capwap_lock_t sessionlock;
|
||||
@ -105,7 +105,7 @@ struct ac_session_t {
|
||||
unsigned short mtu;
|
||||
struct capwap_dtls dtls;
|
||||
struct capwap_connection connection;
|
||||
struct timeout_control timeout;
|
||||
struct timeout_control* timeout;
|
||||
|
||||
capwap_event_t waitpacket;
|
||||
capwap_lock_t sessionlock;
|
||||
|
@ -63,8 +63,8 @@ static int ac_network_read(struct ac_session_data_t* sessiondata, void* buffer,
|
||||
if (result == CAPWAP_ERROR_AGAIN) {
|
||||
/* Check is handshake complete */
|
||||
if ((oldaction == CAPWAP_DTLS_ACTION_HANDSHAKE) && (sessiondata->dtls.action == CAPWAP_DTLS_ACTION_DATA)) {
|
||||
capwap_kill_timeout(&sessiondata->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_set_timeout(AC_MAX_DATA_CHECK_TIMER, &sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
capwap_timeout_kill(sessiondata->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_MAX_DATA_CHECK_TIMER, sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -84,8 +84,8 @@ static int ac_network_read(struct ac_session_data_t* sessiondata, void* buffer,
|
||||
capwap_lock_exit(&sessiondata->sessionlock);
|
||||
|
||||
/* Update timeout */
|
||||
capwap_update_timeout(&sessiondata->timeout);
|
||||
waittimeout = capwap_get_timeout(&sessiondata->timeout, &indextimer);
|
||||
capwap_timeout_update(sessiondata->timeout);
|
||||
waittimeout = capwap_timeout_get(sessiondata->timeout, &indextimer);
|
||||
if ((waittimeout <= 0) && (indextimer != CAPWAP_TIMER_UNDEF)) {
|
||||
return AC_ERROR_TIMEOUT;
|
||||
}
|
||||
@ -253,6 +253,7 @@ static void ac_session_data_destroy(struct ac_session_data_t* sessiondata) {
|
||||
capwap_lock_destroy(&sessiondata->sessionlock);
|
||||
capwap_list_free(sessiondata->action);
|
||||
capwap_list_free(sessiondata->packets);
|
||||
capwap_timeout_free(sessiondata->timeout);
|
||||
|
||||
/* Free fragments packet */
|
||||
if (sessiondata->rxmngpacket) {
|
||||
@ -311,13 +312,13 @@ static void ac_session_data_run(struct ac_session_data_t* sessiondata) {
|
||||
/* Create DTLS channel */
|
||||
if (sessiondata->enabledtls) {
|
||||
if (ac_dtls_data_setup(sessiondata)) {
|
||||
capwap_set_timeout(AC_DEFAULT_WAITDTLS_INTERVAL, &sessiondata->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
capwap_timeout_set(AC_DEFAULT_WAITDTLS_INTERVAL, sessiondata->timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||
} else {
|
||||
capwap_logging_debug("Unable to start DTLS data");
|
||||
sessiondata->running = 0;
|
||||
}
|
||||
} else {
|
||||
capwap_set_timeout(AC_MAX_DATA_CHECK_TIMER, &sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
capwap_timeout_set(AC_MAX_DATA_CHECK_TIMER, sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
}
|
||||
|
||||
/* */
|
||||
@ -355,7 +356,7 @@ static void ac_session_data_run(struct ac_session_data_t* sessiondata) {
|
||||
ac_session_data_keepalive(sessiondata, &packet);
|
||||
|
||||
/* Update timeout */
|
||||
capwap_set_timeout(AC_MAX_DATA_CHECK_TIMER, &sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
capwap_timeout_set(AC_MAX_DATA_CHECK_TIMER, sessiondata->timeout, CAPWAP_TIMER_DATA_KEEPALIVEDEAD);
|
||||
} else {
|
||||
/* TODO */
|
||||
}
|
||||
|
Reference in New Issue
Block a user