Improved the WTP application to exit
This commit is contained in:
parent
4d2292b7f0
commit
49bf2dc5c9
@ -59,6 +59,17 @@ long capwap_get_timeout(struct timeout_control* timeout, long* index) {
|
|||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void capwap_wait_timeout(struct timeout_control* timeout, unsigned long index) {
|
||||||
|
ASSERT(timeout != NULL);
|
||||||
|
ASSERT(index < CAPWAP_MAX_TIMER);
|
||||||
|
|
||||||
|
if (timeout->items[index].enable) {
|
||||||
|
for (capwap_update_timeout(timeout); timeout->items[index].delta > 0; capwap_update_timeout(timeout)) {
|
||||||
|
usleep((useconds_t)timeout->items[index].delta * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int capwap_is_enable_timeout(struct timeout_control* timeout, unsigned long index) {
|
int capwap_is_enable_timeout(struct timeout_control* timeout, unsigned long index) {
|
||||||
ASSERT(timeout != NULL);
|
ASSERT(timeout != NULL);
|
||||||
ASSERT(index < CAPWAP_MAX_TIMER);
|
ASSERT(index < CAPWAP_MAX_TIMER);
|
||||||
|
@ -87,6 +87,7 @@ long capwap_get_timeout(struct timeout_control* timeout, long* index);
|
|||||||
void capwap_update_timeout(struct timeout_control* timeout);
|
void capwap_update_timeout(struct timeout_control* timeout);
|
||||||
void capwap_set_timeout(unsigned long value, struct timeout_control* timeout, unsigned long index);
|
void capwap_set_timeout(unsigned long value, struct timeout_control* timeout, unsigned long index);
|
||||||
void capwap_kill_timeout(struct timeout_control* timeout, unsigned long index);
|
void capwap_kill_timeout(struct timeout_control* timeout, unsigned long index);
|
||||||
|
void capwap_wait_timeout(struct timeout_control* timeout, unsigned long index);
|
||||||
void capwap_killall_timeout(struct timeout_control* timeout);
|
void capwap_killall_timeout(struct timeout_control* timeout);
|
||||||
int capwap_is_enable_timeout(struct timeout_control* timeout, unsigned long index);
|
int capwap_is_enable_timeout(struct timeout_control* timeout, unsigned long index);
|
||||||
int capwap_is_timeout(struct timeout_control* timeout, unsigned long index);
|
int capwap_is_timeout(struct timeout_control* timeout, unsigned long index);
|
||||||
|
@ -35,7 +35,7 @@ static struct capwap_packet_rxmng* wtp_get_packet_rxmng(int isctrlmsg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
static void wtp_free_packet_rxmng(int isctrlmsg) {
|
void wtp_free_packet_rxmng(int isctrlmsg) {
|
||||||
if (isctrlmsg && g_wtp.rxmngctrlpacket) {
|
if (isctrlmsg && g_wtp.rxmngctrlpacket) {
|
||||||
capwap_packet_rxmng_free(g_wtp.rxmngctrlpacket);
|
capwap_packet_rxmng_free(g_wtp.rxmngctrlpacket);
|
||||||
g_wtp.rxmngctrlpacket = NULL;
|
g_wtp.rxmngctrlpacket = NULL;
|
||||||
@ -370,7 +370,7 @@ int wtp_dfa_running(void) {
|
|||||||
signal(SIGINT, wtp_signal_handler);
|
signal(SIGINT, wtp_signal_handler);
|
||||||
signal(SIGTERM, wtp_signal_handler);
|
signal(SIGTERM, wtp_signal_handler);
|
||||||
|
|
||||||
for (;;) {
|
while (action != WTP_DFA_EXIT) {
|
||||||
/* If request wait packet from AC */
|
/* If request wait packet from AC */
|
||||||
isrecvpacket = 0;
|
isrecvpacket = 0;
|
||||||
if ((action == WTP_DFA_ACCEPT_PACKET) || (action == WTP_DFA_DROP_PACKET)) {
|
if ((action == WTP_DFA_ACCEPT_PACKET) || (action == WTP_DFA_DROP_PACKET)) {
|
||||||
@ -378,7 +378,14 @@ int wtp_dfa_running(void) {
|
|||||||
buffersize = CAPWAP_MAX_PACKET_SIZE;
|
buffersize = CAPWAP_MAX_PACKET_SIZE;
|
||||||
index = capwap_recvfrom(fds, fdscount, buffer, &buffersize, &recvfromaddr, &recvtoaddr, &timeout);
|
index = capwap_recvfrom(fds, fdscount, buffer, &buffersize, &recvfromaddr, &recvtoaddr, &timeout);
|
||||||
if (!g_wtp.running) {
|
if (!g_wtp.running) {
|
||||||
break;
|
capwap_logging_debug("Closing WTP, Teardown connection");
|
||||||
|
|
||||||
|
/* Manual teardown */
|
||||||
|
index = CAPWAP_RECV_ERROR_TIMEOUT;
|
||||||
|
wtp_teardown_connection(&timeout);
|
||||||
|
|
||||||
|
/* Wait RFC teardown timeout */
|
||||||
|
capwap_wait_timeout(&timeout, CAPWAP_TIMER_CONTROL_CONNECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
@ -547,21 +554,7 @@ int wtp_dfa_running(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free DTSL Control */
|
|
||||||
if (g_wtp.ctrldtls.enable) {
|
|
||||||
capwap_crypt_close(&g_wtp.ctrldtls);
|
|
||||||
capwap_crypt_freesession(&g_wtp.ctrldtls);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free DTLS Data */
|
|
||||||
if (g_wtp.datadtls.enable) {
|
|
||||||
capwap_crypt_close(&g_wtp.datadtls);
|
|
||||||
capwap_crypt_freesession(&g_wtp.datadtls);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free memory */
|
/* Free memory */
|
||||||
wtp_free_packet_rxmng(0);
|
|
||||||
wtp_free_packet_rxmng(1);
|
|
||||||
capwap_free(fds);
|
capwap_free(fds);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define WTP_DFA_NO_PACKET 1
|
#define WTP_DFA_NO_PACKET 1
|
||||||
#define WTP_DFA_ACCEPT_PACKET 2
|
#define WTP_DFA_ACCEPT_PACKET 2
|
||||||
#define WTP_DFA_DROP_PACKET 3
|
#define WTP_DFA_DROP_PACKET 3
|
||||||
|
#define WTP_DFA_EXIT 4
|
||||||
|
|
||||||
/* */ /* TODO da rifare */
|
/* */ /* TODO da rifare */
|
||||||
struct wtp_discovery_response {
|
struct wtp_discovery_response {
|
||||||
@ -26,6 +27,7 @@ int wtp_bio_send(struct capwap_dtls* dtls, char* buffer, int length, void* param
|
|||||||
int wtp_teardown_connection(struct timeout_control* timeout);
|
int wtp_teardown_connection(struct timeout_control* timeout);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
|
void wtp_free_packet_rxmng(int isctrlmsg);
|
||||||
void wtp_free_reference_last_request(void);
|
void wtp_free_reference_last_request(void);
|
||||||
void wtp_free_reference_last_response(void);
|
void wtp_free_reference_last_response(void);
|
||||||
|
|
||||||
|
@ -90,9 +90,13 @@ int wtp_dfa_state_dtlsteardown(struct capwap_parsed_packet* packet, struct timeo
|
|||||||
/* */
|
/* */
|
||||||
wtp_free_reference_last_request();
|
wtp_free_reference_last_request();
|
||||||
wtp_free_reference_last_response();
|
wtp_free_reference_last_response();
|
||||||
|
wtp_free_packet_rxmng(0);
|
||||||
|
wtp_free_packet_rxmng(1);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
if ((g_wtp.dfa.rfcFailedDTLSSessionCount >= g_wtp.dfa.rfcMaxFailedDTLSSessionRetry) || (g_wtp.dfa.rfcFailedDTLSAuthFailCount >= g_wtp.dfa.rfcMaxFailedDTLSSessionRetry)) {
|
if (!g_wtp.running) {
|
||||||
|
return WTP_DFA_EXIT;
|
||||||
|
} else if ((g_wtp.dfa.rfcFailedDTLSSessionCount >= g_wtp.dfa.rfcMaxFailedDTLSSessionRetry) || (g_wtp.dfa.rfcFailedDTLSAuthFailCount >= g_wtp.dfa.rfcMaxFailedDTLSSessionRetry)) {
|
||||||
wtp_dfa_change_state(CAPWAP_DTLS_TEARDOWN_TO_SULKING_STATE);
|
wtp_dfa_change_state(CAPWAP_DTLS_TEARDOWN_TO_SULKING_STATE);
|
||||||
} else {
|
} else {
|
||||||
wtp_dfa_change_state(CAPWAP_DTLS_TEARDOWN_TO_IDLE_STATE);
|
wtp_dfa_change_state(CAPWAP_DTLS_TEARDOWN_TO_IDLE_STATE);
|
||||||
|
Loading…
Reference in New Issue
Block a user