Refactoring timeout functions, change functions name and add timeout handler

into session.
This commit is contained in:
vemax78
2014-02-19 19:16:33 +01:00
parent dff6ecb5e0
commit ea02d7379e
25 changed files with 224 additions and 227 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);
}
}
}

View File

@ -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);

View File

@ -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;

View File

@ -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 */

View File

@ -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;

View File

@ -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 */
}