Improve service stop
This commit is contained in:
@@ -98,7 +98,7 @@ public struct OverviewView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private nonisolated func serviceReload() async throws {
|
private nonisolated func serviceReload() async throws {
|
||||||
try LibboxNewStandaloneCommandClient()?.serviceReload()
|
try LibboxNewStandaloneCommandClient()!.serviceReload()
|
||||||
}
|
}
|
||||||
|
|
||||||
private nonisolated func setSystemProxyEnabled(_ isEnabled: Bool) async {
|
private nonisolated func setSystemProxyEnabled(_ isEnabled: Bool) async {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import Libbox
|
||||||
import Library
|
import Library
|
||||||
import NetworkExtension
|
import NetworkExtension
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
@@ -80,7 +81,16 @@ public struct StartStopButton: View {
|
|||||||
try await profile.start()
|
try await profile.start()
|
||||||
await environments.logClient.connect()
|
await environments.logClient.connect()
|
||||||
} else {
|
} else {
|
||||||
|
var err: Error?
|
||||||
|
do {
|
||||||
|
try LibboxNewStandaloneCommandClient()!.serviceClose()
|
||||||
|
} catch {
|
||||||
|
err = error
|
||||||
|
}
|
||||||
await profile.stop()
|
await profile.stop()
|
||||||
|
if let err {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
|
|||||||
@@ -262,6 +262,11 @@ public class ExtensionPlatformInterface: NSObject, LibboxPlatformInterfaceProtoc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func postServiceClose() {
|
||||||
|
reset()
|
||||||
|
tunnel.postServiceClose()
|
||||||
|
}
|
||||||
|
|
||||||
public func getSystemProxyStatus() -> LibboxSystemProxyStatus? {
|
public func getSystemProxyStatus() -> LibboxSystemProxyStatus? {
|
||||||
let status = LibboxSystemProxyStatus()
|
let status = LibboxSystemProxyStatus()
|
||||||
guard let networkSettings else {
|
guard let networkSettings else {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
var error: NSError?
|
var error: NSError?
|
||||||
LibboxRedirectStderr(FilePath.cacheDirectory.appendingPathComponent("stderr.log").relativePath, &error)
|
LibboxRedirectStderr(FilePath.cacheDirectory.appendingPathComponent("stderr.log").relativePath, &error)
|
||||||
if let error {
|
if let error {
|
||||||
writeError("(packet-tunnel) redirect stderr error: \(error.localizedDescription)")
|
writeFatalError("(packet-tunnel) redirect stderr error: \(error.localizedDescription)")
|
||||||
}
|
}
|
||||||
|
|
||||||
await LibboxSetMemoryLimit(!SharedPreferences.ignoreMemoryLimit.get())
|
await LibboxSetMemoryLimit(!SharedPreferences.ignoreMemoryLimit.get())
|
||||||
@@ -39,14 +39,14 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
if platformInterface == nil {
|
if platformInterface == nil {
|
||||||
platformInterface = ExtensionPlatformInterface(self)
|
platformInterface = ExtensionPlatformInterface(self)
|
||||||
}
|
}
|
||||||
commandServer = try await LibboxNewCommandServer(platformInterface, Int32(SharedPreferences.maxLogLines.get()))
|
commandServer = await LibboxNewCommandServer(platformInterface, Int32(SharedPreferences.maxLogLines.get()))
|
||||||
do {
|
do {
|
||||||
try commandServer.start()
|
try commandServer.start()
|
||||||
} catch {
|
} catch {
|
||||||
writeFatalError("(packet-tunnel): log server start error: \(error.localizedDescription)")
|
writeFatalError("(packet-tunnel): log server start error: \(error.localizedDescription)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
writeMessage("(packet-tunnel) log server started")
|
writeMessage("(packet-tunnel): Here I stand")
|
||||||
await startService()
|
await startService()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,17 +58,13 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeError(_ message: String) {
|
|
||||||
writeMessage(message)
|
|
||||||
var error: NSError?
|
|
||||||
LibboxWriteServiceError(message, &error)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func writeFatalError(_ message: String) {
|
public func writeFatalError(_ message: String) {
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
NSLog(message)
|
NSLog(message)
|
||||||
#endif
|
#endif
|
||||||
writeError(message)
|
writeMessage(message)
|
||||||
|
var error: NSError?
|
||||||
|
LibboxWriteServiceError(message, &error)
|
||||||
cancelTunnelWithError(NSError(domain: message, code: 0))
|
cancelTunnelWithError(NSError(domain: message, code: 0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +82,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
}
|
}
|
||||||
let configContent: String
|
let configContent: String
|
||||||
do {
|
do {
|
||||||
configContent = try await profile.read()
|
configContent = try profile.read()
|
||||||
} catch {
|
} catch {
|
||||||
writeFatalError("(packet-tunnel) error: read config file \(profile.path): \(error.localizedDescription)")
|
writeFatalError("(packet-tunnel) error: read config file \(profile.path): \(error.localizedDescription)")
|
||||||
return
|
return
|
||||||
@@ -94,7 +90,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
var error: NSError?
|
var error: NSError?
|
||||||
let service = LibboxNewService(configContent, platformInterface, &error)
|
let service = LibboxNewService(configContent, platformInterface, &error)
|
||||||
if let error {
|
if let error {
|
||||||
writeError("(packet-tunnel) error: create service: \(error.localizedDescription)")
|
writeFatalError("(packet-tunnel) error: create service: \(error.localizedDescription)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard let service else {
|
guard let service else {
|
||||||
@@ -105,7 +101,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
try service.start()
|
try service.start()
|
||||||
} catch {
|
} catch {
|
||||||
commandServer.setService(nil)
|
commandServer.setService(nil)
|
||||||
writeError("(packet-tunnel) error: start service: \(error.localizedDescription)")
|
writeFatalError("(packet-tunnel) error: start service: \(error.localizedDescription)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
boxService = service
|
boxService = service
|
||||||
@@ -119,7 +115,7 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
do {
|
do {
|
||||||
try service.close()
|
try service.close()
|
||||||
} catch {
|
} catch {
|
||||||
writeError("(packet-tunnel) error: stop service: \(error.localizedDescription)")
|
writeMessage("(packet-tunnel) error: stop service: \(error.localizedDescription)")
|
||||||
}
|
}
|
||||||
boxService = nil
|
boxService = nil
|
||||||
commandServer.setService(nil)
|
commandServer.setService(nil)
|
||||||
@@ -136,9 +132,14 @@ open class ExtensionProvider: NEPacketTunnelProvider {
|
|||||||
reasserting = false
|
reasserting = false
|
||||||
}
|
}
|
||||||
stopService()
|
stopService()
|
||||||
|
commandServer.resetLog()
|
||||||
await startService()
|
await startService()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func postServiceClose() {
|
||||||
|
boxService = nil
|
||||||
|
}
|
||||||
|
|
||||||
override open func stopTunnel(with reason: NEProviderStopReason) async {
|
override open func stopTunnel(with reason: NEProviderStopReason) async {
|
||||||
writeMessage("(packet-tunnel) stopping, reason: \(reason)")
|
writeMessage("(packet-tunnel) stopping, reason: \(reason)")
|
||||||
stopService()
|
stopService()
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ public struct MenuView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private nonisolated func serviceReload() async throws {
|
private nonisolated func serviceReload() async throws {
|
||||||
try LibboxNewStandaloneCommandClient()?.serviceReload()
|
try LibboxNewStandaloneCommandClient()!.serviceReload()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user