From 11c9052d77872a002398d14a92fb4bd039fd5928 Mon Sep 17 00:00:00 2001 From: Sadhyama Vengilat Date: Tue, 6 Aug 2019 11:06:00 +0530 Subject: [PATCH] parodus event handler to listen to interface_down and interface_up event --- CHANGELOG.md | 1 + src/ParodusInternal.c | 39 +++++++++++++++++++++++++++ src/ParodusInternal.h | 15 +++++++++++ src/nopoll_handlers.c | 9 ++++++- tests/test_nopoll_handlers.c | 6 +++++ tests/test_nopoll_handlers_fragment.c | 5 ++++ 6 files changed, 74 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13d971c..d427fc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - request auth token on every retry, not just after 403 - update to use nopoll v 1.0.2 - Add pause/resume heartBeatTimer +- parodus event handler to listen to interface_down and interface_up event ## [1.0.2] - 2019-02-08 - Refactored connection.c and updated corresponding unit tests diff --git a/src/ParodusInternal.c b/src/ParodusInternal.c index 54c24b7..ebf59ae 100644 --- a/src/ParodusInternal.c +++ b/src/ParodusInternal.c @@ -25,6 +25,10 @@ #include "config.h" #include "connection.h" +bool interface_down_event = false; + +pthread_mutex_t interface_down_mut=PTHREAD_MUTEX_INITIALIZER; + /*----------------------------------------------------------------------------*/ /* External Functions */ /*----------------------------------------------------------------------------*/ @@ -139,3 +143,38 @@ void timespec_diff(struct timespec *start, struct timespec *stop, return; } + + +/*------------------------------------------------------------------------------*/ +/* For interface_down_event Flag */ +/*------------------------------------------------------------------------------*/ + +// Get value of interface_down_event +bool get_interface_down_event() +{ + bool tmp = false; + pthread_mutex_lock (&interface_down_mut); + tmp = interface_down_event; + pthread_mutex_unlock (&interface_down_mut); + return tmp; +} + +// Reset value of interface_down_event to false +void reset_interface_down_event() +{ + pthread_mutex_lock (&interface_down_mut); + interface_down_event = false; + pthread_mutex_unlock (&interface_down_mut); +} + +// set value of interface_down_event to true +void set_interface_down_event() +{ + pthread_mutex_lock (&interface_down_mut); + interface_down_event = true; + pthread_mutex_unlock (&interface_down_mut); +} + + + + diff --git a/src/ParodusInternal.h b/src/ParodusInternal.h index e88bb05..7a88532 100644 --- a/src/ParodusInternal.h +++ b/src/ParodusInternal.h @@ -157,6 +157,21 @@ void addCRUDmsgToQueue(wrp_msg_t *crudMsg); void timespec_diff(struct timespec *start, struct timespec *stop, struct timespec *result); + +/*------------------------------------------------------------------------------*/ +/* For interface_down_event Flag */ +/*------------------------------------------------------------------------------*/ + +// Get value of interface_down_event +bool get_interface_down_event(); + +// Reset value of interface_down_event to false +void reset_interface_down_event(); + +// Set value of interface_down_event to true +void set_interface_down_event(); + + #ifdef __cplusplus } #endif diff --git a/src/nopoll_handlers.c b/src/nopoll_handlers.c index 9a722f0..6172e7d 100644 --- a/src/nopoll_handlers.c +++ b/src/nopoll_handlers.c @@ -177,8 +177,15 @@ void listenerOnCloseMessage (noPollCtx * ctx, noPollConn * conn, noPollPtr user_ OnboardLog("Reconnect detected, setting Reconnect reason as Unknown\n"); set_global_reconnect_reason("Unknown"); } + + if(!get_interface_down_event()) + { + ParodusInfo("Setting the close and retry connection\n"); + set_close_retry(); + } + else + ParodusInfo("Not Setting the close and retry connection as interface is down\n"); - set_close_retry(); ParodusPrint("listenerOnCloseMessage(): mutex unlock in producer thread\n"); } diff --git a/tests/test_nopoll_handlers.c b/tests/test_nopoll_handlers.c index 1689cd1..763cf21 100644 --- a/tests/test_nopoll_handlers.c +++ b/tests/test_nopoll_handlers.c @@ -21,6 +21,7 @@ #include #include +#include "../src/ParodusInternal.h" #include "../src/nopoll_handlers.h" #include "../src/parodus_log.h" @@ -46,6 +47,11 @@ bool get_global_reconnect_status() return LastReasonStatus; } +bool get_interface_down_event() +{ + return false; +} + void set_global_reconnect_status(bool status) { (void) status ; diff --git a/tests/test_nopoll_handlers_fragment.c b/tests/test_nopoll_handlers_fragment.c index 42cb6bd..0d6fc9d 100644 --- a/tests/test_nopoll_handlers_fragment.c +++ b/tests/test_nopoll_handlers_fragment.c @@ -48,6 +48,11 @@ bool get_global_reconnect_status() return LastReasonStatus; } +bool get_interface_down_event() +{ + return false; +} + void set_global_reconnect_status(bool status) { (void) status ;