From 2e4908c557453998355493752f1085a55b13b56d Mon Sep 17 00:00:00 2001 From: Igor Sorokin Date: Sun, 21 Jan 2024 20:41:06 +0300 Subject: [PATCH] Records detailed disconnect error info to log --- client/platforms/ios/ios_controller.mm | 47 ++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/client/platforms/ios/ios_controller.mm b/client/platforms/ios/ios_controller.mm index c29e2114..c27badda 100644 --- a/client/platforms/ios/ios_controller.mm +++ b/client/platforms/ios/ios_controller.mm @@ -249,8 +249,51 @@ void IosController::vpnStatusDidChange(void *pNotification) NETunnelProviderSession *session = (NETunnelProviderSession *)pNotification; if (session /* && session == TunnelManager.session */ ) { - qDebug() << "IosController::vpnStatusDidChange" << iosStatusToState(session.status) << session; - emit connectionStateChanged(iosStatusToState(session.status)); + qDebug() << "IosController::vpnStatusDidChange" << iosStatusToState(session.status) << session; + + if (session.status == NEVPNStatusDisconnected) { + if (@available(iOS 16.0, *)) { + [session fetchLastDisconnectErrorWithCompletionHandler:^(NSError * _Nullable error) { + if (error != nil) { + qDebug() << "Disconnect error" << error.domain << error.localizedDescription; + + if ([error.domain isEqualToString:NEVPNConnectionErrorDomain]) { + switch (error.code) { + case 1: + break; + default: + break; + } + } + + NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError != nil) { + qDebug() << "Disconnect underlying error" << underlyingError.domain << underlyingError.localizedDescription; + + if ([underlyingError.domain isEqualToString:@"NEAgentErrorDomain"]) { + switch (underlyingError.code) { + case 1: + qDebug() << "Disconnect underlying error" << "General. Use sysdiagnose."; + break; + case 2: + qDebug() << "Disconnect underlying error" << "Plug-in unavailable. Use sysdiagnose."; + break; + default: + qDebug() << "Disconnect underlying error" << "Unknown code. Use sysdiagnose."; + break; + } + } + } + } else { + qDebug() << "Disconnect error is absent"; + } + }]; + } else { + qDebug() << "Disconnect error is unavailable on iOS < 16.0"; + } + } + + emit connectionStateChanged(iosStatusToState(session.status)); } }