From 09efd684ca063bfbaceb2cfbdbcad2a76fca802e Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 6 Sep 2022 16:49:15 +0200 Subject: [PATCH] Add more debug prints to network reachability monitor --- .../connection/networkreachabilitymonitor.cpp | 7 ++++ .../connection/networkreachabilitymonitor.h | 4 ++- .../networkreachabilitymonitorios.mm | 32 +++++++++---------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/libnymea-app/connection/networkreachabilitymonitor.cpp b/libnymea-app/connection/networkreachabilitymonitor.cpp index 0d57bc35..c910acd7 100644 --- a/libnymea-app/connection/networkreachabilitymonitor.cpp +++ b/libnymea-app/connection/networkreachabilitymonitor.cpp @@ -37,6 +37,13 @@ NetworkReachabilityMonitor::NetworkReachabilityMonitor(QObject *parent) } +NetworkReachabilityMonitor::~NetworkReachabilityMonitor() +{ +#ifdef Q_OS_IOS + teardownIOS(); +#endif +} + NymeaConnection::BearerTypes NetworkReachabilityMonitor::availableBearerTypes() const { return m_availableBearerTypes; diff --git a/libnymea-app/connection/networkreachabilitymonitor.h b/libnymea-app/connection/networkreachabilitymonitor.h index 95a526ca..56cb8d61 100644 --- a/libnymea-app/connection/networkreachabilitymonitor.h +++ b/libnymea-app/connection/networkreachabilitymonitor.h @@ -16,6 +16,7 @@ class NetworkReachabilityMonitor : public QObject Q_PROPERTY(NymeaConnection::BearerTypes availableBearerTypes READ availableBearerTypes NOTIFY availableBearerTypesChanged) public: explicit NetworkReachabilityMonitor(QObject *parent = nullptr); + ~NetworkReachabilityMonitor(); NymeaConnection::BearerTypes availableBearerTypes() const; @@ -34,7 +35,8 @@ private: #ifdef Q_OS_IOS void setupIOS(); - SCNetworkReachabilityRef _reachabilityRef; + void teardownIOS(); + SCNetworkReachabilityRef m_reachabilityRef; static NymeaConnection::BearerType flagsToBearerType(SCNetworkReachabilityFlags flags); static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info); #endif diff --git a/libnymea-app/connection/networkreachabilitymonitorios.mm b/libnymea-app/connection/networkreachabilitymonitorios.mm index a0c4f6c7..b13ca9bd 100644 --- a/libnymea-app/connection/networkreachabilitymonitorios.mm +++ b/libnymea-app/connection/networkreachabilitymonitorios.mm @@ -10,7 +10,8 @@ #import #import -#include +#include +Q_DECLARE_LOGGING_CATEGORY(dcNymeaConnection) void NetworkReachabilityMonitor::ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) { @@ -19,9 +20,9 @@ void NetworkReachabilityMonitor::ReachabilityCallback(SCNetworkReachabilityRef t NetworkReachabilityMonitor* thiz = (__bridge NetworkReachabilityMonitor *)info; // Post a notification to notify the client that the network reachability changed. - qCritical() << "******* network reachability changed"; NymeaConnection::BearerTypes old = thiz->m_availableBearerTypes; thiz->m_availableBearerTypes = flagsToBearerType(flags); + qCDebug(dcNymeaConnection()) << "Network reachability changed. Old bearers:" << old << "New bearers:" << thiz->m_availableBearerTypes << "(Flags:" << flags << ")"; if (thiz->m_availableBearerTypes != old) { emit thiz->availableBearerTypesChanged(); } @@ -35,32 +36,29 @@ void NetworkReachabilityMonitor::setupIOS() zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); - if (reachability != NULL) { - _reachabilityRef = reachability; + m_reachabilityRef = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); + if (m_reachabilityRef == NULL) { + qCCritical(dcNymeaConnection()) << "Error setting up reachability monitor"; + return; } SCNetworkReachabilityContext context = {0, (__bridge void *)(this), NULL, NULL, NULL}; - qCritical() << "Registering callback"; - if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context)) { - qCritical() << "Callback registered"; - if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) { - qCritical() << "******* reachability callback set up"; + if (SCNetworkReachabilitySetCallback(m_reachabilityRef, ReachabilityCallback, &context)) { + if (SCNetworkReachabilityScheduleWithRunLoop(m_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) { } else { - qCritical() << "******** Error setting up reachability callback"; + qCCritical(dcNymeaConnection()) << "Error setting up reachability callback"; } } - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { + if (SCNetworkReachabilityGetFlags(m_reachabilityRef, &flags)) { m_availableBearerTypes = flagsToBearerType(flags); } +} - // TODO: unregister -// SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - +void NetworkReachabilityMonitor::teardownIOS() +{ + SCNetworkReachabilityUnscheduleFromRunLoop(m_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); } NymeaConnection::BearerType NetworkReachabilityMonitor::flagsToBearerType(SCNetworkReachabilityFlags flags)