Add more debug prints to network reachability monitor

This commit is contained in:
Michael Zanetti 2022-09-06 16:49:15 +02:00
parent 8c4eb6c05f
commit 09efd684ca
3 changed files with 25 additions and 18 deletions

View File

@ -37,6 +37,13 @@ NetworkReachabilityMonitor::NetworkReachabilityMonitor(QObject *parent)
}
NetworkReachabilityMonitor::~NetworkReachabilityMonitor()
{
#ifdef Q_OS_IOS
teardownIOS();
#endif
}
NymeaConnection::BearerTypes NetworkReachabilityMonitor::availableBearerTypes() const
{
return m_availableBearerTypes;

View File

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

View File

@ -10,7 +10,8 @@
#import <netinet/in.h>
#import <CoreFoundation/CoreFoundation.h>
#include <QDebug>
#include <QLoggingCategory>
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)