Don't crash on failure to obtain version info and inform user on what is needed to be able to retrieve version info from the Go client.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
@@ -7,22 +7,28 @@ import PromiseKit
|
||||
import NetworkExtension
|
||||
|
||||
enum GoVersionCoordinatorError: Error {
|
||||
case noSession
|
||||
case noEnabledSession
|
||||
case noResponse
|
||||
}
|
||||
|
||||
extension AppCoordinator: SettingsTableViewControllerDelegate {
|
||||
func goVersionInformation() -> Promise<String> {
|
||||
return Promise(resolver: { (resolver) in
|
||||
guard let session = self.providerManagers?.first?.connection as? NETunnelProviderSession else {
|
||||
resolver.reject(GoVersionCoordinatorError.noSession)
|
||||
guard let session = self.providerManagers?.first(where: { $0.isEnabled })?.connection as? NETunnelProviderSession else {
|
||||
resolver.reject(GoVersionCoordinatorError.noEnabledSession)
|
||||
return
|
||||
}
|
||||
try session.sendProviderMessage(ExtensionMessage.requestVersion.data, responseHandler: { (data) in
|
||||
guard let responseString = String(data: data!, encoding: .utf8) else {
|
||||
return
|
||||
}
|
||||
resolver.fulfill(responseString)
|
||||
})
|
||||
do {
|
||||
try session.sendProviderMessage(ExtensionMessage.requestVersion.data, responseHandler: { (data) in
|
||||
guard let data = data, let responseString = String(data: data, encoding: .utf8) else {
|
||||
resolver.reject(GoVersionCoordinatorError.noResponse)
|
||||
return
|
||||
}
|
||||
resolver.fulfill(responseString)
|
||||
})
|
||||
} catch {
|
||||
resolver.reject(error)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user