mirror of
https://github.com/amnezia-vpn/amnezia-client.git
synced 2026-06-23 02:00:20 +07:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a3b591f141 | |||
| 73ef3af9c3 |
@@ -76,6 +76,11 @@ set_target_properties(${PROJECT} PROPERTIES
|
|||||||
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
|
||||||
XCODE_EMBED_APP_EXTENSIONS networkextension
|
XCODE_EMBED_APP_EXTENSIONS networkextension
|
||||||
|
# Ensure dSYM generation for App Store symbolication
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "YES"
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DEFINED DEPLOY)
|
if(DEFINED DEPLOY)
|
||||||
@@ -141,4 +146,3 @@ set_property(TARGET ${PROJECT} PROPERTY XCODE_EMBED_FRAMEWORKS
|
|||||||
|
|
||||||
set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/)
|
set(CMAKE_XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/)
|
||||||
target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework")
|
target_link_libraries("networkextension" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/3rd-prebuilt/3rd-prebuilt/openvpn/apple/OpenVPNAdapter-ios/OpenVPNAdapter.framework")
|
||||||
|
|
||||||
|
|||||||
@@ -88,6 +88,11 @@ set_target_properties(${PROJECT} PROPERTIES
|
|||||||
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks"
|
||||||
XCODE_EMBED_APP_EXTENSIONS AmneziaVPNNetworkExtension
|
XCODE_EMBED_APP_EXTENSIONS AmneziaVPNNetworkExtension
|
||||||
|
# Ensure dSYM generation for App Store symbolication
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "YES"
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DEPLOY)
|
if(DEPLOY)
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ set_target_properties(networkextension PROPERTIES
|
|||||||
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
|
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
|
||||||
|
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../Frameworks"
|
||||||
|
# Ensure dSYM generation for symbolication
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "YES"
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DEPLOY)
|
if(DEPLOY)
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ set_target_properties(AmneziaVPNNetworkExtension PROPERTIES
|
|||||||
|
|
||||||
XCODE_ATTRIBUTE_INFOPLIST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
|
XCODE_ATTRIBUTE_INFOPLIST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
|
||||||
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../../../Frameworks @loader_path/../../../../Frameworks"
|
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../../../../Frameworks @loader_path/../../../../Frameworks"
|
||||||
|
# Ensure dSYM generation for App Store symbolication
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] "dwarf-with-dsym"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES"
|
||||||
|
XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "YES"
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DEPLOY)
|
if(DEPLOY)
|
||||||
|
|||||||
@@ -10,28 +10,36 @@ public enum Socks5Tunnel {
|
|||||||
_ = strcpy($0, "com.apple.net.utun_control")
|
_ = strcpy($0, "com.apple.net.utun_control")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for fd: Int32 in 0...1024 {
|
|
||||||
var addr = sockaddr_ctl()
|
func scanForUtun() -> Int32? {
|
||||||
var ret: Int32 = -1
|
for fd: Int32 in 0...1024 {
|
||||||
var len = socklen_t(MemoryLayout.size(ofValue: addr))
|
var addr = sockaddr_ctl()
|
||||||
withUnsafeMutablePointer(to: &addr) {
|
var ret: Int32 = -1
|
||||||
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
|
var len = socklen_t(MemoryLayout.size(ofValue: addr))
|
||||||
ret = getpeername(fd, $0, &len)
|
withUnsafeMutablePointer(to: &addr) {
|
||||||
|
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
|
||||||
|
ret = getpeername(fd, $0, &len)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if ret != 0 || addr.sc_family != AF_SYSTEM { continue }
|
||||||
if ret != 0 || addr.sc_family != AF_SYSTEM {
|
if ctlInfo.ctl_id == 0 {
|
||||||
continue
|
ret = ioctl(fd, CTLIOCGINFO, &ctlInfo)
|
||||||
}
|
if ret != 0 { continue }
|
||||||
if ctlInfo.ctl_id == 0 {
|
|
||||||
ret = ioctl(fd, CTLIOCGINFO, &ctlInfo)
|
|
||||||
if ret != 0 {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
if addr.sc_id == ctlInfo.ctl_id { return fd }
|
||||||
}
|
}
|
||||||
if addr.sc_id == ctlInfo.ctl_id {
|
return nil
|
||||||
return fd
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On newer iOS versions, utun can appear slightly after settings
|
||||||
|
// application. Poll briefly rather than aborting.
|
||||||
|
let deadline = Date().addingTimeInterval(3.0)
|
||||||
|
repeat {
|
||||||
|
if let fd = scanForUtun() { return fd }
|
||||||
|
// Sleep a bit to avoid busy-waiting
|
||||||
|
usleep(50_000) // 50ms
|
||||||
|
} while Date() < deadline
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +71,8 @@ public enum Socks5Tunnel {
|
|||||||
@discardableResult
|
@discardableResult
|
||||||
public static func run(withConfig filePath: String) -> Int32 {
|
public static func run(withConfig filePath: String) -> Int32 {
|
||||||
guard let fileDescriptor = self.tunnelFileDescriptor else {
|
guard let fileDescriptor = self.tunnelFileDescriptor else {
|
||||||
fatalError("Get tunnel file descriptor failed.")
|
// Tunnel FD not ready; do not crash the extension
|
||||||
|
return -1
|
||||||
}
|
}
|
||||||
return hev_socks5_tunnel_main(filePath.cString(using: .utf8), fileDescriptor)
|
return hev_socks5_tunnel_main(filePath.cString(using: .utf8), fileDescriptor)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,9 @@ extension PacketTunnelProvider {
|
|||||||
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
||||||
completionHandler(PacketTunnelProviderError.couldNotStartBackend)
|
completionHandler(PacketTunnelProviderError.couldNotStartBackend)
|
||||||
case .invalidState:
|
case .invalidState:
|
||||||
fatalError()
|
wg_log(.error, staticMessage: "Starting tunnel failed: invalid adapter state")
|
||||||
|
errorNotifier.notify(PacketTunnelProviderError.couldNotStartBackend)
|
||||||
|
completionHandler(PacketTunnelProviderError.couldNotStartBackend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ extension Constants {
|
|||||||
if let cachesDirectoryURL = FileManager.default.urls(for: .cachesDirectory,
|
if let cachesDirectoryURL = FileManager.default.urls(for: .cachesDirectory,
|
||||||
in: .userDomainMask).first {
|
in: .userDomainMask).first {
|
||||||
return cachesDirectoryURL
|
return cachesDirectoryURL
|
||||||
} else {
|
|
||||||
fatalError("Unable to retrieve caches directory.")
|
|
||||||
}
|
}
|
||||||
|
// Fallback to temporaryDirectory rather than crashing
|
||||||
|
return FileManager.default.temporaryDirectory
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user